]> git.tdb.fi Git - libs/net.git/blobdiff - source/net/communicator.cpp
Refactor most of Communicator::send to be in the .cpp file
[libs/net.git] / source / net / communicator.cpp
index 618e8b45e9e295f01fc4948ef19daecd56f51242..92279c24e642bc7c6f9c2b80eba60f69d1b9c8a2 100644 (file)
@@ -1,5 +1,6 @@
 #include <cstring>
 #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);
 }