X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcommunicator.h;h=8530db128d26c5d168d99fb0af34e7c874484ffc;hb=21c596567e3b6fd794ed6af73d304ce2bc70e58f;hp=4bd5409c72587dfc9dbe9b98e43e04b0bbdf5d27;hpb=a81c41acd873cda7f40bca634782230d9e57dc4f;p=libs%2Fnet.git diff --git a/source/communicator.h b/source/communicator.h index 4bd5409..8530db1 100644 --- a/source/communicator.h +++ b/source/communicator.h @@ -7,6 +7,14 @@ 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: @@ -22,6 +30,7 @@ private: char *in_begin; char *in_end; char *out_buf; + bool good; public: Communicator(StreamSocket &, const Protocol &, ReceiverBase &); @@ -33,8 +42,10 @@ public: template void send(const P &pkt) { + if(!good) + throw sequence_error("connection aborted"); if(handshake_status!=2) - throw InvalidState("Handshaking is not done"); + throw sequence_error("handshaking not done"); unsigned size = protocol.assemble(pkt, out_buf, buf_size); socket.write(out_buf, size); }