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:
char *in_begin;
char *in_end;
char *out_buf;
+ bool good;
public:
Communicator(StreamSocket &, const Protocol &, ReceiverBase &);
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);
}