|
|
/*********************************************************************
|
|
|
*文件说明: 通过收发消息模式调用接口
|
|
|
*作者: logos
|
|
|
*日期: 2017/06/18
|
|
|
*修改日志: 2017/06/18 logos 创建
|
|
|
2018/11/01 logos 修改成skts模式 -- 可以支持本地接口转换
|
|
|
|
|
|
***********************************************************************/
|
|
|
#pragma once
|
|
|
#ifndef _DLL_INCLUDE_NETCALL_H
|
|
|
#define _DLL_INCLUDE_NETCALL_H
|
|
|
|
|
|
#ifndef EXPORT_C
|
|
|
#define EXPORT_C extern "C"
|
|
|
#endif
|
|
|
|
|
|
#ifndef WINAPI
|
|
|
#define WINAPI __stdcall
|
|
|
#endif
|
|
|
|
|
|
#ifndef ushort
|
|
|
#define ushort unsigned short
|
|
|
#endif
|
|
|
|
|
|
typedef class CNetSocket* NetHandle; //网络接口句柄
|
|
|
typedef class CNetFun* NetFun; //网络函数句柄
|
|
|
|
|
|
//回调函数原型,注册消息接口时按此原型声明函数
|
|
|
/*Intput: hf 调用句柄
|
|
|
funName 函数名称
|
|
|
lparam 回调附加参数
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
回调函数内部,必须先把所有入参取出,再调用本地接口
|
|
|
再压入返回值和出参,否则存储顺序可能出错.
|
|
|
PS: 阻塞时间不能超过500ms。*/
|
|
|
typedef int (WINAPI *NETFUN)(NetFun hf, const char* funName, void* lparam);
|
|
|
|
|
|
//代理网络接口回调函数原型,注册函数回调接口时按此原型声明函数
|
|
|
/* Intput: hf 网络函数句柄
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
1. 调用netcall_pop_param按顺序获取调用参数
|
|
|
2. 调用本地对应接口
|
|
|
3. 调用netcall_push_param按顺序压入函数返回值
|
|
|
4. return 0; 除非参数获取或者网络错误,否则都应该返回0成功
|
|
|
PS: 函数内部不能有阻塞操作
|
|
|
*/
|
|
|
typedef int (WINAPI *NetCallFun)(NetFun hf);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个网络接口句柄
|
|
|
*Intput: pszip 服务器IP
|
|
|
port 服务器端口
|
|
|
bclient 是否为客户端 0服务端,1客户端
|
|
|
timeout 超时时间 默认为-1,无限等待
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回NetHandle句柄,失败返回NULL
|
|
|
*PS: 创建成功后会启动一个线程
|
|
|
******************************************************/
|
|
|
EXPORT_C NetHandle WINAPI create_netcall(const char* pszip, ushort port, int bclient = 0, int timeout = -1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个网络接口句柄 -- 使用skt句柄创建
|
|
|
*Intput: skt 句柄
|
|
|
timeout 超时时间 默认为-1,无限等待
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回NetHandle句柄,失败返回NULL
|
|
|
*PS: 创建成功后会启动一个线程
|
|
|
******************************************************/
|
|
|
EXPORT_C NetHandle WINAPI create_netcall_skt(int skt, int timeout = -1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放一个网络接口句柄
|
|
|
*Intput: hNet 网络接口句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 线程将会被销毁
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI release_netcall(NetHandle hNet);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取网络接口句柄连接状态
|
|
|
*Intput: hNet 网络接口句柄
|
|
|
*Output: NULL
|
|
|
*Return: 连接ok返回1,未连接返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_is_connected(NetHandle hNet);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 快速调用一个网络接口,支持6个以下参数接口
|
|
|
返回值根据返回的网络句柄获取
|
|
|
*Intput: hNet 网络接口句柄
|
|
|
funName 接口名称,远端必须支持
|
|
|
param1~param6 参数地址,可以选填,必须顺序填入
|
|
|
len1~len6 参数长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回网络函数句柄,失败返回NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C NetFun WINAPI net_call(
|
|
|
NetHandle hNet, const char* funName,
|
|
|
const void* param1 = 0, unsigned int len1 = 0,
|
|
|
const void* param2 = 0, unsigned int len2 = 0,
|
|
|
const void* param3 = 0, unsigned int len3 = 0,
|
|
|
const void* param4 = 0, unsigned int len4 = 0,
|
|
|
const void* param5 = 0, unsigned int len5 = 0,
|
|
|
const void* param6 = 0, unsigned int len6 = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 申请一个网络函数句柄
|
|
|
*Intput: hNet 网络接口句柄
|
|
|
funName 接口名称
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回网络函数句柄,失败返回NULL
|
|
|
*PS: 调用方和被调用方都可以使用,比如说回调函数,那么被调用方就会
|
|
|
反向调用网络端接口
|
|
|
******************************************************/
|
|
|
EXPORT_C NetFun WINAPI malloc_netcall(NetHandle hNet, const char* funName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 注册接收由网络句柄调用接口
|
|
|
*Intput: hNet 网络接口句柄
|
|
|
fun 回掉函数
|
|
|
param 回掉函数附加参数
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码,每个skts只能注册一次
|
|
|
*PS:网络端收到调用指令会自动回掉注册接口, 回调接口内部填充返回值即可
|
|
|
回调接口中不可以释放网络函数句柄,否则会引发崩溃
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI regist_netcall_fun(NetHandle hNet, NETFUN fun, void* param);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放一个网络函数句柄,每次调用后需要手动释放
|
|
|
*Intput: hf 网络函数句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: malloc_netcall / net_call 两个调用接口
|
|
|
都会返回网络函数句柄,调用完需要手动释放
|
|
|
最多64个句柄,如果不释放,后面再次调用会阻塞
|
|
|
若超过64个阻塞接口,那么后面再次调用也会阻塞
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI free_netcall(NetFun hf);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 通过网络函数句柄获取网络接口句柄
|
|
|
*Intput: hf 网络函数句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回NetHandle句柄,失败返回NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C NetHandle WINAPI get_netcall(NetFun hf);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 执行网络调用接口,首先申请网络句柄,然后顺序压入参数,
|
|
|
再调用本接口,可兼容任意复杂函数接口
|
|
|
*Intput: hf 网络函数句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI net_call_run(NetFun hf);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 最多一次压入6个参数到网络句柄,为调用做准备
|
|
|
*Intput: hf 网络函数句柄
|
|
|
param1~param6 参数地址,可以选填,必须顺序填入
|
|
|
len1~len6 参数长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 压入参数时,遇到参数为0则结束 总消息长度最大 40k
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_push_param(NetFun hf,
|
|
|
const void* param1 = 0, unsigned int len1 = 0,
|
|
|
const void* param2 = 0, unsigned int len2 = 0,
|
|
|
const void* param3 = 0, unsigned int len3 = 0,
|
|
|
const void* param4 = 0, unsigned int len4 = 0,
|
|
|
const void* param5 = 0, unsigned int len5 = 0,
|
|
|
const void* param6 = 0, unsigned int len6 = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 最多一次压入6个字符串参数到网络句柄,为调用做准备
|
|
|
必须是连续字符串参数,否则需要重复压入
|
|
|
*Intput: hf 网络函数句柄
|
|
|
param1~param6 结果地址,可以选填,必须顺序填入
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 获取结果时,遇到参数为0则结束 总消息长度最大 40k
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_push_string(NetFun hf,
|
|
|
const char* param1 = 0, const char* param2 = 0, const char* param3 = 0,
|
|
|
const char* param4 = 0, const char* param5 = 0, const char* param6 = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 最多一次从网络句柄顺序获取6个结果
|
|
|
*Intput: hf 网络函数句柄
|
|
|
param1~param6 结果地址,可以选填,必须顺序填入
|
|
|
len1~len6 结果最大长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 获取结果时,遇到参数为0则结束
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_pop_param(NetFun hf,
|
|
|
void* param1 = 0, unsigned int len1 = 0,
|
|
|
void* param2 = 0, unsigned int len2 = 0,
|
|
|
void* param3 = 0, unsigned int len3 = 0,
|
|
|
void* param4 = 0, unsigned int len4 = 0,
|
|
|
void* param5 = 0, unsigned int len5 = 0,
|
|
|
void* param6 = 0, unsigned int len6 = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 最多一次从网络句柄顺序获取6个字符串结果,
|
|
|
必须是连续字符串参数,否则需要重复获取
|
|
|
*Intput: hf 网络函数句柄
|
|
|
param1~param6 结果地址,可以选填,必须顺序填入
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 获取结果时,遇到参数为0则结束
|
|
|
单个字符串超过256字节,不能用此方式获取
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_pop_string(NetFun hf,
|
|
|
char* param1 = 0, char* param2 = 0, char* param3 = 0,
|
|
|
char* param4 = 0, char* param5 = 0, char* param6 = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取hf句柄当前参数大小
|
|
|
*Intput: hf 网络函数句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回当前待取参数所占内存,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_get_cur_param_size(NetFun hf);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取hf句柄所有参数大小
|
|
|
*Intput: hf 网络函数句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回参数所占内存,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_get_param_size(NetFun hf);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取hf句柄参数个数
|
|
|
*Intput: hf 网络函数句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回参数个数,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI netcall_get_param_count(NetFun hf);
|
|
|
|
|
|
#ifndef MAX_NAME_LEN
|
|
|
#define MAX_NAME_LEN 32
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_IP_LEN
|
|
|
#define MAX_IP_LEN 16
|
|
|
#endif
|
|
|
|
|
|
enum Proxy_ErrCode
|
|
|
{//错误代码
|
|
|
ERR_NO_SUPPORT_FUN = -1200, //不支持该接口
|
|
|
};
|
|
|
|
|
|
struct TRemoteInfo
|
|
|
{//远程客户端信息
|
|
|
char ip[MAX_IP_LEN];
|
|
|
ushort port;
|
|
|
};
|
|
|
|
|
|
struct TProxy
|
|
|
{//代理服务器信息
|
|
|
char desc[MAX_NAME_LEN]; //代理服务端描述
|
|
|
char ip[MAX_IP_LEN]; //IP地址
|
|
|
ushort port; //端口
|
|
|
ushort tiemout; //超时 单位ms
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化远程代理模块
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
*PS:代理模块接收远程调用消息,并发广播包通知客户端
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proxy_init();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放远程代理模块
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proxy_deinit();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置代理服务端信息
|
|
|
*Intput: pinfo 服务器信息
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proxy_set_info(TProxy* pinfo);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取代理服务端信息 -- 可以获取部分
|
|
|
*Intput: pinfo 服务器信息
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proxy_get_info(TProxy* pinfo);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 注册网络接口被调用时的回调函数地址
|
|
|
*Intput: funname 函数名
|
|
|
fun 函数地址
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 必须在调用proxy_init之前注册远程接口,初始化以后无法注册
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proxy_regist_fun(const char* funname, NetCallFun fun);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取已连接客户端列表 -- 可能为0
|
|
|
*Intput: nsize 缓冲区个数
|
|
|
*Output: plist 数组指针,由内部申请内存,外部直接释放即可
|
|
|
*Return: 返回客户端数量
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_connected_list(TRemoteInfo* plist = 0, int nsize = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 断开某个客户端IP的连接,并设置该IP为黑名单
|
|
|
*Intput: pszip 客户端IP地址
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 单次有效,重启后自动清空
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proxy_disconnect(const char* pszip);
|
|
|
|
|
|
#endif |