00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef CERTI_RTIG_HH
00025 #define CERTI_RTIG_HH
00026
00027 #include "certi.hh"
00028 #include "NetworkMessage.hh"
00029 #include "NM_Classes.hh"
00030 #include "SecureTCPSocket.hh"
00031 #include "SocketServer.hh"
00032 #include "FederationsList.hh"
00033 #include "AuditFile.hh"
00034 #include "HandleManager.hh"
00035
00036 namespace certi {
00037 namespace rtig {
00038
00050 class RTIG
00051 {
00052 public:
00053 RTIG();
00054 ~RTIG();
00055
00056 static void signalHandler(int sig);
00057 static bool terminate ;
00058 void setVerboseLevel(int level) { verboseLevel = level ; federations.setVerboseLevel(level);}
00059 void execute();
00060
00061
00062 private:
00063
00064
00065 Socket* processIncomingMessage(Socket*) throw (NetworkError) ;
00066 Socket* chooseProcessingMethod(Socket*, NetworkMessage *);
00067
00068 void openConnection();
00069 void closeConnection(Socket*, bool emergency);
00070
00071
00072 void processCreateFederation(Socket*, NetworkMessage*);
00073 void processJoinFederation(Socket*, NetworkMessage*);
00074 void processResignFederation(Socket*,Handle, FederateHandle);
00075 void processDestroyFederation(Socket*, NetworkMessage*);
00076 void processSetClassRelevanceAdvisorySwitch(Socket*,
00077 NM_Set_Class_Relevance_Advisory_Switch*);
00078 void processSetInteractionRelevanceAdvisorySwitch(Socket*,
00079 NM_Set_Interaction_Relevance_Advisory_Switch*);
00080 void processSetAttributeRelevanceAdvisorySwitch(Socket*,
00081 NM_Set_Attribute_Relevance_Advisory_Switch*);
00082 void processSetAttributeScopeAdvisorySwitch(Socket*,
00083 NM_Set_Attribute_Scope_Advisory_Switch*);
00084 void processSetTimeRegulating(Socket*, NM_Set_Time_Regulating *msg);
00085 void processSetTimeConstrained(Socket*, NM_Set_Time_Constrained *msg);
00086 void processMessageNull(NetworkMessage*);
00087 void processRegisterSynchronization(Socket*, NM_Register_Federation_Synchronization_Point*);
00088 void processSynchronizationAchieved(Socket*, NetworkMessage*);
00089 void processRequestFederationSave(Socket*, NetworkMessage*);
00090 void processFederateSaveBegun(Socket*, NetworkMessage*);
00091 void processFederateSaveStatus(Socket*, NetworkMessage*);
00092 void processRequestFederationRestore(Socket*, NetworkMessage*);
00093 void processFederateRestoreStatus(Socket*, NetworkMessage*);
00094 void processPublishObjectClass(Socket*, NetworkMessage*);
00095 void processSubscribeObjectClass(Socket*, NetworkMessage*);
00096 void processUnpublishObjectClass(Socket*, NetworkMessage*);
00097 void processUnsubscribeObjectClass(Socket*, NetworkMessage*);
00098 void processPublishInteractionClass(Socket*, NetworkMessage*);
00099 void processSubscribeInteractionClass(Socket*, NetworkMessage*);
00100 void processUnpublishInteractionClass(Socket*, NetworkMessage*);
00101 void processUnsubscribeInteractionClass(Socket*, NetworkMessage*msg);
00102 void processRegisterObject(Socket*, NetworkMessage*);
00103 void processUpdateAttributeValues(Socket*, NetworkMessage*);
00104 void processSendInteraction(Socket*, NetworkMessage*);
00105 void processDeleteObject(Socket*, NetworkMessage*);
00106 void processQueryAttributeOwnership(Socket*, NetworkMessage*);
00107 void processNegotiatedOwnershipDivestiture(Socket*, NetworkMessage*);
00108 void processAcquisitionIfAvailable(Socket*, NetworkMessage*);
00109 void processUnconditionalDivestiture(Socket*, NetworkMessage*);
00110 void processOwnershipAcquisition(Socket*, NetworkMessage*);
00111 void processCancelNegotiatedDivestiture(Socket*, NetworkMessage*);
00112 void processAttributeOwnedByFederate(Socket*, NetworkMessage*);
00113 void processReleaseResponse(Socket*, NetworkMessage*);
00114 void processCancelAcquisition(Socket*, NetworkMessage*);
00115 void processCreateRegion(Socket*, NetworkMessage*);
00116 void processModifyRegion(Socket*, NetworkMessage*);
00117 void processDeleteRegion(Socket*, NetworkMessage*);
00118 void processAssociateRegion(Socket*, NetworkMessage*);
00119 void processUnassociateRegion(Socket*, NetworkMessage*);
00120 void processSubscribeAttributesWR(Socket*, NetworkMessage*);
00121 void processUnsubscribeAttributesWR(Socket*, NetworkMessage*);
00122 void processSubscribeInteractionWR(Socket*, NetworkMessage*);
00123 void processUnsubscribeInteractionWR(Socket*, NetworkMessage*);
00124 void processRegisterObjectWithRegion(Socket*, NetworkMessage*);
00125 void processRequestObjectAttributeValueUpdate(Socket*, NetworkMessage*);
00126
00127 private:
00128 int tcpPort ;
00129 int udpPort ;
00130 int verboseLevel ;
00131 HandleManager<Handle> federationHandles ;
00132 SocketTCP tcpSocketServer ;
00133 SocketUDP udpSocketServer ;
00134 SocketServer socketServer ;
00135 AuditFile auditServer ;
00136 FederationsList federations ;
00137
00138 MessageBuffer NM_msgBufSend;
00139
00140 MessageBuffer NM_msgBufReceive;
00141 };
00142
00143 }}
00144
00145 #endif // CERTI_RTIG_HH
00146
00147