![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 2008 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: rtiAssistantServer.h,v $ $Revision: 1.48 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00009 #ifndef rtiAssistantServer_H_ 00010 #define rtiAssistantServer_H_ 00011 00015 00016 #include <rtiMsConfig.h> 00017 00018 #include <map> 00019 00020 #include <vlutil/vlBaseMsg.h> 00021 #include <vlutil/vlUtil.h> 00022 #include <vlutil/vlTime.h> 00023 #include <vlutil/vlPrint.h> 00024 00025 #include "assistantDefaultMsgFact.h" 00026 #include "assistantMsgCbMgr.h" 00027 #include "assistantConnectionInfo.h" 00028 #include "assistantConnectionConfigurationInfo.h" 00029 00031 typedef void (*DtAssistantSocketAdditionCb)(int compId, void* usr); 00032 typedef void (*DtAssistantSocketRemovalCb)(int compId, const MAKRti::DtString& reason, void* usr); 00033 class DtAssistantSocketAdditionCbInfo; 00034 class DtAssistantSocketRemovalCbInfo; 00035 typedef std::list<DtAssistantSocketAdditionCbInfo*> DtAssistantSocketAdditionCallbackList; 00036 typedef std::list<DtAssistantSocketRemovalCbInfo*> DtAssistantSocketRemovalCallbackList; 00037 00038 class DtTcpMsgSocketMgr; 00039 class DtTcpMsgSocket; 00040 00047 class DT_DLL_ASSISTANT DtRtiAssistantServer 00048 { 00049 00050 public: 00052 DtRtiAssistantServer( DtNotifyLevelType level , 00053 int port = DtASSISTANT_DEFAULT_PORT, 00054 const MAKRti::DtInetAddr& networkInterface = MAKRti::DtInetAddr() ); 00055 00057 virtual ~DtRtiAssistantServer(); 00058 00059 public: 00060 00062 bool isOk() const; 00063 00066 virtual void addMsgCallback(DtAssistantMsgKind msgKind, DtAssistantMsgCbMgr::DtCallbackFcn fcn, 00067 void *usr ); 00068 virtual void removeMsgCallback(DtAssistantMsgKind msgKind, DtAssistantMsgCbMgr::DtCallbackFcn fcn, 00069 void *usr ); 00070 virtual void addWildcardMsgCallback(DtAssistantMsgCbMgr::DtCallbackFcn fcn, 00071 void *usr ); 00072 virtual void removeWildcardMsgCallback(DtAssistantMsgCbMgr::DtCallbackFcn fcn, 00073 void *usr ); 00074 00077 virtual void addSocketAdditionCallback(DtAssistantSocketAdditionCb cb, void* usr); 00078 virtual void removeSocketAdditionCallback(DtAssistantSocketAdditionCb cb, void* usr); 00079 virtual void addSocketRemovalCallback(DtAssistantSocketRemovalCb cb, void* usr); 00080 virtual void removeSocketRemovalCallback(DtAssistantSocketRemovalCb cb, void* usr); 00081 00084 virtual bool tick( unsigned int timeout = 0 ); 00085 00087 virtual unsigned int numConnections() const; 00088 00090 virtual void sendMsgOnConn( int compId, const DtAssistantMsg& msg ); 00091 00093 virtual void sendBroadcast( const DtAssistantMsg& msg ); 00094 00096 virtual void sendConnMsg( int compId, bool disconnect = false, 00097 const MAKRti::DtString& display = MAKRti::DtString::nullString() ); 00098 00100 virtual void sendConnRespMsg( int compId, const DtRtiConnectionInfoDataPair& conn, 00101 const DtRtiConnectionConfigurationInfo& config, bool accepted ); 00102 00104 virtual void sendLicRespMsg( int compId, bool runUnlicensed, 00105 const MAKRti::DtString& server, int port, bool accepted ); 00106 00108 virtual void sendAssistantCommandResponseMsg( 00109 int compId, const MAKRti::DtString& formattedData ); 00110 00112 virtual void sendNtfyLvlUpdateMsg( int compId, DtNotifyLevelType notifyLevel ); 00113 00116 virtual void sendLatencyTestRequestMsg( int compId, bool runTest, bool continuous, 00117 bool shouldHalt, bool observing, unsigned int interactionPeriod, 00118 unsigned int numInteractions, unsigned int payloadBytes, 00119 unsigned long federationHandle = 0, 00120 unsigned long initFedHandle = 0 ); 00121 00124 virtual void sendNetworkTestEnableMsg( int compId, int federationHdl, bool enable ); 00125 00127 virtual void sendLogEnableMsg( int compId, bool enable ); 00128 00131 virtual void sendObserveRtiexecMsg( int compId, bool isObserved, 00132 unsigned int timeStateIntervalMs ); 00133 00136 virtual void sendObserveRtiexecLogMsg( int connId, bool isObserved ); 00137 00140 virtual void sendObserveRtiForwarderMsg( int compId, bool isObserved, 00141 unsigned int timeStateIntervalMs, int defunctRemovalTime ); 00142 00145 virtual void sendSingleObserveRtiExecMsg( int compId ); 00146 00149 virtual void sendSingleObserveForwarderMsg( int compId ); 00150 00152 virtual void sendFederateResignMsg( int compId, int federationHdl, int federateHdl ); 00153 00155 virtual void sendFederationDestroyMsg( int compId, int federationHdl ); 00156 00158 virtual void sendDeleteFederateMsg( int compId, DtU16 fedexHandle, DtU16 fedHandle ); 00159 00161 virtual void sendRidParamsRequestMsg( int compId ); 00162 00165 virtual void sendLogRequestMsg( int compId, unsigned maxLogSize ); 00166 00169 virtual void sendExitMsg( int compId = -1 ); 00170 00173 virtual void sendDoNotWaitForForwardersMsg( int compId ); 00174 00177 virtual void forwardMsg( const DtAssistantMsg& msg ); 00178 00180 virtual void sendSignalTickIntervalMsg( int compId, float signalTickInterval ); 00181 00184 virtual int currentCompId() const; 00185 00187 virtual void closeConn( int compId ); 00188 00190 virtual int port() const; 00191 00193 virtual DtU32 maxMsgSize() const; 00194 00196 static void tcpSocketAdditionCb( DtTcpMsgSocket* sock, void* usr ); 00197 static void tcpSocketRemovalCb( DtTcpMsgSocket* sock, void* usr ); 00198 00199 #ifdef DtDIAGNOSTIC 00200 00201 void enableMsgDiagnostics( bool enable ); 00202 00203 #endif 00204 00205 protected: 00206 00208 virtual void sendMsg( DtTcpMsgSocket* sock, const DtAssistantMsg& msg ); 00209 00211 virtual void testConnections(); 00212 00215 virtual bool readAndProcess( DtTime maxTimePerSocket ); 00216 00218 virtual void tcpSocketAdditionCb( DtTcpMsgSocket* sock ); 00219 virtual void tcpSocketRemovalCb( DtTcpMsgSocket* sock ); 00220 00222 virtual std::auto_ptr<DtAssistantMsg> netRead( DtTcpMsgSocket* sock, int *retCode) const; 00223 00225 virtual void setMsgFactory(DtAssistantMessageFactory* fact); 00226 virtual DtAssistantMessageFactory* msgFactory() const; 00227 00228 private: 00230 DtRtiAssistantServer( const DtRtiAssistantServer& ); 00231 DtRtiAssistantServer& operator=( const DtRtiAssistantServer& ); 00232 00233 protected: 00234 00236 typedef std::map< int, DtTcpMsgSocket* > CompIdToSocketMap; 00237 typedef std::map< DtTcpMsgSocket*, int > SocketToCompIdMap; 00238 00240 SocketToCompIdMap myIdsByConnection; 00241 00243 CompIdToSocketMap myConnectionsById; 00244 00246 int myNextCompId; 00247 00249 DtAssistantMessageFactory* myMessageFactory; 00250 00252 DtAssistantDfltMsgFactory myDefaultMessageFactory; 00253 00256 DtTcpMsgSocket* myCurrentSocket; 00257 00259 unsigned int myPort; 00260 00262 DtClock myClock; 00263 00265 DtTime myConnTestInterval; 00266 00268 DtTime myTimeToTestConnections; 00269 00271 std::auto_ptr<DtTcpMsgSocketMgr> mySocketMgr; 00272 00274 std::list< DtTcpMsgSocket* > mySocketsToDisconnect; 00275 00277 DtAssistantMsgCbMgr myMsgCbMgr; 00278 00280 std::map<int, MAKRti::DtString> myDisconnectReasons; 00281 00283 DtAssistantSocketAdditionCallbackList myAdditionCallbacks; 00284 DtAssistantSocketRemovalCallbackList myRemovalCallbacks; 00285 00287 unsigned myNumMsgsSent; 00288 00290 unsigned myNumMsgsReceived; 00291 00292 #ifdef DtDIAGNOSTIC 00293 bool myDiagnosticsEnabled; 00294 #endif 00295 }; 00296 00297 00298 #endif