Hotfox Agent是开发Hotfox Client的Native C开发库。
导出的函数包括:
.htx_c_api中的HTX_xxx系列函数
.umx2c.h中的UMX_xxx,RS_xxx系列函数
以下为如何使用的示例代码。
#include <stdio.h>
#include "../htx_c_api.h"
#include "../umx2c.h"
#include "../thr_mgr.h"
using namespace ngns;
#pragma comment(lib,"..//debug//htx_c.lib")
const char *server_addr = "192.168.0.117";
unsigned short server_port = 9601;
int OnRecv668(void *msg) {
unsigned short msg_type;
unsigned long msg_id;
UMX_GetMsgID(msg,&msg_type,&msg_id);
printf("recv %d:%d message./n",msg_type,msg_id);
return 0;
}
int OnRecv667(void *tmsg) {
printf("recv 667./n");
return 0;
}
void OnConnect() {
printf("onconnect./n");
}
void OnClose() {
printf("onclose./n");
}
DWORD __stdcall RecvProc(void *arg) {
while(1) {
void *msg = 0;
HTX_Recv(&msg);
if (msg) {
unsigned short msg_type;
unsigned long msg_id;
UMX_GetMsgID(msg,&msg_type,&msg_id);
printf("recv %d:%d message./n",msg_type,msg_id);
UMX_Release(msg);
}
}
}
HANDLE hExitEvent;
int wait_event_loop() {
hExitEvent = CreateEvent(0,true,false,0);
WaitForSingleObject(hExitEvent,INFINITE);
return 0;
}
void main() {
int ret;
///< 初始化
ret = HTX_Init();
int mode=0;
///< HO_MODE
///< 消息分派模式
///< 1-自动分派,调用HTX_RegisterMsgHandler注册每种消息的处理函数,当接收到消息时,Hotfox Agent自动调用相应的注册函数
///< 2-开发者自行处理,如本示例中由RecvProc函数调用HTX_Recv获取接收到的消息
///< 默认1
HTX_SetOption(HO_MODE,(char*)mode,sizeof(mode));
int auto_keep = 1;
HO_AUTO_KEEP
///< 是否自动保持连接
///< 1-自动保持 HotfoxAgent自动保持和服务器的连接,适用于和Hotfox进行通信的后台服务程序
///< 0-不自动保持
///< 默认0
HTX_SetOption(HO_AUTO_KEEP,(char*)auto_keep,sizeof(auto_keep));
/// HO_CONN_TIMEOUT
/// 连接超时值
/// 用于同步式连接.向服务器发起连接时,在成功前的尝试时间.单位为秒.默认值:60
int conn_timeout = 8;
HTX_SetOption(HO_CONN_TIMEOUT,(char*)conn_timeout,sizeof(conn_timeout));
/// HO_SYNCALL_TIMEOUT
///< 同步调用超时时间
///< 线程发出请求后,阻塞等待服务器的处理结果.超过该值指定的时间仍未得到返回,做超时处理
///< 同步调用目前只适用于HO_MODE=1的模式
int sync_call_timeout = 10;
HTX_SetOption(HO_SYNCALL_TIMEOUT,(char*)sync_call_timeout,sizeof(sync_call_timeout));
///< HTX_RegisterMsgHandler注册消息处理函数
/// 仅在HO_MODE=1时才调用
HTX_RegisterMsgHandler(6,668,OnRecv668); ///< 668的确认消息由OnRecv668处理
HTX_RegisterMsgHandler(6,667,OnRecv667); ///< 667的确认消息由OnRecv667处理
///< 注册连接建立/断开事件处理函数
///< 应用程序可以:
///< .在界面上显示连接状态
///< .HO_AUTO_KEEP=0时,调用HTX_Connect连接
HTX_OnClose(OnClose);
HTX_OnConnect(OnConnect);
///< 启动Hotfox Agent的内部线程
ret = HTX_Startup();
CThreadManager::instance()->Spawn(RecvProc,0);
ret = HTX_Connect(server_addr,server_port);
/// 创建并发送一个UMX消息
void *msg = 0;
UMX_New(&msg); ///< 创建一个消息
UMX_SetMsgID(msg,5,668); ///< 设置消息为MT_CONFIRMATION,668----668确认消息
HTX_Send(msg); ///< 发送
///< 等待结束进程事件
wait_event_loop();
///< 关闭连接
HTX_Close();
///< 停止内部线程
HTX_Stop();
///< 释放Hotfox Agent库
HTX_Cleanup();
}