![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtDeCommunicator.h,v $ $Revision: 1.39 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #ifndef DtDeCommunicator_H_ 00014 #define DtDeCommunicator_H_ 00015 00016 #include <vrvCore/vrvCore.h> 00017 #include <vrvUtil/DtVirtualBaseClass.h> 00018 #include <vrvCore/DtDeRecord.h> 00019 #include <boost/signal.hpp> 00020 #include <list> 00021 #include <string> 00022 00023 namespace makVrv 00024 { 00025 class DtDe; 00026 class DtTcpServer; 00027 class DtMessageDispatcher; 00028 class DtDriverConfiguration; 00029 class DtIgCommunicatorSignaler; 00030 00034 class DT_DLL_VRVCORE DtDeCommunicator 00035 { 00036 public: 00037 00038 friend class DtDeCommunicatorCreator; 00039 00040 typedef std::list<DtDeRecord> IgRecords; 00041 00043 virtual ~DtDeCommunicator(); 00044 00046 virtual bool initialize(); 00047 00050 virtual void listenForMasterIg(); 00051 00053 virtual bool hasMasterIg() const; 00054 00056 virtual void disconnectMasterIg(const std::string& masterName); 00057 00061 bool connectToSlaveIg(const std::string& slaveAddr,int port, std::string& igNameOut); 00062 00064 void disconnectSlaveIg(const std::string& name); 00065 00067 virtual void tick(); 00068 00070 virtual const DtDriverConfiguration& configuration() const; 00071 00073 virtual void addIgRecord(const DtDeRecord& record); 00074 00076 virtual void removeIgRecord(const DtDeRecord& record); 00077 00080 DtDeRecord& hostIgRecord(); 00081 00083 DtDeRecord* findRecordByIgName(const std::string& igName); 00084 00086 DtDeRecord* findRecordByDisplayName(const std::string& displayName); 00087 00089 bool masterIgOnly() const; 00090 00092 const IgRecords& connectedIgs() const; 00093 00096 virtual const std::string& name() const; 00097 00100 static const char* className(); 00101 00102 protected: 00103 00105 DtDeCommunicator(DtDe& de, DtDriverConfiguration& config); 00106 00107 protected: 00108 00109 static const char* myClassName; 00110 00111 DtDe& myDe; 00112 DtDriverConfiguration& myConfiguration; 00113 std::string myName; 00114 IgRecords myIgRecords; 00115 DtTcpServer* myTcpServer; 00116 DtIgCommunicatorSignaler& mySignaler; 00117 }; 00118 00121 class DT_DLL_VRVCORE DtIgCommunicatorSignaler : public DtVirtualBaseClass 00122 { 00123 00124 public: 00125 00127 static DtIgCommunicatorSignaler& instance(DtDe& de); 00128 00130 virtual ~DtIgCommunicatorSignaler(); 00131 00133 00134 00136 boost::signal<void (const std::string&)> signal_masterIgConnected; 00137 00139 boost::signal<void (const std::string&)> signal_masterIgLost; 00140 00142 boost::signal<void (const DtDeRecord&)> signal_clientAdded; 00143 00145 boost::signal<void (const std::string&)> signal_clientToByDeleted; 00146 00148 boost::signal<void (const std::string&)> signal_clientModified; 00149 00151 00152 protected: 00153 00154 DtIgCommunicatorSignaler(); 00155 00156 }; 00157 00158 00161 class DT_DLL_VRVCORE DtDeCommunicatorCreator : public DtVirtualBaseClass 00162 { 00163 public: 00164 00166 static DtDeCommunicatorCreator& instance(DtDe&); 00167 00169 static void registerInstance(DtDe& de,DtDeCommunicatorCreator*); 00170 00172 virtual DtDeCommunicator* create(DtDe& de, DtDriverConfiguration& config); 00173 }; 00174 00175 } 00176 00177 #endif