#pragma once /************************************ REVISION LOG ENTRY Revision By: ... Revised on 2020-4-5 Comments: 网络模块输出类 2.6 修改记录: 1.取消数据库读写指针传入 2.sendcmd 支持大数据传输 3.SendRealData 支持大数据传输 4.修改内部数据队列关联 5.暂时停用组播功能 注释: 网络库 ************************************/ #ifdef _WIN32 #ifdef _YD_YDCOMMUNICATION_SDK #define _YD_YDCOMMUNICATION_MODE __declspec(dllexport) #else #define _YD_YDCOMMUNICATION_MODE __declspec(dllimport) #ifndef _WIN64 #pragma comment(lib,"YD.Public.NetComm.x86.lib") #else #pragma comment(lib,"YD.Public.NetComm.x64.lib") #endif #endif #else #define _YD_YDCOMMUNICATION_MODE #endif #include "YDCommStruct.h" typedef void (*TypeCmdProc) (long sysid, LPCOMMAND pcmd); typedef void (*TypeRealProc) (long sysid, char* data, int datalen); typedef void (*TypeMcastProc)(char* data, int datalen); class xhNetWork; class _YD_YDCOMMUNICATION_MODE CNet { public: CNet(bool isAutoInit = true); ~CNet(void); /** * 函数说明: 加载YDCommon.inf配置文件或者local_ips.ini * @ szConfigFileName: 配置文件名称,配置文件需要绝对路径 * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ int SetConfigFileName(const char* szConfigFileName); /** * @ 手动设置网络地址信息 * @ sysid: 系统编号 * @ szIP: 对应系统IP @ nPort: 对应系统端口 @ isSelf: 是否位本系统信息 */ void SetNetAddress(int sysid, const char* szIP, unsigned short nPort,bool isSelf); /** * @ 初始化网络库 1.采用获取动态库目录下的YDComm.conf或者local_ips.ini 2.或者手动设置配置文件路径YDComm.conf或者local_ips.ini 3.或者采用SetNetAddres设置的网络地址 注意,在默认请下,检测到有对应配置文件时直接默认调用init,不需要额外调用 * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ int Init(); /** * 设置回调 * @ sysid: 系统编号 * @ szIP: 对应系统IP @ nPort: 对应系统端口 @ isSelf: 是否位本系统信息 */ void InitNetwork(TypeCmdProc cmd, TypeRealProc real, TypeMcastProc mcast); /** * @ 手动设置网络地址信息 * @ sysid: 系统编号 * @ szIP: 对应系统IP @ nPort: 对应系统端口 @ isSelf: 是否位本系统信息 */ void CloseNetwork(); /** * @ 初始化网络库 1.采用获取动态库目录下的YDComm.conf或者local_ips.ini 2.或者手动设置配置文件路径YDComm.conf或者local_ips.ini 3.或者采用SetNetAddres设置的网络地址 注意,在默认请下,检测到有对应配置文件时直接默认调用init,不需要额外调用 * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ bool isInit(); /** * @ 发送命令函数(前提:在正确读取子系统配置列表后,建立C/S模式时才能够使用) * 使用TCP方式发送。 * @ sysid: 目标系统编号 * @ pcmd: 命令结构指针 支持超过1024长度 为了保持兼容 最长为9999字节 * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ int SendCmdData(int sysid, LPCOMMAND pcmd); /** * @ 按系统编号发送UDP数据包 * @ sysid: 目标系统编号 * @ data: 将发送的数据 * @ datalen: 将发送的数据长度 长度支持大于1024,最大为65535 建议 小于10k * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ int SendRealData(int sysid, const char* data, int datalen); /** * @ 按网络地址发送UDP数据包 * @ addr: 目标系统IP * @ port: 目标系统端口 * @ data: 将发送的数据 * @ datalen: 将发送的数据长度 长度支持大于1024,最大为65535 建议 小于10k * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ int SendRealData(const char* addr, short port, char* data, int datalen); /** * @ 按多播组编号在该组内容广播数据 * @ sysid: 目标多播组编号 * @ data: 将发送的数据 * @ datalen: 将发送的数据长度 * @ 返回值: 如果调用成功返回0,否则返回-1,返回其他值待定 */ int SendMcastData(int grpid, const char* data, int datalen); /** * @ 取得系统编号 * @ 返回值: 系统编号 */ int GetSystemID(); /** * @ 取得组编号 * @ 返回值: 组编号 */ int GetGroupID(); /** * @ 根据指定的组编号和子系统编号生成系统编号 * @ grpid: 组编号 * @ sysid: 子系统编号 * @ 返回值: 系统编号 */ int MakeSystemID(int grpid, int sysid); /** * @ 取得指定系统的系统状态 * @ sysid: 目标系统编号 * @ 返回值: 如果失败返回-1,否则返回状态值 */ int GetSystemStatus(int sysid); /** * @ 设置当前系统状态 * @ status: 将设置的状态值 */ void SetSystemStatus(int status); /** * @ 设置自身回调指针 * @ _this: CNet类实例指针或者CNet派生类实例指针 */ void SetThis(CNet* _this); /** * @ 关闭网络模块 */ void close(); /* * @ 网络连接成功时 * @ sysid: 连接的系统编号 */ virtual void OnSysConnect(int sysid); /* * @ 网络连接断开 * @ sysid: 连接断开的系统编号 */ virtual void OnSysClose(int sysid); /** * @ 当网络有命令数据接收完成时触发此函数或派生类函数 * @ sysid: 命令发送方系统编号 * @ pcmd: 接收到的命令数据 */ virtual void OnCmdProc(int sysid, LPCOMMAND pcmd); /** * @ 当网络有UDP数据包接收完成时触发此函数或派生类函数 * @ sysid: 数据包发送方系统编号,如果未知系统或者直接使用网络 * 地址发送的数据包,此参数为-1 * @ data: 接收到的数据包 * @ datalen: 接收到的数据包长度 */ virtual void OnRealProc(int sysid, char* data, int datalen); /** * @ 当网络有当前系统所在多播组广播的数据接收完成时触发此函数或派生类函数 * @ data: 将发送的数据 * @ datalen: 将发送的数据长度 */ virtual void OnMcastProc(char* data, int datalen); /* * @ 建立与指定编号的系统的连接,采用异步方式,会自动重联,不用重复调用该函数,在位连接成功过程中 ,也可以调用 * @ sysid: 目标系统的编号 * @ 返回值: 如果连接成功返回0,-1表示建立不成功 */ virtual int CreateTcpConntion(int sysid); /* * @ 关闭连接 * @ sysid: 目标系统的编号 * @ 返回值: 如果连接成功返回0,-1表示建立不成功 */ virtual int CloseTcpConntion(int sysid); /* * @ 建立一个临时多播组并加入多播组 * @ multiAddress: 多播组地址 * @ multiPort: 多播组端口 * @ 返回值: -1表示没有建立成功,其他值表示建立的多播组编号 */ virtual int CreateMulticastGroup(const char* multiAddress, int multiPort); /* * @ 离开一个多播组 * @ grpid: 多播组编号 * @ 返回值: 离开成功返回真,否则返回假 */ virtual bool LeaveMulticastGroup(int grpid); private: xhNetWork* m_pNetWork; TypeCmdProc m_cmd; TypeRealProc m_real; TypeMcastProc m_mcast; };