/* * The Unix Channel * * by Michel Beaudouin-Lafon * * Copyright 1990-1997 * Laboratoire de Recherche en Informatique (LRI) * * Message streams * * $Id$ * $CurLog$ */ #ifndef MsgStream_H_ #define MsgStream_H_ #include "BufStream.h" class UchMessage; class UchMsgStream : public UchBufStream { protected: enum STATE { WAITING, GOT_TYPE, GOT_LENGTH, DONE}; enum TYPE { MSG = 1, ASK, ANS, SYNC, ASYNC, OK }; STATE State; bool BufferedMessages; UchMsgBuffer Buffered; bool WaitingReply; int InLength; byte InType; UchMessage* Process (UchMsgBuffer&, bool); UchMsgStream (const UchMsgStream&); void WriteMsg (UchMessage&); bool ReadMsg (UchMessage&); public: UchMsgStream (UchAddress* = 0, UchAddress* = 0); ~UchMsgStream (); void HandleRead (); virtual UchMessage* DecodeMessage (UchMsgBuffer&); virtual UchMessage* DecodeAnswer (UchMsgBuffer&); void Send (UchMessage&, bool = false); UchMessage* Ask (UchMessage&); void Reply (UchMessage&); void Send (UchMsgBuffer&, bool = false); }; #endif /* MsgStream_H_ */