MeVisLabToolboxReference
MeVisLab/Standard/Sources/ML/MLObjMgr/ObjMgr/mlObjMgr.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //-------------------------------------------------------------------------
00005 
00010 //-------------------------------------------------------------------------
00011 
00012 #ifndef __mlObjMgr_H
00013 #define __mlObjMgr_H
00014 
00015 #ifndef __MLObjMgrSystem_H
00016 #include "MLObjMgrSystem.h"
00017 #endif
00018 #ifndef __mlObjMgrBase_H
00019 #include "mlObjMgrBase.h"
00020 #endif
00021 #ifndef __mlObjMgrObjectContainer_H
00022 #include "mlObjMgrObjectContainer.h"
00023 #endif
00024 #ifndef __mlObjMgrEvent_H
00025 #include "mlObjMgrEvent.h"
00026 #endif
00027 #include <mlCallOnNextOpportunity.h>
00028 
00029 ML_START_NAMESPACE
00030 
00031    class ObjMgrClient;
00032 
00033 #ifdef WITH_NETCOM
00034 
00035    class omSServer;
00036    class omSClient;
00037    class omEventComm;
00038 
00039 #endif
00040 
00043    class MLOBJMGR_EXPORT ObjMgr : public ObjMgrBase
00044    {
00045       friend class ObjMgrBase;
00046       friend class ObjMgrClient;
00047 
00048 #ifdef WITH_NETCOM
00049 
00050       friend class omEventComm;
00051 
00052 #endif
00053 
00054       typedef ObjMgrBase inherited;
00055 
00057       ML_CLASS_HEADER(ObjMgr)
00058 
00059       public:
00060 
00061 #ifdef WITH_NETCOM
00062 
00064          enum NetworkModes {
00065             NET_NONE= 0,
00066             NET_SERVER,
00067             NET_CLIENT,
00068             NUM_NETWORK_MODES
00069          };
00070 
00072          static const char *NetworkModeStrings[NUM_NETWORK_MODES];
00073 
00074 #endif
00075 
00076       public:
00077 
00079          BoolField *eventLoggingFld;
00080 
00082          BoolField *eventFilterFld;
00083 
00085          BoolField *permitRecursiveNotificationFld;
00086 
00088          BoolField *clientsReceiveOwnNotifyFld;
00089 
00091          NotifyField *clearObjContainerFld;
00092 
00094          StringField *infoFileNameFld;
00095 
00097          NotifyField *saveInfoFld;
00098 
00099 #ifdef WITH_NETCOM
00100 
00102          EnumField   *netModeFld;
00103 
00105          StringField *netAddrFld;
00106 
00108          IntField    *netPortFld;
00109 
00112          BoolField *commOnlyMarkedInfoFld;
00113 
00114 #endif
00115 
00117          ObjMgr();
00118 
00120          ~ObjMgr();
00121 
00123          void  setDefaultAddressFlags(const omFlags &flags) {
00124             _defaultAddressFlags = flags;
00125          }
00127          const omFlags &getDefaultAddressFlags() const {
00128             return _defaultAddressFlags;
00129          }
00130          
00134          void  addEvent(const ObjMgrEvent &event);
00135 
00138          inline void  disableEventRecording() {
00139             _silent = true;
00140          }
00143          inline void  enableEventRecording() {
00144             _silent = false;
00145          }
00146 
00149          inline void  disableEventRecordingForSocketDistribution() {
00150             _preventSocketDistribution = true;
00151          }
00154          inline void  enableEventRecordingForSocketDistribution() {
00155             _preventSocketDistribution = false;
00156          }
00157      
00159          const omObjectContainer *getObjectContainer() const  { return _objects; }
00160 
00162          void  saveNetworkInfo(const std::string &filename);
00163 
00164       protected:
00165 
00167          virtual void activateAttachments();
00168 
00170          virtual void handleNotification(Field *field);
00171 
00173          void  addClient(ObjMgrClient *client);
00175          void  removeClient(ObjMgrClient *client);
00176 
00180          void  sendNotification(ObjMgrBase *sendingClient);
00181       
00183          void  sendNotificationOnNextOpportunity();
00184 
00186          virtual std::string getDebugComment() const {
00187             return "ObjMgr";
00188          }
00189          
00191          omObjectContainer  *_objects;
00192 
00195          MLint32 _notifyRecursionDepth;
00196      
00198          CallOnNextOpportunity  _callLater;
00199          
00200 #ifdef WITH_NETCOM
00201 
00203          omSServer  *_serverSocket;
00204          omSClient  *_clientSocket;
00205 
00206 #endif
00207 
00208       private:
00209 
00211          omFlags  _defaultAddressFlags;
00212          
00214          std::set<ObjMgrClient *>  _clientModules;
00215 
00217          omEventContainer  _events;
00218 
00220          std::list<omEventContainer>  _undoBuffer;
00221          std::list<omEventContainer>  _redoBuffer;
00222 
00225          bool  _silent;
00226      
00228          bool _preventSocketDistribution;
00229 
00231          bool  _networkInitialized;
00232 
00234          void  evalClient(std::fstream &info, ObjMgrClient *client);
00235          void  evalNetwork(std::fstream &info, const std::multimap<ObjMgrBase *, ObjMgrBase *> &graph, ObjMgrBase *current);
00237       
00238          // Callback for sendNotification without providing a sender
00239          static void sendNotificationCB(void *self);
00240    };
00241 
00242 ML_END_NAMESPACE
00243 
00244 #endif // __mlObjMgr_H