| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612 |
- // DispatchTaskManger.cpp : 定义 DLL 的初始化例程。
- #include "pch.h"
- #include <YD_Public_OCC.h>
- #include "NetWork_Alone.h"
- #include "DispatchTaskManger.h"
- #if defined(_MSC_VER) || defined(WIN64) || defined(__WIN64__) || defined(WIN32) || defined(_WIN32)
- #ifdef _YD_OCC_DISPATCHTASK_MG_SDK
- #define _YD_OCC_DISPATCHTASK_MG_API __declspec(dllexport)
- #else
- #define _YD_OCC_DISPATCHTASK_MG_API __declspec(dllimport)
- #endif
- #else //linux
- #ifdef _YD_OCC_DISPATCHTASK_MG_SDK
- #define _YD_OCC_DISPATCHTASK_MG_API __attribute__ ((visibility("default")))
- #else
- #define _YD_OCC_DISPATCHTASK_MG_API __attribute__ ((visibility("default")))
- #endif
- #endif
- extern "C" _YD_OCC_DISPATCHTASK_MG_API CDispatchMng_I* CreateDispatchServer(CFrameTool_I * pFrmTool)
- {
- //1、直接返回-指针为空时
- CDispatchTaskMG* pDispatchMng = new CDispatchTaskMG();
- if ( !pDispatchMng ) return nullptr;
- //2、开始任务失败-析构对象并返回空
- if ( !(pDispatchMng->StartWork(pFrmTool)) )
- {
- delete pDispatchMng;
- pDispatchMng = nullptr;
- }
- return pDispatchMng;
- }
- //构造函数
- CDispatchTaskMG::CDispatchTaskMG( )
- {
- }
- //析构函数
- CDispatchTaskMG::~CDispatchTaskMG(void)
- {
- EXIT netoder;
- netoder.time = (int)time(nullptr);
- NetComand_Send(&netoder,OCC_SYS_SERVER_ADMIN,OCCCOMMAND::eExit);
- //1、首先关闭网络连接
- if ( m_pNetWork )
- {
- m_pNetWork->_IClose();
- delete m_pNetWork;
- m_pNetWork = nullptr;
- }
- //2、结束接收TCP数据线程
- m_ReceiveMsgThreadOut = true;
- if ( m_Thread_DealTCPData.joinable() )
- {
- m_Thread_DealTCPData.join();
- }
- //3、结束接收组播数据线程
- m_ReceiveGroupMsgThreadOut = true;
- if ( m_Thread_DealGroupData.joinable() )
- {
- m_Thread_DealGroupData.join();
- }
- //4、结束接收UDP数据线程
- m_ReceiveRealMsgThreadOut = true;
- if ( m_Thread_DealUDPData.joinable() )
- {
- m_Thread_DealUDPData.join();
- }
- //5、结束回滚记录线程
- m_RollBackRecordThreadOut = true;
- if ( m_Thread_RollBackRecord.joinable() )
- {
- m_Thread_RollBackRecord.join();
- }
- //6、删除训练
- DELTRAIN tb;
- tb.CourseID = 0;
- tb.SysID = OCC_SYS_LS_SVR;
- DeleteDispatchTask(tb.CourseID,tb.SysID,0);
-
- tb.CourseID = 0;
- tb.SysID = OCC_SYS_XD_SVR;
- DeleteDispatchTask(tb.CourseID,tb.SysID,0);
-
- tb.CourseID = 0;
- tb.SysID = OCC_SYS_DD_SVR;
- DeleteDispatchTask(tb.CourseID,tb.SysID,0);
-
- tb.CourseID = 0;
- tb.SysID = OCC_SYS_HD_SVR;
- DeleteDispatchTask(tb.CourseID,tb.SysID,0);
- tb.CourseID = 0;
- tb.SysID = OCC_SYS_KC_SVR;
- DeleteDispatchTask(tb.CourseID,tb.SysID,0);
- //7、各子模块停止任务并退出
- R_Mutex_LOCK(m_MutexDispatchTask);
- for( auto& var : m_DispatchTasksMap )
- {
- if ( var.second )
- {
- int ret;
- var.second->StopTask(ret);
- var.second->Exit();
- delete var.second;
- var.second = nullptr;
- }
- }
- m_DispatchTasksMap.clear();
- }
- /*******************************************************
- 函数名称: StartWork
- 函数功能: 开始工作
- 输入参数: pFrmTool - 框架工具
- 输出参数: NULL
- 返 回 值: void
- *******************************************************/
- bool CDispatchTaskMG::StartWork( CFrameTool_I* pFrmTool )
- {
- bool bFlag = CBaseDispatchTaskMg::StartWork(pFrmTool);
- m_pTCPSend_CallBack = pFrmTool->m_pTCPSend_CallBack;
- m_pUDPSend_CallBack = pFrmTool->m_pUDPSend_CallBack;
- //1、TODO:加载网络库
- if ( m_pTCPSend_CallBack && m_pUDPSend_CallBack )
- {
- m_pNetWork = new CNetWork_Alone(this);
- }
- else
- {
- NEW_NETWORK_INSTANCE NewInstanceFun = nullptr;
- #ifdef IN_WINDOWS
- std::string Str_LibName = GetFolder_Module_2() + "\\NetWorkManger.dll";
- HINSTANCE hInstance = ::LoadLibraryA(Str_LibName.c_str());
- NewInstanceFun = (NEW_NETWORK_INSTANCE)GetProcAddress(hInstance,"New_NetWork_Ins");
- #else
- std::string Str_LibName = GetFolder_Module_2() + "libNetWorkManger.so";
- HINSTANCE hInstance = dlopen(Str_LibName.c_str(),RTLD_LAZY);
- NewInstanceFun = (NEW_NETWORK_INSTANCE)dlsym(hInstance, "New_NetWork_Ins");
- #endif
- if ( NewInstanceFun )
- {
- m_pNetWork = NewInstanceFun(this);
- m_NetServerID = m_pNetWork->_IGet_System_ID();
- }
- }
- return bFlag;
- }
- /*******************************************************
- 函数名称: InitConfigParam
- 函数功能: 初始化配置参数
- 输入参数: NULL
- 输出参数: NULL
- 返回值 : bool - true:成功 false:失败
- *******************************************************/
- bool CDispatchTaskMG::InitConfigParam()
- {
- bool bFlag = true;
- for ( auto var : m_PluginMap )
- {
- int nSubSysType = var.first;
- if ( !LoadSubSys_DBConfig(nSubSysType) )
- {
- bFlag = false;
- }
- }
- return bFlag;
- }
- /*******************************************************
- 函数名称: LoadSubSys_DBConfig
- 函数功能: 加载子系统数据库配置文件
- 输入参数: nSubSysType - 子系统类型
- 输出参数: NULL
- 返回值 : BOOL - TRUE:成功 FALSE:失败
- *******************************************************/
- BOOL CDispatchTaskMG::LoadSubSys_DBConfig( int nSubSysType )
- {
- //1、先按网络配置设置默认数据库IP和NAME
- std::string Str_FilePath = GetFolder_Module_2();
- #ifdef IN_WINDOWS
- std::string Str_FileName = Str_FilePath+"\\YDComm.conf";
- #else
- std::string Str_FileName = Str_FilePath + "YDComm.conf";
- #endif
- std::string StrTmp = ReadCfg_String(Str_FileName, "DATABASE", "DatabaseAddr", "");
- vector <std::string> TmpVecStr = str_split_2(StrTmp, ";");
- int nDB_Type = TmpVecStr.size() > 3 ? atoi(TmpVecStr.at(3).c_str()) : 0;
- std::string Str_DefDBIP = TmpVecStr.size() >= 3 ? TmpVecStr.at(0) : "Error";
- std::string Str_DefDBName = TmpVecStr.size() >= 3 ? TmpVecStr.at(2) : "Error";
- std::string Str_DefUser = TmpVecStr.size() > 3 ? "yd_fms" : "yd_fms";
- std::string Str_Psw = nDB_Type == 1 ? "fms@123" : "fms";
-
-
-
- //2、设置子系统数据库配置关键Key
- char cMainKey[25];
- memset(cMainKey, 0, sizeof(cMainKey));
- switch (nSubSysType)
- {
- case OCC_SYS_LS_SVR:
- Str_To_CharBuf_2("LSDATABASE", cMainKey, 25);
- break;
- case OCC_SYS_XD_SVR:
- Str_To_CharBuf_2("XDDATABASE", cMainKey, 25);
- break;
- case OCC_SYS_DD_SVR:
- Str_To_CharBuf_2("DDDATABASE", cMainKey, 25);
- break;
- case OCC_SYS_HD_SVR:
- Str_To_CharBuf_2("HDDATABASE", cMainKey, 25);
- break;
- case OCC_SYS_JT_SVR:
- Str_To_CharBuf_2("XDDATABASE", cMainKey, 25);
- break;
- case OCC_SYS_KC_SVR:
- Str_To_CharBuf_2("KCDATABASE", cMainKey, 25);
- break;
- default:
- Str_To_CharBuf_2("XDDATABASE", cMainKey, 25);
- break;
- }
- //3、加载数据库配置文件
- #ifdef IN_WINDOWS
- Str_FileName = Str_FilePath + "\\ParamSetting.ini";
- #else
- Str_FileName = Str_FilePath + "ParamSetting.ini";
- #endif
- DATEBASECONFIG DataBaseConfig;
- DataBaseConfig.strSeverIP = ReadCfg_String(Str_FileName, cMainKey, "ServerIP", Str_DefDBIP);
- DataBaseConfig.strDBName = ReadCfg_String(Str_FileName, cMainKey, "DBname", Str_DefDBName);
- DataBaseConfig.strUserID = ReadCfg_String(Str_FileName, cMainKey, "Username", Str_DefUser);
- DataBaseConfig.strPassWord = ReadCfg_String(Str_FileName, cMainKey, "PassWord", Str_Psw);
- DataBaseConfig.nDB_Type = nDB_Type;
- //DataBaseConfig.strSeverIP.TrimLeft();
- //DataBaseConfig.strSeverIP.TrimRight();
- //DataBaseConfig.strDBName.TrimLeft();
- //DataBaseConfig.strDBName.TrimRight();
- //DataBaseConfig.strUserID.TrimLeft();
- //DataBaseConfig.strUserID.TrimRight();
- //DataBaseConfig.strPassWord.TrimLeft();
- //DataBaseConfig.strPassWord.TrimRight();
- //4、判断数据库配置正确性并存储配置文件
- if ( DataBaseConfig.strSeverIP == "Error" || DataBaseConfig.strSeverIP.empty())
- return FALSE;
- if ( DataBaseConfig.strDBName == "Error" || DataBaseConfig.strDBName.empty())
- return FALSE;
- if ( DataBaseConfig.strUserID == "Error" || DataBaseConfig.strUserID.empty())
- return FALSE;
- if ( DataBaseConfig.strPassWord == "Error" || DataBaseConfig.strPassWord.empty())
- return FALSE;
- //5、存储配置文件
- m_DataBaseConfigMap.insert(make_pair(nSubSysType,DataBaseConfig));
- return TRUE;
- }
- /*******************************************************
- 函数名称: CreateNewTaskType
- 函数功能: 创建新的任务类型
- 输入参数: nSysType - 系统类型
- 输出参数: NULL
- 返回值 : CBaseDispatch* - 创建的调度对象指针
- *******************************************************/
- CBaseDispatch* CDispatchTaskMG::CreateNewTaskType( int nSysType )
- {
- CBaseDispatch* pDispatchSys = NULL;
- //创建子模块
- sPlugin* pPlugin = GetPlugin_ByModuleID(nSysType);
- if ( pPlugin && pPlugin->bInitOk )
- {
- pDispatchSys = pPlugin->nCreatePlug();
- }
- //初始化调试工具
- if ( pDispatchSys )
- {
- pDispatchSys->Dispatch_ModuleInit(this);
- }
- return pDispatchSys;
- }
- void CDispatchTaskMG::Deal_NetComand( OCCCOMMAND& NetCmd )
- {
- if ( NetCmd.cmdType == OCCCOMMAND::eCreateConnect )
- {
- OCCORDER oder;
- oder.sysID = OCC_SYS_SERVER_SVR;
- oder.cmdType = OCC_NETMESSAGE_TRIAN_CREATETCP;
- oder.data1 = NetCmd.NET_JY_CREATECONNECT.SysType;
- oder.data2 = NetCmd.NET_JY_CREATECONNECT.SysID;
- oder.trainID = -1;
- NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- if ( NetCmd.cmdType == OCCCOMMAND::CMD_SYS_ReConnec )
- {
- OCCORDER oder;
- oder.sysID = OCC_SYS_SERVER_SVR;
- oder.cmdType = OCC_NETMESSAGE_TRIAN_RESETNETROOM;
- oder.trainID = -1;
- NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- }
- void CDispatchTaskMG::AddReceiveGroupMsg(int nTrainID, int nSysType, CBaseDispatch* pDispatchSys)
- {
- //NOTE:暂时先屏蔽此函数功能,觉得没什么用
- return;
- int nGroupSys = -1;
- switch (nSysType)
- {
- case OCC_SYS_XD_SVR:
- nGroupSys = OCC_SYS_XD_GROUP;
- break;
- case OCC_SYS_DD_SVR:
- nGroupSys = OCC_SYS_DD_GROUP;
- break;
- case OCC_SYS_HD_SVR:
- nGroupSys = OCC_SYS_HD_GROUP;
- break;
- default:
- break;
- }
- if ( nGroupSys <= 0 ) return;
- std::string Str_Key = Make2IntKey_2(nGroupSys,nTrainID);
- R_Mutex_LOCK(m_MutexDispatchTask);
- m_DispatchTasksMap.insert(make_pair(Str_Key,pDispatchSys));
- }
- /*******************************************************
- 函数名称: InitNetConnectStatus
- 函数功能: 初始化网络连接状态
- 输入参数: nTrainID - 训练号
- systype - 系统类型
- 输出参数: NULL
- 返回值 : CBaseDispatch* - 创建的调度对象指针
- *******************************************************/
- bool CDispatchTaskMG::InitNetConnectStatus( int nTrainID,int nSysType )
- {
- R_Mutex_LOCK(m_MutexTrainConect);
- auto iter = m_NetTrainNectMap.find(nTrainID);
- if ( iter != m_NetTrainNectMap.end() )
- {
- if ( iter->second.nSvrSysID_XD == m_NetServerID && nSysType == OCC_SYS_XD_SVR )
- {
- for ( size_t i = 0; i < iter->second.ClientSysID_XD.size(); i++ )
- {
- // OCCORDER oder;
- // oder.sysID = OCC_SYS_SERVER_SVR;
- // oder.cmdType = OCC_NETMESSAGE_TRIAN_CREATETCP;
- // oder.data1 = OCC_SYS_XD_CLIENT;
- // oder.data2 = iter->second.xdclientsysid[i];
- // oder.trainID = -1;
- // NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- if ( iter->second.nSvrGroupID_XD > 0 )
- {
- OCCORDER oder;
- oder.sysID = OCC_SYS_SERVER_SVR;
- oder.cmdType = OCC_NETMESSAGE_TRIAN_JIONGROUP;
- oder.data1 = OCC_SYS_XD_GROUP;
- oder.data2 = iter->second.nSvrGroupID_XD;
- oder.trainID = nTrainID;
- NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- }
- if ( iter->second.nSvrSysID_HD == m_NetServerID && nSysType == OCC_SYS_HD_SVR )
- {
- for (size_t i=0;i<iter->second.ClientSysID_HD.size();i++)
- {
- // OCCORDER oder;
- // oder.sysID = OCC_SYS_SERVER_SVR;
- // oder.cmdType = OCC_NETMESSAGE_TRIAN_CREATETCP;
- // oder.data1 = OCC_SYS_HD_CLIENT;
- // oder.data2 = iter->second.hdclientsysid[i];
- // oder.trainID = -1;
- // NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- if ( iter->second.nSvrGroupID_HD > 0 )
- {
- OCCORDER oder;
- oder.sysID = OCC_SYS_SERVER_SVR;
- oder.cmdType = OCC_NETMESSAGE_TRIAN_JIONGROUP;
- oder.data1 = OCC_SYS_HD_GROUP;
- oder.data2 = iter->second.nSvrGroupID_HD;
- oder.trainID = nTrainID;
- NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- }
- if ( iter->second.nSvrSysID_DD == m_NetServerID && nSysType == OCC_SYS_DD_SVR )
- {
- for ( size_t i = 0; i < iter->second.ClientSysID_DD.size(); i++ )
- {
- //OCCORDER oder;
- //oder.sysID = OCC_SYS_SERVER_SVR;
- //oder.cmdType = OCC_NETMESSAGE_TRIAN_CREATETCP;
- //oder.data1 = OCC_SYS_DD_CLIENT;
- //oder.data2 = iter->second.ddclientsysid[i];
- //oder.trainID = -1;
- //NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- if ( iter->second.nSvrGroupID_DD > 0 )
- {
- OCCORDER oder;
- oder.sysID = OCC_SYS_SERVER_SVR;
- oder.cmdType = OCC_NETMESSAGE_TRIAN_JIONGROUP;
- oder.data1 = OCC_SYS_DD_GROUP;
- oder.data2 = iter->second.nSvrGroupID_DD;
- oder.trainID = nTrainID;
- NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- }
- if ( iter->second.nSvrSysID_LS == m_NetServerID && nSysType == OCC_SYS_LS_SVR )
- {
- for ( size_t i = 0; i < iter->second.ClientSysID_XD.size(); i++ )
- {
- // OCCORDER oder;
- // oder.sysID = OCC_SYS_SERVER_SVR;
- // oder.cmdType = OCC_NETMESSAGE_TRIAN_CREATETCP;
- // oder.data1 = OCC_SYS_XD_CLIENT;
- // oder.data2 = iter->second.xdclientsysid[i];
- // oder.trainID = -1;
- // NetComand_Send(&oder,OCC_SYS_SERVER_NET,OCCCOMMAND::eOccOrder);
- }
- }
- if ( iter->second.nSvrSysID_HD > 0 )
- {
- }
- Thread_Sleep(100);
- return true;
- }
- return false;
- }
- void CDispatchTaskMG::DeleteReceiveGroupMsg( int nTrainID,int nSysType )
- {
- //1、按照系统类型查询组播号
- int nTmpGroupID = -1;
- switch ( nSysType )
- {
- case OCC_SYS_XD_SVR:
- nTmpGroupID = OCC_SYS_XD_GROUP;
- break;
- case OCC_SYS_DD_SVR:
- nTmpGroupID = OCC_SYS_DD_GROUP;
- break;
- case OCC_SYS_HD_SVR:
- nTmpGroupID = OCC_SYS_HD_GROUP;
- break;
- default:
- nTmpGroupID = -1;
- break;
- }
- //2、若查询组播号失败则直接返回
- if ( nTmpGroupID < 0 ) return;
- //3、查询并删除指定的组播
- string Str_Key = Make2IntKey_2(nTmpGroupID,nTrainID);
- R_Mutex_LOCK(m_MutexDispatchTask);
- auto iter = m_DispatchTasksMap.find(Str_Key);
- if ( iter != m_DispatchTasksMap.end() )
- {
- m_DispatchTasksMap.erase(iter);
- }
- }
- /*******************************************************
- 函数名称: _IGetPtr_CmdQueue
- 函数功能: 获取指定类型的数据队列
- 输入参数: nType - 类型
- 输出参数: NULL
- 返 回 值: LPVOID - 队列指针
- *******************************************************/
- LPVOID CDispatchTaskMG::_IGetPtr_CmdQueue( int nType )
- {
- CommandQueue* pCmdQueue = nullptr;
- switch ( nType )
- {
- case CmdQueueType_Send_TCP: //发送队列-TCP
- pCmdQueue = &m_QI_SendList_TCP;
- break;
- case CmdQueueType_Send_UDP: //发送队列-UDP
- pCmdQueue = &m_QI_SendList_UDP;
- break;
- case CmdQueueType_Send_GROUP: //发送队列-组播
- pCmdQueue = &m_QI_SendList_Group;
- break;
- case CmdQueueType_Recv_TCP: //接收队列-TCP
- pCmdQueue = &m_QI_GetList_TCP;
- break;
- case CmdQueueType_Recv_UDP: //接收队列-UDP
- pCmdQueue = &m_QI_GetList_UDP;
- break;
- case CmdQueueType_Recv_GROUP: //接收队列-组播
- pCmdQueue = &m_QI_GetList_Group;
- break;
- default:
- break;
- }
- return pCmdQueue;
- }
- BOOL CDispatchTaskMG::_ITCPData_2Server(char* pData, int nDateLen)
- {
- OCCCOMMAND NetCmd;
- int nSizeOff = 0;
- memcpy(&NetCmd.cmdType, pData + nSizeOff, sizeof(NetCmd.cmdType) ); nSizeOff += sizeof(NetCmd.cmdType);
- memcpy(&NetCmd.DesSysType, pData + nSizeOff, sizeof(NetCmd.DesSysType)); nSizeOff += sizeof(NetCmd.DesSysType);
- memcpy(&NetCmd.ScrSysType, pData + nSizeOff, sizeof(NetCmd.ScrSysType)); nSizeOff += sizeof(NetCmd.ScrSysType);
- memcpy(&NetCmd.DesNetID, pData + nSizeOff, sizeof(NetCmd.DesNetID) ); nSizeOff += sizeof(NetCmd.DesNetID);
- memcpy(&NetCmd.ScrNetID, pData + nSizeOff, sizeof(NetCmd.ScrNetID) ); nSizeOff += sizeof(NetCmd.ScrNetID);
- memcpy(&NetCmd.TrainningID, pData + nSizeOff, sizeof(NetCmd.TrainningID)); nSizeOff += sizeof(NetCmd.TrainningID);
- memcpy(&NetCmd.DateLen, pData + nSizeOff, sizeof(NetCmd.DateLen) ); nSizeOff += sizeof(NetCmd.DateLen) + 4;
- memcpy(&NetCmd.Net_CCTVCtrl_ToXD, pData + nSizeOff, NetCmd.DateLen);
- m_QI_GetList_TCP.push(NetCmd);
- return TRUE;
- }
- BOOL CDispatchTaskMG::_IUDPData_2Server(char* pData, int nDateLen)
- {
- OCCCOMMAND NetCmd;
- int nSizeOff = 0;
- memcpy(&NetCmd.cmdType, pData + nSizeOff, sizeof(NetCmd.cmdType)); nSizeOff += sizeof(NetCmd.cmdType);
- memcpy(&NetCmd.DesSysType, pData + nSizeOff, sizeof(NetCmd.DesSysType)); nSizeOff += sizeof(NetCmd.DesSysType);
- memcpy(&NetCmd.ScrSysType, pData + nSizeOff, sizeof(NetCmd.ScrSysType)); nSizeOff += sizeof(NetCmd.ScrSysType);
- memcpy(&NetCmd.DesNetID, pData + nSizeOff, sizeof(NetCmd.DesNetID)); nSizeOff += sizeof(NetCmd.DesNetID);
- memcpy(&NetCmd.ScrNetID, pData + nSizeOff, sizeof(NetCmd.ScrNetID)); nSizeOff += sizeof(NetCmd.ScrNetID);
- memcpy(&NetCmd.TrainningID, pData + nSizeOff, sizeof(NetCmd.TrainningID)); nSizeOff += sizeof(NetCmd.TrainningID);
- memcpy(&NetCmd.DateLen, pData + nSizeOff, sizeof(NetCmd.DateLen)); nSizeOff += sizeof(NetCmd.DateLen)+ 4;
- memcpy(&NetCmd.Net_CCTVCtrl_ToXD, pData + nSizeOff, NetCmd.DateLen);
- m_QI_GetList_UDP.push(NetCmd);
- return TRUE;
- }
- /*******************************************************
- 函数名称: _IAdd_Sub_Sys
- 函数功能: 添加子系统
- 输入参数: nTrainingID - 训练号
- nSysType - 系统类型
- nSysID - 系统号
- 输出参数: NULL
- 返 回 值: void
- *******************************************************/
- void CDispatchTaskMG::_IAdd_Sub_Sys(int nTrainingID, int nSysType, int nSysID)
- {
- RecTrianPosition(nSysType, nTrainingID, nSysID);
- }
- /*******************************************************
- 函数名称: _ISend_UDPData_ToModule
- 函数功能: 发送特殊UDP数据给模块
- 输入参数: nModuleID - 模块号
- lSysID - 系统号
- pDataBuf - 数据指针
- nLength - 数据长度
- 输出参数: NULL
- 返 回 值: BOOL - TRUE:成功 FALSE:失败
- *******************************************************/
- BOOL CDispatchTaskMG::_ISend_UDPData_ToModule( int nModuleID, long lSysID,
- char* pDataBuf,int nLength )
- {
- BOOL bFlag = FALSE;
- string Str_Index = Make2IntKey_2(nModuleID, m_nCurTrainID);
- R_Mutex_LOCK(m_MutexDispatchTask);
- auto itor = m_DispatchTasksMap.find(Str_Index);
- if ( itor != m_DispatchTasksMap.end() )
- {
- itor->second->DealWith_Special_UDPData(lSysID,pDataBuf,nLength);
- bFlag = TRUE;
- }
- return bFlag;
- }
|