You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

389 lines
16 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*********************************************************************
*文件说明: 通过网络调用远程接口
*作者: 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 //防止重复包含