X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fcommunicator.h;h=af5ff58791ce1ad72a1d97c07591264927bfae64;hp=8530db128d26c5d168d99fb0af34e7c874484ffc;hb=400f3e031834eee9d96dbd5cda25655102b75805;hpb=50e9f9ea7f7385a2c5931fca2b8fb1103078e67c diff --git a/source/net/communicator.h b/source/net/communicator.h index 8530db1..af5ff58 100644 --- a/source/net/communicator.h +++ b/source/net/communicator.h @@ -1,12 +1,14 @@ #ifndef MSP_NET_COMMUNICATOR_H_ #define MSP_NET_COMMUNICATOR_H_ +#include #include "protocol.h" -#include "streamsocket.h" namespace Msp { namespace Net { +class StreamSocket; + class sequence_error: public std::logic_error { public: @@ -19,6 +21,7 @@ class Communicator { public: sigc::signal signal_handshake_done; + sigc::signal signal_error; private: StreamSocket &socket; @@ -40,22 +43,22 @@ public: bool is_handshake_done() const { return handshake_status==2; } template - void send(const P &pkt) - { - if(!good) - throw sequence_error("connection aborted"); - if(handshake_status!=2) - throw sequence_error("handshaking not done"); - unsigned size = protocol.assemble(pkt, out_buf, buf_size); - socket.write(out_buf, size); - } + void send(const P &); private: + void send_data(unsigned); + void data_available(); bool receive_packet(const Protocol &, ReceiverBase &); void send_handshake(); }; +template +void Communicator::send(const P &pkt) +{ + send_data(protocol.serialize(pkt, out_buf, buf_size)); +} + } // namespace Net } // namespace Msp