CERTI之RTIG消息处理模块实现细节的举例说明(一)
来源:互联网 发布:三维产品展示软件 编辑:程序博客网 时间:2024/05/20 07:49
本文将以CERTI中的RTIG对某联邦成员发出的设定其自身的时间管理机制为Regulating类型的请求的处理过程为例,详细说明RTIG的整个处理过程,而对于其他的请求的处理过程则与本例极为相似,不再赘述。
在CERTI中,联邦成员federate与其对应的RTIA一般位于同一主机上,因此federate与RTIA之间一般通过进程间通信进行消息的传递和请求的发出和接收;而RTIA和RTIG一般部署在不同的主机上,它们之间进行消息的传递时,一般通过网络通信实现。因此,CERTI为此专门设计了供RTIA和RTIG之间网络通信使用的消息类NetworkMessage,而NetworkMessage是一个抽象类,它有许多的派生类,每个派生类代表了一种具体类型的消息。
在本文中,RTIA发出的设定其时间管理机制为Regulating的消息类为NM_Set_Time_Regulating,而RTIG接收该消息并将其转入相应的消息处理模块的过程为:
(1)RTIA向RTIG的socketServer的TCP监听端口或者UDP监听端口发送一个类型为NM_Set_Time_Regulating的消息实例;
(2)RITG进程中的myRTIG.execute()线程负责持续监听TCP端口和UDP端口;
(3)当检测到有消息被发送到TCP或者UDP端口时,利用语句link = socketServer.getActiveSocket(&fd)获取接收到消息的socket(也即是语句中的link);
(4)利用processIncomingMessage(link)中的msg = NM_Factory::receive(link)语句,从link这个socket中接收相应的消息,存放在msg中;
(5)利用chooseProcessingMethod(link, msg)中的switch(msg->getMessageType())语句,进入到下列程序段中
case NetworkMessage::SET_TIME_REGULATING:
processSetTimeRegulating(link, static_cast<NM_Set_Time_Regulating*>(msg));
break ;
(6)最终,进入到对NM_Set_Time_Regulating的消息处理模块processSetTimeRegulating()中,从而开始对该消息的处理。
下面就对NM_Set_Time_Regulating的消息处理模块processSetTimeRegulating()的整个处理过程进行分析,它的整个处理过程也是一层一层的调用。它的参数分别为消息接收所用的socket连结link,以及RTIA所发出的消息msg。
进入第一层调用:
void RTIG::processSetTimeRegulating(Socket *link, NM_Set_Time_Regulating *msg)
{
if (msg->isRegulatorOn()){
//在RTIG中,auditServer负责记录RTIG的活动日志,以方便用户查看RITG的所有正在进行的活动和已经发生的活动。
auditServer << "ON at time " << msg->getDate().getTime();
//下面这行代码调用federationList类的成员函数createRegulator,根据RTIA发出的消息msg中所包含的联邦、联邦成员和时间的响应信息,对federationList中的相应联邦进行操作
federations.createRegulator(msg->getFederation(),//获取Federation的句柄
msg->getFederate(),//获取Federate的句柄
msg->getDate());//获取消息发送的时间
// 下面的这段代码则是负责生成RTIG对RTIA的回复消息timeRegulationEnabled(),并调用send函数发送给相应的federate.
NM_Time_Regulation_Enabled rep ;
rep.setFederate(msg->getFederate());//设定回复消息中的Federation的句柄
rep.setFederation(msg->getFederation());//设定回复消息中的Federate的句柄
rep.setDate(msg->getDate());//设定回复消息的时间
rep.send(link,NM_msgBufSend);//调用消息发送函数,NM_msgBufSend为消息发送缓冲池}
}
RITG中的其他消息处理模块的实现细节与上述过程基本一样,通过三层调用最终实现对消息的处理和响应。
- CERTI之RTIG消息处理模块实现细节的举例说明(一)
- CERTI之RTIG的数据结构分析
- CERTI之RTIG的运行过程分析
- Java之集合的实现细节(一)
- 举例说明Python的CSV模块
- 举例说明Python的CSV模块
- 举例说明Python的CSV模块
- 约瑟环的python实现(举例说明)
- Android架构分析之Android消息处理机制(一)
- Android编程基础之消息处理机制的简单实现
- ArcGIS Server 中的 Ajax技术的实现(举例说明)
- QT消息处理模块
- window消息处理模块
- MFC消息处理(一)
- 消息处理机制(一)
- Android系统之Phone模块-接电话Unsolicited消息的接收和处理过程
- Android系统之Phone模块-接电话Unsolicited消息的接收和处理过程
- 常见Java集合的实现细节(一)
- 01_如何调用SAP的长文本编辑器
- oracle数据库管理员
- datatable to json
- 如何成功的交付项目
- structs 获取Post数据流问题
- CERTI之RTIG消息处理模块实现细节的举例说明(一)
- const
- typedef
- 【转】DirectShow测试例程(VC6)
- oracle数据库备份与恢复
- svn实现文件/目录共享
- 大表上新增字段问题--相关解决方案
- 小弟佩服
- ssh打通通道自动登录