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