19 #ifndef STREAMSOCKET_H_ 20 #define STREAMSOCKET_H_ 22 #include <Atlas/Objects/ObjectsFwd.h> 23 #include <Atlas/Negotiate.h> 25 #include <boost/asio.hpp> 26 #include <boost/noncopyable.hpp> 53 class StreamSocket:
public std::enable_shared_from_this<StreamSocket>,
private boost::noncopyable
89 const std::string& client_name, Atlas::Bridge& bridge,
105 Atlas::Codec& getCodec();
112 Atlas::Objects::ObjectsEncoder& getEncoder();
117 virtual void write() = 0;
121 read_buffer_size = 2048
123 boost::asio::io_service& m_io_service;
124 Atlas::Bridge& _bridge;
164 Atlas::Net::StreamConnect*
_sc;
165 boost::asio::deadline_timer _negotiateTimer;
166 boost::asio::deadline_timer _connectTimer;
167 Atlas::Codec* m_codec;
168 Atlas::Objects::ObjectsEncoder * m_encoder;
171 virtual void do_read() = 0;
172 virtual void negotiate_read() = 0;
173 void startNegotiation();
174 Atlas::Negotiate::State negotiate();
181 template<
typename ProtocolT>
186 const std::string& client_name, Atlas::Bridge& bridge,
189 void connect(
const typename ProtocolT::endpoint& endpoint);
190 virtual void write();
191 typename ProtocolT::socket& getAsioSocket();
193 typename ProtocolT::socket m_socket;
194 virtual void negotiate_read();
195 void negotiate_write();
196 virtual void do_read();
202 template<
typename ProtocolT>
207 const std::string& client_name, Atlas::Bridge& bridge,
209 void connectWithQuery(
const typename ProtocolT::resolver::query& query);
211 typename ProtocolT::resolver m_resolver;
boost::asio::streambuf mReadBuffer
Buffer for data being read from the socket.
Definition: StreamSocket.h:142
finished disconnection
Definition: StreamSocket.h:68
connection fully established
Definition: StreamSocket.h:66
bool mShouldSend
True if we should send again as soon as an ongoing async_write operation completes.
Definition: StreamSocket.h:157
Handles the internal socket instance, interacting with the asynchronous io_service calls...
Definition: StreamSocket.h:53
stream / socket connection in progress
Definition: StreamSocket.h:60
Atlas::Net::StreamConnect * _sc
negotiation object (NULL after connection!)
Definition: StreamSocket.h:164
failure when trying to establish a connection
Definition: StreamSocket.h:62
Methods that are used as callbacks.
Definition: StreamSocket.h:75
Every Eris class and type lives inside the Eris namespace; certain utility functions live in the Util...
Definition: Account.cpp:34
connection failed
Definition: StreamSocket.h:67
boost::asio::streambuf * mWriteBuffer
Buffer used to write data to be sent.
Definition: StreamSocket.h:131
std::ostream mOutStream
Stream for data being sent out.
Definition: StreamSocket.h:152
Template specialization which uses boost::asio sockets.
Definition: StreamSocket.h:182
std::istream mInStream
Stream for data being received.
Definition: StreamSocket.h:147
Template specialization which uses boost::asio sockets with resolvers (i.e.
Definition: StreamSocket.h:203
bool mIsSending
True if we're currently sending through an async_write (and thus shouldn't touch mSendBuffer).
Definition: StreamSocket.h:162
std::function< void(Status)> stateChanged
Called when the internal state has changed.
Definition: StreamSocket.h:85
boost::asio::streambuf * mSendBuffer
Buffer of data which is being sent.
Definition: StreamSocket.h:137
std::function< void()> dispatch
Called when operations have arrived and needs dispatching.
Definition: StreamSocket.h:80
failure when negotiating
Definition: StreamSocket.h:65
timeout when trying to establish a connection
Definition: StreamSocket.h:61
Status
Definition: StreamSocket.h:57
timeout when negotiating
Definition: StreamSocket.h:64
Definition: BaseConnection.h:18
Atlas negotiation in progress.
Definition: StreamSocket.h:63