MeVisLabToolboxReference
|
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