2 #ifndef ModbusTCPServer_H_ 3 #define ModbusTCPServer_H_ 8 #include <sigc++/sigc++.h> 11 #include "Configuration.h" 12 #include "PassiveTimer.h" 13 #include "ModbusTypes.h" 14 #include "ModbusServer.h" 15 #include "ModbusTCPSession.h" 16 #include "UTCPSocket.h" 17 #include "EventLoopServer.h" 41 bool run(
const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr );
46 bool async_run(
const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr );
51 virtual bool isActive()
const override;
53 void setMaxSessions(
size_t num );
54 size_t getMaxSessions()
const noexcept;
58 timeout_t getSessionTimeout()
const noexcept;
63 void setIgnoreAddrMode(
bool st );
64 bool getIgnoreAddrMode()
const noexcept;
69 SessionInfo(
const std::string& a,
size_t ask ): iaddr(a), askCount(ask) {}
75 typedef std::list<SessionInfo> Sessions;
77 void getSessions( Sessions& lst );
79 std::string getInetAddress()
const noexcept;
80 int getInetPort()
const noexcept;
83 size_t getConnectionCount()
const noexcept;
92 typedef sigc::signal<void> TimerSignal;
93 TimerSignal signal_timer();
95 void setTimer( timeout_t msec );
96 timeout_t getTimer()
const noexcept;
101 virtual void iowait( timeout_t msec )
override;
104 virtual ModbusRTU::mbErrCode
realReceive(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout )
override;
106 virtual void evprepare()
override;
107 virtual void evfinish()
override;
109 virtual void ioAccept(ev::io& watcher,
int revents);
110 void onTimer( ev::timer& t,
int revents );
114 virtual size_t getNextData(
unsigned char* buf,
int len )
override 119 virtual ModbusRTU::mbErrCode sendData(
unsigned char* buf,
int len )
override 121 return ModbusRTU::erHardwareError;
130 std::queue<unsigned char> qrecv;
134 typedef std::list<std::shared_ptr<ModbusTCPSession>> SessionList;
137 bool ignoreAddr = {
false };
139 size_t maxSessions = { 100 };
140 size_t sessCount = { 0 };
143 size_t connCount = { 0 };
145 timeout_t sessTimeout = { 10000 };
149 std::shared_ptr<UTCPSocket> sock;
151 const std::unordered_set<ModbusRTU::ModbusAddr>* vmbaddr = {
nullptr };
152 TimerSignal m_timer_signal;
155 double tmTime = { 0.0 };
161 void postReceiveEvent( ModbusRTU::mbErrCode res );
162 ModbusRTU::mbErrCode preReceiveEvent(
const std::unordered_set<ModbusRTU::ModbusAddr> vaddr, timeout_t tout );
167 #endif // ModbusTCPServer_H_ Пассивный таймер
Definition: PassiveTimer.h:92
bool run(const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr)
Definition: ModbusTCPServer.cc:104
Definition: CallbackTimer.h:29
size_t getCountSessions() const noexcept
Definition: ModbusTCPServer.cc:79
Definition: ModbusTCPServer.h:67
virtual void setChannelTimeout(timeout_t msec) override
Definition: ModbusTCPServer.h:125
virtual void terminate()
Definition: ModbusTCPServer.cc:153
void setSessionTimeout(timeout_t msec)
Definition: ModbusTCPServer.cc:94
virtual ModbusRTU::mbErrCode realReceive(const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, timeout_t msecTimeout) override
Definition: ModbusTCPServer.cc:364
The ModbusTCPSession class Класс рассчитан на совместную работу с ModbusTCPServer, т.к. построен на основе libev, и главный цикл (default_loop) находиться там.
Definition: ModbusTCPSession.h:33
Definition: ModbusServer.h:33
virtual size_t getNextData(unsigned char *buf, int len) override
Definition: ModbusTCPServer.h:114
The EventLoopServer class Реализация общей части всех процессов использующих libev. Содержит свой (динамический) eventloop;.
Definition: EventLoopServer.h:17
bool async_run(const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr)
Definition: ModbusTCPServer.cc:110
Definition: ModbusTCPServer.h:29
static const timeout_t WaitUpTime
Definition: PassiveTimer.h:69