vnpy/vn.archive/vn.cs/hshlp/CITICs_HsT2Hlp.h
2016-07-02 11:12:56 +08:00

142 lines
5.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __CITICS_HSHLP_H__
#define __CITICS_HSHLP_H__
#ifdef WIN32
#ifdef CITICS_HSHLP_EXPORTS
#define CITICS_HSHLP_API __declspec(dllexport)
#else
#define CITICS_HSHLP_API __declspec(dllimport)
#endif
#define CITICSSTDCALL __stdcall /* ensure stcall calling convention on NT */
#else
#define CITICS_HSHLP_API
#define CITICSSTDCALL /* leave blank for other systems */
#endif
#define ERROR_MSG_SIZE 512
//////////////////////////////////////////////////////////////////////////
/**
* 同步业务调用
* 使用该标识调用业务时,系统处于阻塞状态直到返回应答信息或超时
*/
#define BIZCALL_SYNC 0
/**
* 异步业务调用
* 使用该标识调用业务时,系统立即返回而不等待应答信息。
* 需要调用QueueGetMsg获取应答结果信息
*/
#define BIZCALL_ASYNC 1
/**
* 订阅消息中心发布的消息信息
* 标识该业务为消息订阅请求。如订阅成交推送数据、系统通知消息等
* 需要调用QueueGetMsg获取订阅的信息
*/
#define BIZCALL_SUBSCRIBE 3
typedef void *HSHLPCFGHANDLE;
typedef void *HSHLPHANDLE;
typedef void *HSHLPASYNCMSG;
#pragma pack(1)
/* 异步和订阅消息控制信息*/
typedef struct
{
int nFlags; // 位标识信息0x0:正常消息, >0:系统状态消息
int nFuncID; // 异步请求功能号
int nReqNo; // 异步请求接受序号,根据该序号和功能号对请求和应答数据匹配
int nIssueType; // 发布消息类别
int nErrorNo; // 错误代码
HSHLPASYNCMSG HAsyncMsg; // 消息句柄
char szErrorInfo[ERROR_MSG_SIZE+1]; // 错误信息
}MSG_CTRL, *LPMSG_CTRL;
#pragma pack()
#ifdef __cplusplus
extern "C"
{
#endif
// 初始化配置项szConfigFile为空时则按系统默认值初始化hConfig为出参
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_InitConfig(HSHLPCFGHANDLE* hConfig, const char* szConfigFile=NULL);
// 加载配置文件项可以加载多个不同的配置文件返回不同的配置句柄。等同于InitConfig
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_LoadConfig(HSHLPCFGHANDLE* hConfig, const char* szConfigFile);
// 重置服务器连接地址。格式ip1:port1;ip2:port2;
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_ResetServer(HSHLPCFGHANDLE hConfig, const char* szAddr);
// 根据配置句柄,初始化一个连接对象。
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_Init(HSHLPHANDLE* HlpHandle, HSHLPCFGHANDLE hConfig);
// 释放连接句柄系统资源
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_Exit(HSHLPHANDLE HlpHandle);
// 与服务器建立连接
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_ConnectServer(HSHLPHANDLE HlpHandle);
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_DisConnect(HSHLPHANDLE HlpHandle);
// 提交业务请求如果szParam参数为NULL则认为是通过SetValue函数设置的请求参数
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_BizCallAndCommit(HSHLPHANDLE HlpHandle, int iFuncID, const char* szParam=NULL, int nBizCallType=BIZCALL_SYNC, LPMSG_CTRL lpMsgCtrl=NULL);
// 获取记录行、列数,返回值为行、列数
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetRowCount(HSHLPHANDLE HlpHandle, LPMSG_CTRL lpMsgCtrl=NULL);
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetColCount(HSHLPHANDLE HlpHandle, LPMSG_CTRL lpMsgCtrl=NULL);
// 获取字段名称序号以0为基数
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetColName(HSHLPHANDLE HlpHandle, int iColumn, char* szColName, LPMSG_CTRL lpMsgCtrl=NULL);
// 获取下一行记录第一次调用则首先打开结果集并把第0行作为当前记录行
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetNextRow(HSHLPHANDLE HlpHandle, LPMSG_CTRL lpMsgCtrl=NULL);
// 根据字段名称,获取字段值
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetValue(HSHLPHANDLE HlpHandle, const char* szKeyName, char* szValue, LPMSG_CTRL lpMsgCtrl=NULL);
// 根据字段序号获取字段值序号以0为基数
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetValueByIndex(HSHLPHANDLE HlpHandle, int iColumn, char* szValue, LPMSG_CTRL lpMsgCtrl=NULL);
// 获取当前错误代码和信息
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_GetErrorMsg(HSHLPHANDLE HlpHandle, int* piErrorCode, char* szErrorMsg);
/************************************************************************/
// 另一种请求参数设置的方法,一个一个的设置。
// 初始化请求参数
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_BeginParam(HSHLPHANDLE HlpHandle);
// 设置每个请求参数字段名称和值
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_SetValue(HSHLPHANDLE HlpHandle, const char* szKeyName, const char* szValue);
/************************************************************************/
// 异步请求和消息订阅相关函数
// 获取异步消息队列中的消息数量
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_QueueMsgCount(HSHLPHANDLE HlpHandle);
// 从队列中读取一条消息如果队列中没有数据该函数会一直阻塞不返回直到nWaitTime超时时间后才返回。
// nWaitTime: 单位毫秒
// = 0: 立即返回如果队列中有数据则返回Msg且return值为 0否则return值为-5(超时错误)
// =-1: 阻塞直到队列中有数据获取到Msg 才返回。否则将永久阻塞等待。return值为 0
// = 其它值超时时间如果队列中有数据则立即返回否则等待time时间后返回。return值为 -5(超时错误)。
// Return: 0: 队列中有数据且获取消息成功;
// -5: 超时错误,在设定的时间内队列中没有数据。
// 其它错误:
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_QueueGetMsg(HSHLPHANDLE HlpHandle, LPMSG_CTRL lpMsgCtrl /*Out*/, int nWaitTime=0);
// 处理完成或者不需要该消息时,应及时删除该消息,否则消息将占用大量内存。
// 如果不删除有可能每次都Get到同一条消息
CITICS_HSHLP_API int CITICSSTDCALL CITICs_HsHlp_QueueEraseMsg(HSHLPHANDLE HlpHandle, LPMSG_CTRL lpMsgCtrl /*In*/);
#ifdef __cplusplus
}
#endif
#endif