UniSet  1.4.0
ModbusTCPServer.h
00001 // -------------------------------------------------------------------------
00002 #ifndef ModbusTCPServer_H_
00003 #define ModbusTCPServer_H_
00004 // -------------------------------------------------------------------------
00005 #include <string>
00006 #include <queue>
00007 #include <cc++/socket.h>
00008 #include "Mutex.h"
00009 #include "Debug.h"
00010 #include "Configuration.h"
00011 #include "PassiveTimer.h"
00012 #include "ModbusTypes.h"
00013 #include "ModbusServer.h"
00014 
00015 // -------------------------------------------------------------------------
00017 class ModbusTCPServer:
00018     public ModbusServer,
00019     public ost::TCPSocket
00020 {
00021     public:
00022         ModbusTCPServer( ost::InetAddress &ia, int port=502 );
00023         virtual ~ModbusTCPServer();
00024         
00025         virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout );
00026 
00027         inline void setIgnoreAddrMode( bool st ){ ignoreAddr = st; }
00028         inline bool getIgnoreAddrMode(){ return ignoreAddr; }
00029 
00030         void cleanInputStream();
00031         virtual void cleanupChannel(){ cleanInputStream(); }        
00032         
00033         virtual void terminate();
00034         
00035     protected:
00036 
00037         virtual ModbusRTU::mbErrCode pre_send_request( ModbusRTU::ModbusMessage& request );
00038 //      virtual ModbusRTU::mbErrCode post_send_request( ModbusRTU::ModbusMessage& request );
00039 
00040         // realisation (see ModbusServer.h)
00041         virtual int getNextData( unsigned char* buf, int len );
00042         virtual void setChannelTimeout( timeout_t msec );
00043         virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len );
00044 
00045         virtual ModbusRTU::mbErrCode tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAPHeader& mhead );
00046 
00047         ost::tpport_t port;
00048         ost::TCPStream tcp;
00049         ost::InetAddress iaddr;
00050         std::queue<unsigned char> qrecv;
00051         ModbusTCP::MBAPHeader curQueryHeader;
00052 
00053         bool ignoreAddr;
00054 
00055     private:
00056 
00057 };
00058 // -------------------------------------------------------------------------
00059 #endif // ModbusTCPServer_H_
00060 // -------------------------------------------------------------------------