在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++语言基础 → 期货交易的C++简易demo

期货交易的C++简易demo

C/C++语言基础

下载此实例
  • 开发语言:C/C++
  • 实例大小:4.84M
  • 下载次数:20
  • 浏览次数:309
  • 发布时间:2020-11-21
  • 实例类别:C/C++语言基础
  • 发 布 人:wognql123
  • 文件格式:.rar
  • 所需积分:2
 相关标签: demo c++ 交易

实例介绍

【实例简介】

期货交易的简易C demo

【实例截图】

from clipboard

from clipboard

【核心代码】

/** @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;
}



标签: demo c++ 交易

实例下载地址

期货交易的C++简易demo

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警