X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcommunicator.h;h=8530db128d26c5d168d99fb0af34e7c874484ffc;hb=21c596567e3b6fd794ed6af73d304ce2bc70e58f;hp=144f87210f40911e097114b14a86e35479d2a0ea;hpb=ef23ca71babc753231bb2dd197be6dd7099d9804;p=libs%2Fnet.git diff --git a/source/communicator.h b/source/communicator.h index 144f872..8530db1 100644 --- a/source/communicator.h +++ b/source/communicator.h @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmspnet -Copyright © 2009 Mikkosoft Productions, Mikko Rasa -Distributed under the LGPL -*/ - #ifndef MSP_NET_COMMUNICATOR_H_ #define MSP_NET_COMMUNICATOR_H_ @@ -14,6 +7,14 @@ Distributed under the LGPL namespace Msp { namespace Net { +class sequence_error: public std::logic_error +{ +public: + sequence_error(const std::string &w): std::logic_error(w) { } + virtual ~sequence_error() throw() { } +}; + + class Communicator { public: @@ -29,19 +30,23 @@ private: char *in_begin; char *in_end; char *out_buf; + bool good; public: Communicator(StreamSocket &, const Protocol &, ReceiverBase &); ~Communicator(); void initiate_handshake(); + 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 InvalidState("Handshaking is not done"); - unsigned size=protocol.assemble(pkt, out_buf, buf_size); + throw sequence_error("handshaking not done"); + unsigned size = protocol.assemble(pkt, out_buf, buf_size); socket.write(out_buf, size); }