VR-Link API Documentation for DIS
tMessageInterface.h
Go to the documentation of this file.
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 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)