]> git.tdb.fi Git - libs/net.git/blobdiff - source/communicator.h
Don't close socket on Communicator error
[libs/net.git] / source / communicator.h
index 409d42e02527c74e023a00cfbb5a691f90e8febc..8530db128d26c5d168d99fb0af34e7c874484ffc 100644 (file)
@@ -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,6 +30,7 @@ private:
        char *in_begin;
        char *in_end;
        char *out_buf;
+       bool good;
 
 public:
        Communicator(StreamSocket &, const Protocol &, ReceiverBase &);
@@ -40,9 +42,11 @@ public:
        template<typename P>
        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);
        }