Refactor most of Communicator::send to be in the .cpp file
authorMikko Rasa <tdb@tdb.fi>
Sun, 9 Oct 2016 13:56:40 +0000 (16:56 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 9 Oct 2016 13:59:36 +0000 (16:59 +0300)
source/net/communicator.cpp
source/net/communicator.h

index b30a8e965c388c8457b26ae454ce6c399fe5f6fc..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)
index 5921767e6a37ada58ba91876f5a2b80a30c3c59a..af5ff58791ce1ad72a1d97c07591264927bfae64 100644 (file)
@@ -1,12 +1,14 @@
 #ifndef MSP_NET_COMMUNICATOR_H_
 #define MSP_NET_COMMUNICATOR_H_
 
+#include <sigc++/signal.h>
 #include "protocol.h"
-#include "streamsocket.h"
 
 namespace Msp {
 namespace Net {
 
+class StreamSocket;
+
 class sequence_error: public std::logic_error
 {
 public:
@@ -41,32 +43,22 @@ public:
        bool is_handshake_done() const { return handshake_status==2; }
 
        template<typename P>
-       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.serialize(pkt, out_buf, buf_size);
-               try
-               {
-                       socket.write(out_buf, size);
-               }
-               catch(const std::exception &e)
-               {
-                       good = false;
-                       if(signal_error.empty())
-                               throw;
-                       signal_error.emit(e);
-               }
-       }
+       void send(const P &);
 
 private:
+       void send_data(unsigned);
+
        void data_available();
        bool receive_packet(const Protocol &, ReceiverBase &);
        void send_handshake();
 };
 
+template<typename P>
+void Communicator::send(const P &pkt)
+{
+       send_data(protocol.serialize(pkt, out_buf, buf_size));
+}
+
 } // namespace Net
 } // namespace Msp