1 #ifndef MSP_NET_COMMUNICATOR_H_
2 #define MSP_NET_COMMUNICATOR_H_
5 #include "streamsocket.h"
10 class sequence_error: public std::logic_error
13 sequence_error(const std::string &w): std::logic_error(w) { }
14 virtual ~sequence_error() throw() { }
21 sigc::signal<void> signal_handshake_done;
22 sigc::signal<void, const std::exception &> signal_error;
26 const Protocol &protocol;
27 ReceiverBase &receiver;
37 Communicator(StreamSocket &, const Protocol &, ReceiverBase &);
40 void initiate_handshake();
41 bool is_handshake_done() const { return handshake_status==2; }
44 void send(const P &pkt)
47 throw sequence_error("connection aborted");
48 if(handshake_status!=2)
49 throw sequence_error("handshaking not done");
50 unsigned size = protocol.assemble(pkt, out_buf, buf_size);
53 socket.write(out_buf, size);
55 catch(const std::exception &e)
58 if(signal_error.empty())
65 void data_available();
66 bool receive_packet(const Protocol &, ReceiverBase &);
67 void send_handshake();