|
UniSet
2.0.0
|
00001 // ----------------------------------------------------------------------------- 00002 #ifndef _MBTCPMultiSlave_H_ 00003 #define _MBTCPMultiSlave_H_ 00004 // ----------------------------------------------------------------------------- 00005 #include <map> 00006 #include "MBSlave.h" 00007 #include "modbus/ModbusTCPServer.h" 00008 // ----------------------------------------------------------------------------- 00018 // ----------------------------------------------------------------------------- 00020 class MBTCPMultiSlave: 00021 public MBSlave 00022 { 00023 public: 00024 MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, const std::string& prefix="mbs" ); 00025 virtual ~MBTCPMultiSlave(); 00026 00028 static MBTCPMultiSlave* init_mbslave( int argc, const char* const* argv, 00029 UniSetTypes::ObjectId shmID, SharedMemory* ic=0, 00030 const std::string& prefix="mbs" ); 00031 00033 static void help_print( int argc, const char* const* argv ); 00034 00035 protected: 00036 virtual void execute_tcp() override; 00037 virtual void initIterators() override; 00038 virtual bool deactivateObject() override; 00039 virtual void sigterm( int signo ) override; 00040 00041 timeout_t sessTimeout; 00042 timeout_t waitTimeout; 00043 ModbusTCPServer::Sessions sess; 00044 unsigned int sessMaxNum; 00045 00046 struct ClientInfo 00047 { 00048 ClientInfo():iaddr(""),respond_s(UniSetTypes::DefaultObjectId),invert(false), 00049 askCount(0),askcount_s(UniSetTypes::DefaultObjectId){ ptTimeout.setTiming(0); } 00050 00051 std::string iaddr; 00052 00053 UniSetTypes::ObjectId respond_s; 00054 IOController::IOStateList::iterator respond_it; 00055 bool invert; 00056 PassiveTimer ptTimeout; 00057 timeout_t tout; 00058 00059 long askCount; 00060 UniSetTypes::ObjectId askcount_s; 00061 IOController::IOStateList::iterator askcount_it; 00062 00063 inline void initIterators( SMInterface* shm ) 00064 { 00065 shm->initIterator( respond_it ); 00066 shm->initIterator( askcount_it ); 00067 } 00068 }; 00069 00070 typedef std::map<const std::string,ClientInfo> ClientsMap; 00071 ClientsMap cmap; 00072 00073 00074 UniSetTypes::ObjectId sesscount_id; 00075 IOController::IOStateList::iterator sesscount_it; 00076 }; 00077 // ----------------------------------------------------------------------------- 00078 #endif // _MBTCPMultiSlave_H_ 00079 // -----------------------------------------------------------------------------
1.7.6.1