|
μHAL (v2.7.9)
Part of the IPbus software repository
|
Go to the documentation of this file.
39 #ifndef _uhal_ProtocolTCP_hpp_
40 #define _uhal_ProtocolTCP_hpp_
49 #include <boost/shared_ptr.hpp>
50 #include <boost/asio/io_service.hpp>
51 #include <boost/asio/ip/tcp.hpp>
52 #include <boost/asio/deadline_timer.hpp>
53 #include <boost/chrono/system_clocks.hpp>
54 #include <boost/thread/thread.hpp>
55 #include <boost/thread/mutex.hpp>
56 #include <boost/thread/condition_variable.hpp>
83 template < typename InnerProtocol , std::
size_t nr_buffers_per_send >
84 class
TCP : public InnerProtocol
109 TCP (
const std::string& aId,
const URI& aUri );
123 virtual void Flush( );
126 virtual void dispatchExceptionHandler();
132 uint32_t getMaxSendSize();
138 uint32_t getMaxReplySize();
155 void write_callback (
const boost::system::error_code& aErrorCode , std::size_t aBytesTransferred );
169 void read_callback (
const boost::system::error_code& aErrorCode , std::size_t aBytesTransferred );
172 void CheckDeadline();
178 void NotifyConditionalVariable (
const bool& aValue );
181 void WaitOnConditionalVariable();
211 std::deque < std::pair<std::vector< boost::shared_ptr< Buffers > >, SteadyClock_t::time_point> >
mReplyQueue;
251 std::pair< std::vector< boost::shared_ptr< Buffers > >, SteadyClock_t::time_point >
mReplyBuffers;
SteadyClock_t::time_point mLastSendQueued
boost::thread mDispatchThread
The Worker thread in Multi-threaded mode.
std::pair< std::vector< boost::shared_ptr< Buffers > >, SteadyClock_t::time_point > mReplyBuffers
The buffers containing the payloads for the receive operation that's currently in progress.
boost::mutex mConditionalVariableMutex
A mutex for use by the conditional variable.
bool mFlushDone
A variable associated with the conditional variable which specifies whether all packets have been sen...
boost::asio::deadline_timer mDeadlineTimer
The mechanism for providing the time-out.
TimeIntervalStats mLSTStats
uhal::exception::exception * mAsynchronousException
A pointer to an exception object for passing exceptions from the worker thread to the main thread.
#define UHAL_DEFINE_DERIVED_EXCEPTION_CLASS(ClassName, BaseClassName, ClassDescription)
Macro for simplifying the declaration and definition of derived exception types.
std::vector< boost::shared_ptr< Buffers > > mDispatchBuffers
The buffers containing the payload for the send operation that's currently in progress.
boost::asio::ip::tcp::resolver::iterator mEndpoint
A shared pointer to a boost::asio tcp endpoint - used by the delayed (open-on-first-use) connect.
Transport protocol to transfer an IPbus buffer via TCP.
An abstract base exception class, including an interface to throw as the derived type (for passing ex...
SteadyClock_t::time_point mLastRecvQueued
bool mFlushStarted
Boolean specifying whether or not the main thread is within TCP::Flush method. Its value checked by t...
boost::asio::io_service::work mIOserviceWork
Needed when multi-threading to stop the boost::asio::io_service thinking it has nothing to do and so ...
boost::chrono::steady_clock SteadyClock_t
TimeIntervalStats mRTTStats
TimeIntervalStats mInterRecvTimeStats
uint32_t mSendByteCounter
Variable storing "number of bytes to follow" field for the TCP chunk currently being sent.
boost::condition_variable mConditionalVariable
A conditional variable for blocking the main thread until the variable with which it is associated is...
std::deque< std::pair< std::vector< boost::shared_ptr< Buffers > >, SteadyClock_t::time_point > > mReplyQueue
The list of buffers still awaiting a reply.
boost::asio::ip::tcp::socket mSocket
A shared pointer to a boost::asio tcp socket through which the operation will be performed.
TCP(const TCP &aTCP)
Copy Constructor This creates a new socket, dispatch queue, dispatch thread, etc.
TimeIntervalStats mInterSendTimeStats
uint32_t mPacketsInFlight
Counter of how many writes have been sent, for which no reply has yet been received.
boost::asio::io_service mIOservice
The boost::asio::io_service used to create the connections.
boost::mutex mTransportLayerMutex
A MutEx lock used to make sure the access functions are thread safe.
std::deque< boost::shared_ptr< Buffers > > mDispatchQueue
The list of buffers still waiting to be sent.
Struct to store a URI when parsed by boost spirit.
uint32_t mReplyByteCounter
Variable used to store "number of bytes to follow" field for the next/current TCP chunk being receive...