/********************************************************************* *文件说明: 通过网络调用远程接口 *作者: logos *日期: 2017/07/22 *修改日志: 2017/07/22 logos 创建 1. 连接服务器 2. 调用接口 3. 返回结果 ***********************************************************************/ #pragma once #ifndef DLL_INCLUDE_REMOTE_H #define DLL_INCLUDE_REMOTE_H #ifndef EXPORT_C #define EXPORT_C extern "C" #endif #ifndef WINAPI #define WINAPI __stdcall #endif #ifndef MAX_NAME_LEN #define MAX_NAME_LEN 32 #endif #ifndef MAX_IP_LEN #define MAX_IP_LEN 16 #endif #ifndef ushort #define ushort unsigned short #endif /**************************************************** *Function: 初始化远程连接模块 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_init(); /**************************************************** *Function: 释放远程连接模块 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_deinit(); /**************************************************** *Function: 获取当前远程模块版本号 - 4位整数 *Intput: NULL *Output: NULL *Return: 返回当前remote版本号1401->1.4.01 *PS: 当版本号为5位时,为beta测试版,个位数为测试版本号 ******************************************************/ EXPORT_C int WINAPI remote_version(); /**************************************************** *Function: 更新服务器列表 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_update_list(); /**************************************************** *Function: 服务器列表是否更新完成 *Intput: NULL *Output: NULL *Return: 更新完成返回1 否则返回0 ******************************************************/ EXPORT_C int WINAPI remote_update_list_finished(); /**************************************************** *Function: 获取服务器列表,调用前最好更新服务器列表 *Intput: nsize 数组大小 plist 数组指针,可以传NULL获取大小 *Output: NULL *Return: 返回服务器数量 ******************************************************/ EXPORT_C int WINAPI remote_get_list(int nsize = 0, struct TProxy* plist = 0); /**************************************************** *Function: 连接服务器,传入NULL时,默认连接127.0.0.1:9999 *Intput: szIP 服务端IP地址,默认连接127.0.0.1 usport 服务端端口,默认连接9999 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_connect(const char* pszip = 0, ushort usport = 0); /**************************************************** *Function: 断开连接服务器 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_disconnect(); /**************************************************** *Function: 获取连接信息 *Intput: pInfo 连接信息缓冲区,可以传NULL获取连接状态 *Output: NULL *Return: 已连接才会返回0,否则返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_get_connected(struct TProxy* pInfo = 0); /**************************************************** *Function: 注册消息弹窗提示,注册后可显示底层提示消息,一般ui层注册 -- 远程接口 *Intput: fun 回调函数地址 param 附加参数 *Output: NULL *Return: 成功返回0, 失败返回错误码 *PS: 在程序初始化时注册,支持最多注册两次,最后注册作为主要回调接口 ******************************************************/ EXPORT_C int WINAPI remote_regist_message(void* fun, void* param); /**************************************************** *Function: 反注册消息弹窗提示,反注册后会返回到上一次注册状态 -- 远程接口 *Intput: fun 回调函数地址 *Output: NULL *Return: 成功返回0, 失败返回错误码 *PS: 在程序退出时反注册,反注册时优先释放主要回调接口,使用备用接口 ******************************************************/ EXPORT_C int WINAPI remote_unregist_message(void* fun); /**************************************************** *Function: 同步回调消息,注册后可接收,一般用于UI注册接收,底层发送 -- 远程接口 *Intput: type 消息类型 MessageType pszmsg 提示消息内容 *Output: NULL *Return: 成功返回消息返回值(MessageResult),失败返回错误码(<0) *PS: 支持多线程,内部包含线程保护,回调函数若有延时,将影响其它线程效率 *PS: 弹窗消息仅回调主要接口,其它消息回调所有接口 ******************************************************/ EXPORT_C int WINAPI remote_send_messages(int type, const char *pszmsg = 0); /**************************************************** *Function: 获取错误代码对应的描述 -- 远程接口 *Intput: errCode 错误代码 必须是已定义的 *Output: desc 错误描述 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_get_err_desc(int errcode, char* pszdesc); /**************************************************** *Function: 获取当前日志保存目录 -- 远程接口 *Intput: NULL *Output: path 当前日志保存目录 保证256字节 *Return: 成功返回0 失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_get_log_paths(char* path); /**************************************************** *Function: 设置当前日志保存目录 -- 远程接口 *Intput: path 待设置目录 <256字节 *Output: NULL *Return: 成功返回日志保存目录,失败返回NULL *PS: 必须保证该目录是存在的,否则设置会失败 ******************************************************/ EXPORT_C int WINAPI remote_set_log_path(const char* path); /**************************************************** *Function: 增加/修改一个配置项 -- 工作目录下配置 -- 远程接口 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 lpValue 值 ?=xxx <256字节 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_modify_cfg(const char* key, const char* name, const char* lpValue); /**************************************************** *Function: 获取一个配置项 -- 工作目录下配置 -- 远程接口 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 *Output: pval 配置值 -- 保证传入256个字节 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_get_cfgs(const char* key, const char* name, char* pval); /**************************************************** *Function: 增加/修改一个配置项(int型) -- 工作目录下配置 -- 远程接口 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 iValue 值 ?=xxx (int) *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_modify_cfg_int(const char* key, const char* name, int iValue); /**************************************************** *Function: 获取一个配置项(int型) -- 工作目录下配置 -- 远程接口 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 *Output: NULL *Return: 成功返回读取到的值(int),失败返回0 ******************************************************/ EXPORT_C int WINAPI remote_get_cfg_int(const char* key, const char* name); /**************************************************** *Function: 增加/修改一个配置项(double型) -- 工作目录下配置 -- 远程接口 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 dValue 值 ?=xxx (double) *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_modify_cfg_double(const char* key, const char* name, double dValue); /**************************************************** *Function: 获取一个配置项(double型) -- 工作目录下配置 -- 远程接口 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 *Output: NULL *Return: 成功返回读取到的值(double),失败返回0 ******************************************************/ EXPORT_C double WINAPI remote_get_cfg_double(const char* key, const char* name); /**************************************************** *Function: 获取所有配置项 -- 远程接口 *Intput: plist 配置项内容 nsize 缓冲区大小 *Output: plist 配置项内容 *Return: 返回获取到的配置项数量 *PS: 可以先传入NULL获取大小,保证缓冲区够大后再获取数据 ******************************************************/ EXPORT_C int WINAPI remote_get_cfg_list(struct TConfig* plist = 0, int nsize = 0); /**************************************************** *Function: 把一字符串写入一文件,首次写入会打开文件,如果文件存在, 则打开并移到最后,若不存在,则创建并打开。反初始化时会自动关闭 *Intput: file 文件名/相对路径 基于日志目录下创建 <256字节 msgFormat 字符串格式,与printf用法相同 后面可加N个参数,最大支持1024个字节 *Output: 无 *Return: 成功返回0,失败返回错误码 *PS: 此接口需要外部写入换行符 *PS: 假设日志目录为:"D:\\log" 传入file: "123.dat" 则实际写入文件目录为"D:\\log\\123.dat" ******************************************************/ EXPORT_C int WINAPI remote_files_write(const char* file, const char *pszFormat, ...); /**************************************************** *Function: 与files_write功能类似,只是不能格式化字符串 *Intput: file 文件名/相对路径 基于日志目录下创建 <256字节 pszContent 要写入的内容 <1024字节 npos 可选参数,默认-1为从当前位置写入 *Output: 无 *Return: 成功返回0,失败返回错误码 *PS: 此接口需要外部写入换行符 *PS:写入数据后,文件游标会自动移动到写入后位置 ******************************************************/ EXPORT_C int WINAPI remote_files_writes(const char* file, const char *pszContent, int npos = -1); /**************************************************** *Function: 逐行读取文件内容,可以传NULL获取文件大小 *Intput: file 文件名/相对路径 基于日志目录下创建 <256字节 pszContent 要读取的内容缓冲区,必须外部保证缓冲区大小 nline 可选参数,读取第几行,从0开始?默认-1为从当前位置读取 *Output: 无 *Return: 成功返回读取到的字节大小,失败返回错误码<0,文件结尾返回0 *PS:读取数据后,文件游标会自动移动到读取后位置 *PS:若不传入pszContent 则返回该文件大小,但不会实际读取 *PS:打开文件后,游标会在最后,所以首次读取最好传入start=0 *PS: 此接口会自动过滤换行符 ******************************************************/ EXPORT_C int WINAPI remote_files_read(const char* file, char *pszContent = 0, int nline = -1); /**************************************************** *Function: 关闭并保存一个已经打开的文件 *Intput: file 文件名/相对路径 基于日志目录下创建 <256字节 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: file 传NULL时,关闭所有文件 ******************************************************/ EXPORT_C int WINAPI remote_files_close(const char* file = 0); /**************************************************** *Function: 获取所有已经打开的文件名(路径),以'/0'(0结束符)隔开 *Intput: pszFileList 文件名/相对路径 *Output: NULL *Return: 若不存在文件名(路径)返回0,否则返回所有文件名总长度 *PS: 每个文件名总长度包含文件名实际长度+1(0结束符) ******************************************************/ EXPORT_C int WINAPI remote_files_get_list(char* pszFileList = 0); /**************************************************** *Function: 增加/修改一个系统配置项 -- 程序data目录下配置 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 lpValue 值 ?=xxx <256字节 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_modify_sys_cfg(const char* key, const char* name, const char* lpValue); /**************************************************** *Function: 获取一个系统配置项 -- 程序data目录下配置 *Intput: key 段落名 [xxx] -- 不能包含'/' <32字节 name 关键字 xxx=? <32字节 *Output: pval 配置值 -- 保证传入256个字节 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_get_sys_cfgs(const char* key, const char* name, char* pval); //enum EM_LOG_LEVEL //{//打印类型-等级 // LEVEL_CRIT = 0, // LEVEL_ERR, // LEVEL_WARN, // LEVEL_INFO1, // LEVEL_INFO2, // LEVEL_INFO3, // LEVEL_INFO4, //}; //此处定义远程打印log接口 #define RLOG_INFO(msg, ...) remote_trace(3, 0, 0, 0, msg, __VA_ARGS__) #define RLOG_INF1(msg, ...) remote_trace(4, 0, 0, 0, msg, __VA_ARGS__) #define RLOG_INF2(msg, ...) remote_trace(5, 0, 0, 0, msg, __VA_ARGS__) #define RLOG_INF3(msg, ...) remote_trace(6, 0, 0, 0, msg, __VA_ARGS__) #define RLOG_WARN(msg, ...) remote_trace(2, __FILE__, __LINE__, __FUNCTION__, msg, __VA_ARGS__) #define RLOG_ERR(msg, ...) remote_trace(1, __FILE__, __LINE__, __FUNCTION__, msg, __VA_ARGS__) #define RLOG_CRIT(msg, ...) remote_trace(0, __FILE__, __LINE__, __FUNCTION__, msg, __VA_ARGS__) /**************************************************** *Function: 打印log函数,静态调用时,可直接用宏调用 *Intput: LogLevel打印级别,分为info1, info2, info3, warn error crit file 文件名, warn级别以必须加入 line 文件行, warn级别以必须加入 fun 函数名, warn级别以必须加入 msgFormat 字符串格式,与printf用法相同 后面可加N个参数,最大支持1024个字节 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_trace(int LogLevel, const char* file, int line, const char* fun, const char *pszFormat, ...); /**************************************************** *Function: 打印log函数,主要用于vb/c#调用 *Intput: LogLevel打印级别,分为info1, info2, info3, warn error crit pszLog 要打印内容 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_traces(int LogLevel, const char *pszLog); /**************************************************** *Function: 获取日志打印参数 *Intput: pcfg 日志打印参数 *Output: pcfg 日志打印参数 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_get_log_config(struct TLogConfig* pcfg); /**************************************************** *Function: 设置日志打印参数 *Intput: pcfg 日志打印参数 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI remote_set_log_config(const struct TLogConfig* pcfg); /**************************************************** *Function: 按当前时间(精确到秒),保存当前日志文件 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 调用此接口,可以不关闭程序查看日志文件 ******************************************************/ EXPORT_C int WINAPI remote_save_now_log(); /**************************************************** *Function: 获取日志缓冲区中的日志内容, 仅当日志缓冲区大小设置大于0时才能获取 *Intput: pszLog 日志缓存区 nSize 缓冲区大小 start 从哪开始获取? *Output: NULL *Return: 返回获取到的字节大小,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI remote_get_log_buff(char* pszLog, int nSize, int start = 0); #endif //防止重复包含