【实例简介】
期货交易的简易C demo
【实例截图】
【核心代码】
/** @file

  • 演示T2_SDK进行打包、发包、收包、解包
    • @author T2小组
    • @author 恒生电子股份有限公司
    • @version 1.0
    • @date 20090327
  • */
  • #include <Include/t2sdk_interface.h>
  • // 全局连接对象
  • CConnectionInterface *g_Connection = NULL;
  • void ShowPacket(IF2UnPacker *lpUnPacker)
  • {
  • int i = 0, t = 0, j = 0, k = 0;
  • for (i = 0; i < lpUnPacker->GetDatasetCount(); i)
  • {
  • // 设置当前结果集
  • lpUnPacker->SetCurrentDatasetByIndex(i);
  • // 打印字段
  • for (t = 0; t < lpUnPacker->GetColCount(); t)
  • {
  • printf("%20s", lpUnPacker->GetColName(t));
  • }
  • putchar(’\n’);
  • // 打印所有记录
  • for (j = 0; j < (int)lpUnPacker->GetRowCount(); j)
  • {
  • // 打印每条记录
  • for (k = 0; k < lpUnPacker->GetColCount(); k)
  • {
  • switch (lpUnPacker->GetColType(k))
  • {
  • case ‘I’:
  • printf("%20d", lpUnPacker->GetIntByIndex(k));
  • break;
  • case ‘C’:
  • printf("%20c", lpUnPacker->GetCharByIndex(k));
  • break;
  • case ‘S’:
  • printf("%20s", lpUnPacker->GetStrByIndex(k));
  • break;
  • case ‘F’:
  • printf("%20f", lpUnPacker->GetDoubleByIndex(k));
  • break;
  • case ‘R’:
  • {
  • int nLength = 0;
  • void *lpData = lpUnPacker->GetRawByIndex(k, &nLength);
  • // 对2进制数据进行处理
  • break;
  • }
  • default:
  • // 未知数据类型
  • printf(“未知数据类型。\n”);
  • break;
  • }
  • }
  • putchar(’\n’);
  • lpUnPacker->Next();
  • }
  • putchar(’\n’);
  • }
  • }
  • // 自定义类CCallback,通过继承(实现)CCallbackInterface,来自定义各种事件(包括连接成功、
  • // 连接断开、发送完成、收到数据等)发生时的回调方法
  • class CCallback : public CCallbackInterface
  • {
  • public:
  • // 因为CCallbackInterface的最终纯虚基类是IKnown,所以需要实现一下这3个方法
  • unsigned long FUNCTION_CALL_MODE QueryInterface(const char *iid, IKnown **ppv);
  • unsigned long FUNCTION_CALL_MODE AddRef();
  • unsigned long FUNCTION_CALL_MODE Release();
  • // 各种事件发生时的回调方法,实际使用时可以根据需要来选择实现,对于不需要的事件回调方法,可直接return
  • // Reserved?为保留方法,为以后扩展做准备,实现时可直接return或return 0。
  • void FUNCTION_CALL_MODE OnConnect(CConnectionInterface *lpConnection);
  • void FUNCTION_CALL_MODE OnSafeConnect(CConnectionInterface *lpConnection);
  • void FUNCTION_CALL_MODE OnRegister(CConnectionInterface *lpConnection);
  • void FUNCTION_CALL_MODE OnClose(CConnectionInterface *lpConnection);
  • void FUNCTION_CALL_MODE OnSent(CConnectionInterface *lpConnection, int hSend, void *reserved1, void *reserved2, int nQueuingData);
  • void FUNCTION_CALL_MODE Reserved1(void *a, void *b, void *c, void *d);
  • void FUNCTION_CALL_MODE Reserved2(void *a, void *b, void *c, void *d);
  • int FUNCTION_CALL_MODE Reserved3();
  • void FUNCTION_CALL_MODE Reserved4();
  • void FUNCTION_CALL_MODE Reserved5();
  • void FUNCTION_CALL_MODE Reserved6();
  • void FUNCTION_CALL_MODE Reserved7();
  • void FUNCTION_CALL_MODE OnReceivedBiz(CConnectionInterface *lpConnection, int hSend, const void *lpUnPackerOrStr, int nResult);
  • void FUNCTION_CALL_MODE OnReceivedBizEx(CConnectionInterface *lpConnection, int hSend, LPRET_DATA lpRetData, const void *lpUnpackerOrStr, int nResult);
  • void FUNCTION_CALL_MODE OnReceivedBizMsg(CConnectionInterface lpConnection, int hSend, IBizMessage lpMsg);
  • };
  • unsigned long CCallback::QueryInterface(const char *iid, IKnown **ppv)
  • {
  • return 0;
  • }
  • unsigned long CCallback::AddRef()
  • {
  • return 0;
  • }
  • unsigned long CCallback::Release()
  • {
  • return 0;
  • }
  • // 以下各回调方法的实现仅仅为演示使用
  • void CCallback::OnConnect(CConnectionInterface *lpConnection)
  • {
  • puts(“CCallback::OnConnect”);
  • }
  • void CCallback::OnSafeConnect(CConnectionInterface *lpConnection)
  • {
  • puts(“CCallback::OnSafeConnect”);
  • }
  • void CCallback::OnRegister(CConnectionInterface *lpConnection)
  • {
  • puts(“CCallback::OnRegister”);
  • }
  • void CCallback::OnClose(CConnectionInterface *lpConnection)
  • {
  • puts(“CCallback::OnClose”);
  • }
  • void CCallback::OnSent(CConnectionInterface *lpConnection, int hSend, void *reserved1, void *reserved2, int nQueuingData)
  • {
  • }
  • void CCallback::Reserved1(void *a, void *b, void *c, void *d)
  • {
  • }
  • void CCallback::Reserved2(void *a, void *b, void *c, void *d)
  • {
  • }
  • void CCallback::OnReceivedBizEx(CConnectionInterface *lpConnection, int hSend, LPRET_DATA lpRetData, const void *lpUnpackerOrStr, int nResult)
  • {
  • }
  • void CCallback::OnReceivedBizMsg(CConnectionInterface lpConnection, int hSend, IBizMessage lpMsg)
  • {
  • if (lpMsg!=NULL)
  • {
  • //成功,应用程序不能释放lpBizMessageRecv消息
  • if (lpMsg->GetErrorNo() ==0)
  • {
  • int iLen = 0;
  • const void* lpBuffer = lpMsg->GetContent(iLen);
  • IF2UnPacker *lpUnPack = NewUnPacker((void *)lpBuffer,iLen);
  • ShowPacket(lpUnPack);
  • lpMsg->ChangeReq2AnsMessage();
  • //可以添加自己要添加的字段,如:
  • //lpMsg->SetBranchNo();
  • //一定不能在回调中同步发送卡住线程
  • lpConnection->SendBizMsg(lpMsg,1);
  • }
  • else
  • {
  • //有错误信息
  • puts(lpMsg->GetErrorInfo());
  • }
  • }
  • //以上只是简单的演示怎么操作ChangeReq2AnsMessage,标准操作应该把消息入其他队列,必须自行拷贝,操作如下:
  • //int iMsgLen = 0;
  • //void * lpMsgBuffer = lpMsg->GetBuff(iMsgLen);
  • //将lpMsgBuffer拷贝走,然后在其他线程中恢复成消息可进行如下操作:
  • //lpBizMessageRecv->SetBuff(lpMsgBuffer,iMsgLen);
  • //之后才可以进行
  • //lpBizMessageRecv->ChangeReq2AnsMessage();
  • //可以添加自己要添加的字段,如:
  • //lpMsg->SetBranchNo();
  • //lpConnection->SendBizMsg(lpMsg,1);
  • }
  • void CCallback::OnReceivedBiz(CConnectionInterface *lpConnection, int hSend, const void *lpUnPackerOrStr, int nResult)
  • {
  • }
  • int CCallback::Reserved3()
  • {
  • return 0;
  • }
  • void CCallback::Reserved4()
  • {
  • }
  • void CCallback::Reserved5()
  • {
  • }
  • void CCallback::Reserved6()
  • {
  • }
  • void CCallback::Reserved7()
  • {
  • }
  • int main()
  • {
  • // 通过T2SDK的引出函数,来获取一个新的CConfig对象
  • // 此对象在创建连接对象时被传递,用于配置所创建的连接对象的各种属性(比如服务器IP地址、安全模式)
  • CConfigInterface * lpConfig = NewConfig();
  • // 通过T2SDK的引出函数NewXXXX返回的对象,需要调用对象的Release方法释放,而不能直接用delete
  • // 因为t2sdk.dll和调用程序可能是由不同的编译器、编译模式生成,delete可能会导致异常
  • // 为了适应Delphi等使用(Delphi对接口自动调用AddRef方法),用C/C 开发的代码,需要在NewXXXX之后调用一下AddRef
  • // 以保证引用计数正确
  • lpConfig->AddRef();
  • // [t2sdk] servers指定需要连接的IP地址及端口
  • lpConfig->SetString(“t2sdk”, “servers”, “127.0.0.1:9004”);
  • // [t2sdk] license_file指定许可证文件
  • lpConfig->SetString(“t2sdk”, “license_file”, “license.dat”);
  • // [t2sdk] send_queue_size指定T2_SDK的发送队列大小
  • lpConfig->SetString(“t2sdk”, “send_queue_size”, “100”);
  • //有名连接
  • lpConfig->SetString(“t2sdk”, “login_name”, “xuxp”);
  • // 通过T2SDK的引出函数,来获取一个新的CConnection对象
  • g_Connection = NewConnection(lpConfig);
  • g_Connection->AddRef();
  • // 创建自定义类CCallback的对象(在初始化连接对象时需传递此对象,请看下面代码)
  • CCallback callback;
  • int ret = 0;
  • // 初始化连接对象,返回0表示初始化成功,注意此时并没开始连接服务器,这里必须用Create2BizMsg,否则回调不成功
  • if (0 == (ret = g_Connection->Create2BizMsg(&callback)))
  • {
  • // 正式开始连接注册,参数1000为超时参数,单位是ms
  • if (ret = g_Connection->Connect(1000))
  • {
  • // 若连接/注册失败,打印失败原因
  • puts(g_Connection->GetErrorMsg(ret));
  • }
  • else
  • {
  • //连接注册成功
  • puts(“连接注册成功”);
  • }
  • }
  • else
  • {
  • puts(g_Connection->GetErrorMsg(ret));
  • }
  • // 通过getchar阻塞线程,等待服务端应答包到达
  • // 演示断开重连时,可在此时关闭服务器,然后再恢复
  • getchar();
  • // 释放资源
  • g_Connection->Release();
  • lpConfig->Release();
  • return 0;
  • }
  • 内容转载自网站: 阁楼网源 -最干净的资源网站

期货交易的C++简易demo相关推荐

  1. python景点情感分析代码_python snownlp情感分析简易demo(分享)

    SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...

  2. vue.js+flask+element-ui简易Demo 气势的信心

    vue.js+flask+element-ui简易Demo 气势的信心 计算机/健身爱好者 10 人赞了该文章 最近工作中用到Vue.js加上一直在用的Flask,所以准备写个小小的demo巩固下. ...

  3. 基于python的情感分析案例-python snownlp情感分析简易demo(分享)

    SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...

  4. CAS4.1单点登录实现(包含原理配置实现及简易demo)

    CAS单点登录-简介 CAS 简介 CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠 ...

  5. 基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo

    目录 前言 一.分析 1.1.qq聊天功能分析 1.2.WebSocket介绍 1.2.1.什么是消息推送呢? 1.2.2.原理解析 1.2.3.报文格式 二.简易demo 2.1.后端实现 2.1. ...

  6. 实时语音转文字app简易demo(这里使用了阿里的接口,可以替换成科大讯飞)

    2019独角兽企业重金招聘Python工程师标准>>> 这里只是功能实现(个人非android开发),可能有很多更好的实现方式,该功能的开发是之前看到过阿里的实时语音转文字的接口,当 ...

  7. 第三方支付-支付宝支付简易DEMO

    Java实现支付宝支付 1.从支付宝开放平台下载官方Demo https://opendocs.alipay.com/open/270/106291/ 2.将下载的Demo project导入到开发工 ...

  8. auto.js 快手极速版刷视频简易demo

    这是一个无聊做的demo 快手极速版刷视频.当然也适用于刷宝短视频APP,抖音极速版我们可以设置时间,而去打开刷宝APP auto.js是基于javascript的自动化脚本,它可以模拟人的操作,功能 ...

  9. 如何使div像星星一样,简易demo,授人以鱼,自行更改完善

    直接上代码 <!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; ...

最新文章

  1. 网络推广外包——网络推广外包指出新站上线前一定要做好自我检测
  2. 【PAT】A1028 List Sorting
  3. vue 动态路由_Vue.js应用性能优化三
  4. 类的成员函数与内联以及静态成员
  5. java调用C++ DLL库方法
  6. 实验四 恶意代码
  7. VGA光端机技术原理及应用领域介绍
  8. react native仿微信性别选择-自定义弹出框
  9. linux-使用xftp远程传输文件给主机
  10. 6个很棒的PostCSS插件,让您成为一个CSS向导
  11. python类的魔法方法基础
  12. nginx 代理到其他端口_「从单体架构到分布式架构」请求增多,单点变集群(2):Nginx...
  13. 乐鑫科技线上笔试什么内容_2020广东省公务员考试笔试考什么内容?笔试如何去备考?...
  14. 【学习笔记】python实现excel数据处理
  15. NRF 52832 ble_app_blinky 官方示例 part1
  16. 知识图谱概论(二):概念具象化描述
  17. 领存技术至强 E5-2648L 6U VPX 通用密集计算刀片
  18. 五一劳动节,向劳动者致敬!
  19. Super Unicode Editor(十六进制编辑器)v3.01中文版
  20. VB.net数据库编程(01):简单的入门实例--连接到Access文件

热门文章

  1. 漫画:大数据的社交牛逼症是怎么得的?
  2. PHP Apache Mysql的配置搭建及多站点配置
  3. 从TensorFlow到DL4J——主流深度学习框架对比分析
  4. CentOS7.4搭建oracle 12.2 adg
  5. ExcelJS 如何设置千分位分隔符?
  6. 《信息系统项目管理案例分析指南》书本推荐
  7. Redis常用命令(三,共三篇)
  8. 计算两个时间内指定礼拜几的数量
  9. 有没有好用的数据恢复软件推荐?
  10. 60个最新的行业趋势报告网站 转自微博@双博士的分享