From: Mikko Rasa Date: Sun, 9 Oct 2016 13:56:40 +0000 (+0300) Subject: Refactor most of Communicator::send to be in the .cpp file X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=400f3e031834eee9d96dbd5cda25655102b75805;p=libs%2Fnet.git Refactor most of Communicator::send to be in the .cpp file --- diff --git a/source/net/communicator.cpp b/source/net/communicator.cpp index b30a8e9..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) diff --git a/source/net/communicator.h b/source/net/communicator.h index 5921767..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: @@ -41,32 +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.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 +void Communicator::send(const P &pkt) +{ + send_data(protocol.serialize(pkt, out_buf, buf_size)); +} + } // namespace Net } // namespace Msp