|
UniSet
2.0.0
|
00001 // ----------------------------------------------------------------------------- 00002 #ifndef UniExchange_H_ 00003 #define UniExchange_H_ 00004 // ----------------------------------------------------------------------------- 00005 #include <list> 00006 #include "UniXML.h" 00007 #include "IOController.h" 00008 #include "SMInterface.h" 00009 #include "SharedMemory.h" 00010 #include "PassiveTimer.h" 00011 // ----------------------------------------------------------------------------- 00034 // ----------------------------------------------------------------------------- 00035 class UniExchange: 00036 public IOController 00037 { 00038 public: 00039 UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID, 00040 SharedMemory* ic=0, const std::string& prefix="unet" ); 00041 virtual ~UniExchange(); 00042 00043 void execute(); 00044 00045 static UniExchange* init_exchange( int argc, const char* const* argv, 00046 UniSetTypes::ObjectId shmID, SharedMemory* ic=0, 00047 const std::string& prefix="unet" ); 00048 00050 static void help_print( int argc, const char** argv ); 00051 00052 virtual IOController_i::ShortMapSeq* getSensors() override; 00053 00054 protected: 00055 00056 virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override; 00057 virtual void askSensors( UniversalIO::UIOCommand cmd ); 00058 virtual void sigterm( int signo ) override; 00059 00060 xmlNode* cnode; 00061 std::string s_field; 00062 std::string s_fvalue; 00063 SMInterface* shm; 00064 00065 struct SInfo 00066 { 00067 // т.к. содержится rwmutex с запрещённым конструктором копирования 00068 // приходится здесь тоже объявлять разрешенными только операции "перемещения" 00069 SInfo( const SInfo& r ) = delete; 00070 SInfo& operator=(const SInfo& r) = delete; 00071 SInfo( SInfo&& r ) = default; 00072 SInfo& operator=(SInfo&& r) = default; 00073 00074 SInfo(): 00075 val(0), 00076 id(UniSetTypes::DefaultObjectId), 00077 type(UniversalIO::UnknownIOType) 00078 {} 00079 00080 IOController::IOStateList::iterator ioit; 00081 long val; 00082 long id; 00083 UniversalIO::IOType type; 00084 UniSetTypes::uniset_rwmutex val_lock; 00085 }; 00086 00087 typedef std::vector<SInfo> SList; 00088 00089 struct NetNodeInfo 00090 { 00091 // т.к. содержится SList в котором rwmutex с запрещённым конструктором копирования 00092 // приходится здесь тоже объявлять разрешенными только операции "перемещения" 00093 NetNodeInfo( const NetNodeInfo& r ) = delete; 00094 NetNodeInfo& operator=(const NetNodeInfo& r) = delete; 00095 NetNodeInfo( NetNodeInfo&& r ) = default; 00096 NetNodeInfo& operator=(NetNodeInfo&& r) = default; 00097 00098 NetNodeInfo(); 00099 00100 CORBA::Object_var oref; 00101 IOController_i_var shm; 00102 UniSetTypes::ObjectId id; 00103 UniSetTypes::ObjectId node; 00104 UniSetTypes::ObjectId sidConnection; 00105 IOController::IOStateList::iterator conn_it; 00106 SList smap; 00107 00108 void update(IOController_i::ShortMapSeq_var& map, SMInterface* shm ); 00109 }; 00110 00111 typedef std::list<NetNodeInfo> NetNodeList; 00112 NetNodeList nlst; 00113 00114 void readConfiguration(); 00115 bool readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterator& it, xmlNode* sec ); 00116 bool initItem( UniXML::iterator& it ); 00117 void updateLocalData(); 00118 void initIterators(); 00119 00120 int polltime; 00121 PassiveTimer ptUpdate; 00122 bool init_ok; 00123 00124 SList mymap; 00125 size_t maxIndex; 00126 int smReadyTimeout; 00127 00128 private: 00129 }; 00130 // ----------------------------------------------------------------------------- 00131 #endif // UniExchange_H_
1.7.6.1