#pragma once #include #include #include #include #include #include #if defined(_MSC_VER) || defined(WIN64) || defined(__WIN64__) || defined(WIN32) || defined(_WIN32) #ifdef _YD_OCC_NETBASE_SDK #define _YD_OCC_NETBASE_MODE __declspec(dllexport) #else #define _YD_OCC_NETBASE_MODE __declspec(dllimport) #endif #else //linux #ifdef _YD_OCC_NETBASE_SDK #define _YD_OCC_NETBASE_MODE __attribute__ ((visibility("default"))) #else #define _YD_OCC_NETBASE_MODE #endif #endif class _YD_OCC_NETBASE_MODE CNetBase: public CNet { public: CNetBase(YD_DBOperator* _db); virtual ~CNetBase(); virtual void OnCmdProc (int sysid, LPCOMMAND pcmd); virtual void OnRealProc(int sysid, char* data, int datalen); virtual void OnMcastProc(char* data, int datalen); virtual void OnSendRealResult(bool isSuccessed, int byteNum, unsigned long err = 0); virtual void OnSendCmdResult (bool isSuccessed, int byteNum, unsigned long err = 0); virtual int Send_Tcp_NetDate (OCCCOMMAND& NetCmd, int nDesSysID, int nSize); virtual int Send_Group_NetDate(OCCCOMMAND& NetCmd, int nDesSysID, int nSize); virtual int SendNetDate(OCCCOMMAND& NetCmd, int nSendWay, int nDesSysID, int nSize); virtual bool DealNetSendMs() { return false; }; virtual bool DealNetGroupSendMs(){ return false; }; virtual bool DealNetRealSendMs() { return false; }; virtual bool InitNet() { return false; }; virtual void Send_TCPData_RightNow(OCCCOMMAND NetCmd){} virtual void Send_UDPData_RightNow(OCCCOMMAND NetCmd){} virtual void Start_Training(int nTrainingID, int nCourseID,int nSimTime) {} virtual void End_Training (int nTrainingID, int nCourseID,int nSimTime) {} virtual void Record_Training_Sys(int nSysType) {} virtual void Record_Key_System (int nSysType,int nSysID) {} virtual bool InitNetWork( CDispatchMng_I* pDispatchMng ); public: int SendData_TCP (int sysid, LPCOMMAND pcmd); int SendData_UDP (int sysid, char* data, int datalen); int SendData_Group(int sysid, char* data, int datalen); public: //设置本机系统号 void SetOwnSysID(int nSysID) { m_nOwnSysID = nSysID; } //设置训练号 void SetTrainID(int nTrainID) { m_nTrainID = nTrainID; } int GetTrainID() { return m_nTrainID; } //设置教员系统号 void SetTechID(int nTeachSysID) { m_TechSeverID = nTeachSysID; } int GetTechID() { return m_TechSeverID; } //复示主控(模驾)的主控的系统号 virtual void SetRepeat_MainCtrl_SysID(int nSysID) { m_nRepeatMainCtrlSysID = nSysID; } int GetRepeat_MainCtrl_SysID() { return m_nRepeatMainCtrlSysID; } //复试主控(模驾)的客户端的系统号 void SetRepeat_MainCtrl_ClientID(int nRepeatClientID) { m_nRepeatMainCtrlClientID = nRepeatClientID; } int GetRepeat_MainCtrl_ClientID() { return m_nRepeatMainCtrlClientID; } bool Close(); int ConnectToTech(); void ReadCfg_File(); bool ReadNetRoomData(YD_DBOperator* db); void AddLogItem( int nPri,const char* pszFmt,...); bool Monitor_System_Status(); public: void ThreadFun_SendTCP (); void ThreadFun_SendUDP (); void ThreadFun_SendGroup (); void ThreadFun_SysMonitor(); public: int m_nOwnSysID; //本系统的系统号 int m_nTrainID; //当前训练号 int m_TechSeverID; //教员系统号 int m_nConnectTeachWay; //连接教员方式 int m_nLastSendSysID_TCP; //最后发送系统-TCP int m_nLastSendSysID_UDP; //最后发送系统-UDP int m_nLastSendSysID_Group; //最后发送系统-Group int m_nRepeatMainCtrlSysID; //复示主控(模驾)系统号 int m_nRepeatMainCtrlClientID; //复示主控(模驾)客户端 bool m_SendMsgThreadOut; //线程退出标志-TCP数据发送 bool m_SendRealThreadOut; //线程退出标志-UDP数据发送 bool m_SendGroupThreadOut; //线程退出标志-组播数据发送 bool m_bSysMonitorThreadOut; //线程退出标志-系统状态监视 bool m_bNetDataMonitorS; //是否监视网络数据 protected: std::thread m_Thread_SendTCP; //线程变量_TCP数据发送 std::thread m_Thread_SendUDP; //线程变量_UDP数据发送 std::thread m_Thread_SendGroup; //线程变量_组播数据发送 std::thread m_Thread_SysMonitor; //线程变量_系统状态监视 CommandQueue* m_pSendList_TCP; //发送队列-TCP CommandQueue* m_pSendList_UDP; //发送队列-UDP CommandQueue* m_pSendList_Group; //发送队列-组播 CommandQueue* m_pRecvList_TCP; //接收队列-TCP CommandQueue* m_pRecvList_UDP; //接收队列-UDP CommandQueue* m_pRecvList_Group; //接收队列-组播 CFrameTool_I* m_pFrmTool; NETTRIANNECTMAP* m_pNetTrainNectMap; CDispatchMng_I* m_pDispatchMng; CDebug_Module_I* m_pDebugModule; recursive_mutex* m_pMutexTrainConect; YD_DBOperator* m_pdb; };