| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- #pragma once
- #include "BaseDispatch.h"
- #include "FrameTool_I.h"
- #include "NetWorkMng_I.h"
- #if defined(_MSC_VER) || defined(WIN64) || defined(__WIN64__) || defined(WIN32) || defined(_WIN32)
- #ifdef _YD_OCC_BASEDISPATCHTASK_MG_SDK
- #define _YD_OCC_BASEDISPATCHTASK_MG_MODE __declspec(dllexport)
- #else
- #define _YD_OCC_BASEDISPATCHTASK_MG_MODE __declspec(dllimport)
- #endif
- #else //linux
- #ifdef _YD_OCC_BASEDISPATCHTASK_MG_SDK
- #define _YD_OCC_BASEDISPATCHTASK_MG_MODE __attribute__ ((visibility("default")))
- #else
- #define _YD_OCC_BASEDISPATCHTASK_MG_MODE
- #endif
- #endif
- //模块创建和释放的函数指针
- typedef CBaseDispatch* (__stdcall* _CreateSubModule)();
- typedef void(__stdcall* _FreeSubModule)(void*);
- //模块管理信息
- struct sPlugin
- {
- int nModuleID;
- HINSTANCE nFileDll; //库的句柄
- _CreateSubModule nCreatePlug; //创建模块的函数指针
- _FreeSubModule nFreePlug; //释放模块的函数指针
- BOOL bInitOk; //是否初始化成功
- std::string Str_ModuleName; //模块名称
- void Check_Is_OK()
- {
- if ( !nCreatePlug || !nFreePlug )
- {
- bInitOk = FALSE;
- }
- else
- {
- bInitOk = TRUE;
- }
- }
- sPlugin()
- {
- nModuleID = -1; //模块编号
- nFileDll = NULL; //库的句柄
- nCreatePlug = NULL; //创建模块的函数指针
- nFreePlug = NULL; //释放模块的函数指针
- bInitOk = FALSE; //是否初始化成功
- Str_ModuleName = ""; //模块名称
- }
- };
- typedef map<int, sPlugin> Map_Plugin;
- enum ROLLBACK_CTRLTYPE
- {
- RollCtrl_Type_Prepare = 1, //回滚控制类型-准备
- RollCtrl_Type_Excute = 2, //回滚控制类型-执行
- RollCtrl_Type_Finish = 3, //回滚控制类型-完成
- RollCtrl_Type_Save = 4, //回滚控制类型-保存
- RollCtrl_Type_Event = 5, //回滚控制类型-事件
- };
- enum ALLTRAIN_STATUS
- {
- AllTrain_Status_Init = 1, //全部训练状态-初始化
- AllTrain_Status_Run = 2, //全部训练状态-运行
- AllTrain_Status_Stop = 3, //全部训练状态-停止
- };
- //定义:回放控制类型
- enum PLAYBACK_CTRLTYPE
- {
- PlayBack_CtrlType_Start = 1, //回放控制类型-开始:附加参数(训练号,课程号,开始时间)
- PlayBack_CtrlType_Pause = 2, //回放控制类型-暂停:附加参数(无)
- PlayBack_CtrlType_Continue = 3, //回放控制类型-继续:附加参数(无)
- PlayBack_CtrlType_Stop = 4, //回放控制类型-停止:附加参数(无)
- PlayBack_CtrlType_SetSpeed = 5, //回放控制类型-快进:附加参数(快进倍数)
- };
- //定义:回放反馈类型
- enum PLAYBACK_FEEDBACKTYPE
- {
- PlayBack_FeedBackType_CtrlResult = 1, //回放反馈类型-控制结果:附加参数(控制类型,控制结果)
- PlayBack_FeedBackType_CurTime = 2, //回放反馈类型-当前时间:附加参数(当前时间)
- PlayBack_FeedBackType_Finish = 3, //回放反馈类型-回放完成:附加参数(无)
- };
- struct ASSIGN_CMD
- {
- int nCmdType; //命令类型
- vector<int> VecModuleID; //模块编号
- };
- typedef map<int, ASSIGN_CMD> Map_AssignCmd;
- class _YD_OCC_BASEDISPATCHTASK_MG_MODE CBaseDispatchTaskMg
- {
- public:
- CBaseDispatchTaskMg(void);
- virtual~CBaseDispatchTaskMg(void);
- public:
- virtual bool StartWork(CFrameTool_I* pFrmTool);
- bool CreateDispatchTask( int courseid, int systype,int trainid
- ,int runlineid,int parm1, int parm2
- ,InitCourInfo* curseinfo );
- bool DeleteDispatchTask ( int nCourseID,int nSysType,int nTrainID );
- bool StopDispatchTask ( int nCourseID,int nSysType,int nTrainID );
- bool PauseDispatchTask ( int nCourseID,int nSysType,int nTrainID ) ;
- bool ResumeDispatchTask ( int nCourseID,int nSysType,int nTrainID );
- bool RunDispatchTask ( int nCourseID,int nSysType,int nTrainID );
- bool NetComand_Receive(OCCCOMMAND NetCmd);
- void NetComand_Send(LPBASENETPACKET pNetPack,int nDesSysType,OCCCOMMAND::CmdType eCmdType,int nTrainID = 0 );
- int Start_Redis_Connect();
- bool RecTrianPosition(int nSysType,int nTrainID,int nSysID); //获取系统模块的位置信息,即告诉服务器客户端的相关位置信息
-
- virtual CBaseDispatch* CreateNewTaskType( int nSysType ) = 0;
- virtual bool InitNetConnectStatus(int nTrainID, int nSysType) = 0;
- virtual void Deal_NetComand( OCCCOMMAND& NetCmd ) = 0;
- virtual bool InitConfigParam() = 0;
- virtual void DeleteReceiveGroupMsg(int nTrainID,int nSysType) = 0;
- virtual void AddReceiveGroupMsg (int nTrainID,int nSysType, CBaseDispatch* pdispatchsys) = 0;
- //回滚相关
- virtual BOOL RollBack_Record(); //回滚-记录
- virtual BOOL RollBack_Excute ( int nTrainID,int nPointID ); //回滚-执行
- virtual BOOL RollBack_Prepare( int nTrainID,int nPointID ); //回滚-准备
- virtual BOOL RollBack_Finish ( int nTrainID,int nPointID ); //回滚-完成
- virtual BOOL RollBack_RecordThread(); //回滚-线程
- CBaseDispatch* GetSub_Dispatch(int nSysType);
- //获取接收数据-TCP
- bool GetRecNetMsg( OCCCOMMAND& NetCmd )
- {
- bool bFlag = false;
- if ( m_QI_GetList_TCP.pop(NetCmd) )
- {
- bFlag = true;
- }
- return bFlag;
- }
- //获取接收数据-UDP
- bool GetRecNetRealMsg( OCCCOMMAND& NetCmd )
- {
- bool bFlag = false;
- if ( m_QI_GetList_UDP.pop(NetCmd) )
- {
- bFlag = true;
- }
- return bFlag;
- }
- //获取接收数据-组播
- bool GetRecNetGroupMsg( OCCCOMMAND& NetCmd )
- {
- bool bFlag = false;
- if (m_QI_GetList_Group.pop(NetCmd))
- {
- bFlag = true;
- }
- return bFlag;
- }
- sPlugin* GetPlugin_ByModuleID( int nModuleID );
- bool GetTaskStatusData();
- void SetFrmTooL(CFrameTool_I* pFrmTool) { m_pFrmTool = pFrmTool; }
-
- protected:
- void InitDate();
- bool NetComandToServer (OCCCOMMAND& NetCmd);
- bool Send_TrainEnd_2Client(OCCCOMMAND NetCmd);
- bool Send_TrainBeg_2Client(OCCCOMMAND NetCmd);
- void Add_AssignCmd_List(int nCmdType,std::string Str_ModuleList);
- BOOL AssignCmd_ToModule(OCCCOMMAND NetCmd, vector<int> VecModuleID);
- void MakeCmd_DealModule(OCCCOMMAND NetCmd, vector<int>& VecModuleID);
- void LoadSub_DispatchSys();
- void DealWith_RollBack_CtrlCmd( OCCCOMMAND NetCmd );
- BOOL CheckIs_Record_RollBack();
- //反馈回滚状态
- void FeedBack_RollBack_Cmd(int nTrainID, int nPointID, int nType, int nResult);
- //发送分配角色指令
- void Send_SetUserRoll_Cmd(int nSysID);
- private:
- void ThreadFun_DealTCPData(); //线程函数_处理TCP数据
- void ThreadFun_DealUDPData(); //线程函数_处理UDP数据
- void ThreadFun_DealGroupData(); //线程函数_处理组播数据
- void ThreadFun_RollBackRecord(); //线程函数_处理回滚记录
- public:
- int m_NetServerID; //服务器系统号
- int m_TechServerID; //教员系挺号
- int m_nViewSysSvrID; //视景协同服务器ID
- int m_nCurTrainID; //当前训练号
- int m_nCurCourseID; //当前课程号
- int m_nCurRBPointID; //当前回滚记录节点:给教员反馈后+1
- int m_nEndTrainingTime; //结束训练时间
- int m_nSysSimulateTime; //系统仿真时间
- double m_dLastRecordTime; //最后一次记录时间
- int m_nAllTrainStatus; //全部训练状态
- BOOL m_bRollBackEvent; //是否具有回滚触发事件
-
- char* m_pLogBuf; //日志缓存
- Map_Plugin m_PluginMap; //模块容器
- CNetWorkMng_I* m_pNetWork; //网络模块
- CRollBack_ITool m_RollBackTool; //回滚工具模块
- YD_RedisClient m_RedisClient; //Redis操作客户端
- Map_AssignCmd m_AssignCmdMap; //分配命令列表
- protected:
- CommandQueue m_QI_GetList_TCP; //接收队列-TCP数据
- CommandQueue m_QI_GetList_UDP; //接收队列-UDP数据
- CommandQueue m_QI_GetList_Group; //接收队列-组播数据
- CommandQueue m_QI_SendList_TCP; //发送队列-TCP数据
- CommandQueue m_QI_SendList_UDP; //发送队列-UDP数据
- CommandQueue m_QI_SendList_Group; //发送队列-组播数据
- std::recursive_mutex m_MutexTrainConect; //训练的系统列表锁
- std::recursive_mutex m_MutexDispatchTask; //调度子系统列表锁
-
- NETTRIANNECTMAP m_NetTrainNectMap; //训练列表
- DISTASKMAP m_DispatchTasksMap; //调度子系统列表
- DATECONFIGMAP m_DataBaseConfigMap; //数据库配置列表
- CDebug_Module_I* m_pDebugModule; //调试模块接口
- char m_cRollBackDes[100]; //回滚描述信息
- public:
- CFrameTool_I* m_pFrmTool; //框架工具接口
- public:
- bool m_ReceiveMsgThreadOut; //线程退出-TCP数据
- bool m_ReceiveRealMsgThreadOut; //线程退出-UDP数据
- bool m_ReceiveGroupMsgThreadOut; //线程退出-组播数据
- bool m_RollBackRecordThreadOut; //线程退出-回滚记录
- std::thread m_Thread_DealTCPData; //线程变量_处理TCP数据
- std::thread m_Thread_DealUDPData; //线程变量_处理UDP数据
- std::thread m_Thread_DealGroupData; //线程变量_处理组播数据
- std::thread m_Thread_RollBackRecord; //线程变量_处理回滚记录
- };
|