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"
40 void run(
const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr,
bool thread =
false );
42 virtual bool isActive()
const override;
44 void setMaxSessions(
size_t num );
45 inline size_t getMaxSessions()
52 inline timeout_t getSessionTimeout()
60 inline void setIgnoreAddrMode(
bool st )
64 inline bool getIgnoreAddrMode()
69 virtual void terminate();
74 SessionInfo(
const std::string& a,
unsigned int ask ): iaddr(a), askCount(ask) {}
77 unsigned int askCount;
80 typedef std::list<SessionInfo> Sessions;
82 void getSessions( Sessions& lst );
84 inline std::string getInetAddress()
88 inline int getInetPort()
100 typedef sigc::signal<void> TimerSignal;
101 TimerSignal signal_timer();
103 void setTimer( timeout_t msec );
104 inline timeout_t getTimer()
112 virtual void iowait( timeout_t msec )
override;
115 virtual ModbusRTU::mbErrCode
realReceive(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout )
override;
117 virtual void evprepare()
override;
118 virtual void evfinish()
override;
120 virtual void ioAccept(ev::io& watcher,
int revents);
121 void onTimer( ev::timer& t,
int revents );
123 void sessionFinished(
const ModbusTCPSession* s );
125 virtual size_t getNextData(
unsigned char* buf,
int len )
override
130 virtual ModbusRTU::mbErrCode sendData(
unsigned char* buf,
int len )
override
132 return ModbusRTU::erHardwareError;
141 std::queue<unsigned char> qrecv;
142 ModbusRTU::ADUHeader curQueryHeader;
145 typedef std::list<std::shared_ptr<ModbusTCPSession>> SessionList;
148 bool ignoreAddr = {
false };
150 size_t maxSessions = { 100 };
151 size_t sessCount = { 0 };
153 timeout_t sessTimeout = { 10000 };
157 std::shared_ptr<UTCPSocket> sock;
159 const std::unordered_set<ModbusRTU::ModbusAddr>* vmbaddr = {
nullptr };
160 TimerSignal m_timer_signal;
163 double tmTime = { 0.0 };
169 void postReceiveEvent( ModbusRTU::mbErrCode res );
170 ModbusRTU::mbErrCode preReceiveEvent(
const std::unordered_set<ModbusRTU::ModbusAddr> vaddr, timeout_t tout );
175 #endif // ModbusTCPServer_H_
size_t getCountSessions()
Definition: ModbusTCPServer.cc:74
Definition: CallbackTimer.h:29
Definition: ModbusTCPServer.h:72
virtual void setChannelTimeout(timeout_t msec) override
Definition: ModbusTCPServer.h:136
void setSessionTimeout(timeout_t msec)
Definition: ModbusTCPServer.cc:79
virtual ModbusRTU::mbErrCode realReceive(const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, timeout_t msecTimeout) override
Definition: ModbusTCPServer.cc:320
Definition: ModbusServer.h:33
virtual size_t getNextData(unsigned char *buf, int len) override
Definition: ModbusTCPServer.h:125
The EventLoopServer class Реализация общей части всех процессов использующих libev. Содержит свой (динамический) eventloop;.
Definition: EventLoopServer.h:16
void run(const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr, bool thread=false)
Definition: ModbusTCPServer.cc:84
Definition: ModbusTCPServer.h:29
static const timeout_t WaitUpTime
Definition: PassiveTimer.h:69