]> git.tdb.fi Git - libs/net.git/blobdiff - source/communicator.h
Add an overload for resolve that takes host and service separately
[libs/net.git] / source / communicator.h
index 144f87210f40911e097114b14a86e35479d2a0ea..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,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<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);
        }