![]() |
VR-Link API Documentation for HLA Evolved
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00009 00010 #ifndef tMessageInterface_H_ 00011 #define tMessageInterface_H_ 00012 00013 #if DtTENA 00014 00015 #include "tExerciseConn.h" 00016 #include <vlutil/vlMachineTypes.h> 00017 00018 class DtInteraction; 00019 00024 class DT_DLL_VL DtMessageInterface 00025 { 00026 public: 00028 DtMessageInterface(); 00029 00031 virtual ~DtMessageInterface(); 00032 00035 virtual void send(const DtInteraction& inter, DtExerciseConn& exConn) const = 0; 00036 00040 virtual void addCallback(DtExerciseConn* conn, void* usr) = 0; 00041 00045 virtual void removeCallback(DtExerciseConn* conn, void* usr) = 0; 00046 00049 virtual void setSendDelayTime(double delayTimeInSeconds); 00050 00052 virtual double sendDelayTime() const; 00053 00054 protected: 00055 double mySendDelayTime; 00056 }; 00057 00061 #define DtDEFINE_MSG_CALLBACKINFO(localName) \ 00062 class localName##MessageCallbackInfo \ 00063 { \ 00064 public: \ 00065 localName##MessageCallbackInfo(DtExerciseConn* exConn, \ 00066 localName##Interface* iface) : \ 00067 myExConn(exConn), \ 00068 myInterface(iface) { } \ 00069 \ 00070 DtExerciseConn* exConn() { return myExConn;} \ 00071 localName##Interface* interface() { return myInterface;} \ 00072 protected: \ 00073 DtExerciseConn* myExConn; \ 00074 localName##Interface* myInterface; \ 00075 }; \ 00076 typedef DCT::Utils::SmartPtr<localName##MessageCallbackInfo> \ 00077 localName##MessageCallbackInfoPtr; 00078 00082 #define DtDEFINE_MESSAGE_CALLBACK(localName, omNamespace) \ 00083 class localName##MessageCallback : \ 00084 public virtual TENA::Middleware::Callback::Callback \ 00085 { \ 00086 public: \ 00087 localName##MessageCallback( const omNamespace::Pointer& message, \ 00088 const localName##MessageCallbackInfoPtr& callbackInfo) : \ 00089 myCallbackInfo(callbackInfo), \ 00090 myMessage(message) { } \ 00091 \ 00092 virtual ~localName##MessageCallback() {} \ 00093 \ 00094 virtual void execute() \ 00095 { \ 00096 localName##Interaction* interaction = \ 00097 static_cast<localName##Interaction*>(localName##Interaction::create()); \ 00098 localName##Interface::decode(myMessage, interaction); \ 00099 myCallbackInfo->exConn()->applyInteractionCallback(interaction->name(), \ 00100 interaction); \ 00101 myCallbackInfo->exConn()->incrementNumberOfMessagesProcessed(); \ 00102 delete interaction; \ 00103 } \ 00104 protected: \ 00105 localName##MessageCallbackInfoPtr myCallbackInfo; \ 00106 omNamespace::Pointer myMessage; \ 00107 }; 00108 00112 #define DtDEFINE_MESSAGE_CALLBACK_FACTORY(localName, omNamespace) \ 00113 class localName##MessageCallbackFactory : \ 00114 public virtual omNamespace::MessageCallbackFactory \ 00115 { \ 00116 public: \ 00117 localName##MessageCallbackFactory( \ 00118 const localName##MessageCallbackInfoPtr& cbInfo) : \ 00119 myCallbackInfo(cbInfo) { } \ 00120 \ 00121 virtual ~localName##MessageCallbackFactory() { } \ 00122 \ 00123 virtual std::auto_ptr<TENA::Middleware::Callback::Callback> \ 00124 create(const omNamespace::Pointer& message) \ 00125 { \ 00126 return std::auto_ptr<TENA::Middleware::Callback::Callback>( \ 00127 new localName##MessageCallback(message, myCallbackInfo)); \ 00128 } \ 00129 protected: \ 00130 localName##MessageCallbackInfoPtr myCallbackInfo; \ 00131 }; 00132 00136 #define DtDEFINE_MESSAGE_SUB_INFO(localName, omNamespace) \ 00137 class localName##SubscriptionInfo : public omNamespace::SubscriptionInfo \ 00138 { \ 00139 public: \ 00140 localName##SubscriptionInfo(const localName##MessageCallbackInfoPtr& cbInfo): \ 00141 omNamespace::SubscriptionInfo( \ 00142 omNamespace::MessageCallbackFactoryPtr( \ 00143 new localName##MessageCallbackFactory(cbInfo))) { } \ 00144 \ 00145 virtual ~localName##SubscriptionInfo() { } \ 00146 }; 00147 00148 #endif 00149 #endif 00150