X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fnet%2Fcommunicator.cpp;h=92279c24e642bc7c6f9c2b80eba60f69d1b9c8a2;hb=400f3e031834eee9d96dbd5cda25655102b75805;hp=618e8b45e9e295f01fc4948ef19daecd56f51242;hpb=a0b7f9bcf0654a7a3f24bac95746ac587b71986b;p=libs%2Fnet.git diff --git a/source/net/communicator.cpp b/source/net/communicator.cpp index 618e8b4..92279c2 100644 --- a/source/net/communicator.cpp +++ b/source/net/communicator.cpp @@ -1,5 +1,6 @@ #include #include "communicator.h" +#include "streamsocket.h" using namespace std; @@ -82,6 +83,26 @@ void Communicator::initiate_handshake() handshake_status = 1; } +void Communicator::send_data(unsigned size) +{ + if(!good) + throw sequence_error("connection aborted"); + if(handshake_status!=2) + throw sequence_error("handshake incomplete"); + + try + { + socket.write(out_buf, size); + } + catch(const std::exception &e) + { + good = false; + if(signal_error.empty()) + throw; + signal_error.emit(e); + } +} + void Communicator::data_available() { if(!good) @@ -133,7 +154,7 @@ bool Communicator::receive_packet(const Protocol &proto, ReceiverBase &recv) { char *pkt = in_begin; in_begin += psz; - proto.disassemble(recv, pkt, psz); + proto.dispatch(recv, pkt, psz); return true; } else @@ -155,7 +176,7 @@ void Communicator::send_handshake() shake.hash = protocol.get_hash(); HandshakeProtocol hsproto; - unsigned size = hsproto.assemble(shake, out_buf, buf_size); + unsigned size = hsproto.serialize(shake, out_buf, buf_size); socket.write(out_buf, size); }