From ba066c34dde204aa192d03a23a81356374d93731 Mon Sep 17 00:00:00 2001 From: chatty Date: Wed, 7 Apr 1993 11:50:31 +0000 Subject: Initial revision --- comm/OLD/TextStream.h | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 comm/OLD/TextStream.h (limited to 'comm/OLD/TextStream.h') diff --git a/comm/OLD/TextStream.h b/comm/OLD/TextStream.h new file mode 100644 index 0000000..cb43fe3 --- /dev/null +++ b/comm/OLD/TextStream.h @@ -0,0 +1,157 @@ +/* + * The Unix Channel + * + * by Michel Beaudouin-Lafon + * + * Copyright 1990-1993 + * Laboratoire de Recherche en Informatique (LRI) + * + * Text streams + * + * $Id$ + * $CurLog$ + */ + +#ifndef TextStream_H_ +#define TextStream_H_ + +#include "cplus_bugs.h" +#include "Stream.h" +#include "MsgBuffer.h" +#include "ccu/String.h" + +class UchTextWord { +protected: + const char* Sval; + int Ival; +public: +inline UchTextWord () : Sval (0), Ival (0) {} +inline UchTextWord (const char* s) { SetVal (s); } +inline UchTextWord (int i) { SetVal (i); } + void SetVal (const char*); +inline void SetVal (int i) { Sval = 0; Ival = i; } +inline bool IsInt () const { return (Sval == 0) ? TRUE : FALSE; } +inline bool IsString () const { return (Sval != 0) ? TRUE : FALSE; } + const char* GetQuotes () const; +inline operator int () const { return Ival; } +inline operator const char* () const { return Sval; } +}; + + +class UchTextLine { +protected: + int Num; + int Max; + UchTextWord* Words; +void NewWord (const char* s, int i); + +public: + UchTextLine (); + ~UchTextLine (); +inline UchTextWord& operator [] (int i) const { return Words [i]; } +inline int NumWords () const { return Num; } +inline void AddWord (const char* s) { NewWord (s, 0); } +inline void AddWord (int i) { NewWord (0, i); } + void AddTrailer (const UchTextLine&, int); +inline UchTextLine& operator << (int i) { AddWord (i); return *this; } +inline UchTextLine& operator << (const char* s) { AddWord (s); return *this; } +inline UchTextLine& operator << (const UchTextLine& l) { AddTrailer (l, 0); return *this; } + bool Parse (char*); + char* Unparse (char* dest, int len) const; + char* Unparse (UchMsgBuffer*) const; + bool Match (const char*, const char* = 0) const; + int Index (const char*) const; + int Index (int) const; +inline bool Contains (const char* w) const { return (Index (w) == -1) ? FALSE : TRUE; } +inline bool Contains (int i) const { return (Index (i) == -1) ? FALSE : TRUE; } +inline void Reset () { Num = 0; } +}; + +class UchTextStream : public UchStream { +public: +enum cmd_res { + isCmdSyntax, // syntax error when parsing command + isCmdUnknown, // unknown command + isCmdOk, // request executed + isCmdError, // problem while executing request + isCmdClose, // close connection + isCmdQuit, // quit server + isCmdTerminate, // terminate multiplexer + isCmdAbort, // abort multiplexer + isCmdExit // call exit + }; +protected: + UchMsgBuffer InBuffer; + UchMsgBuffer OutBuffer; + UchMultiplexer* MyMpx; + +virtual void Closing (bool); + void AddNotify (UchMultiplexer&); + void RemoveNotify (UchMultiplexer&); + void HandleRead (); + void ProcessCmdResult (cmd_res, const UchTextLine&); + cmd_res TryPredefined (const UchTextLine&); +virtual cmd_res Execute (const UchTextLine&) = 0; +virtual void DoSend (); + +public: + UchTextStream (); + ~UchTextStream (); + UchTextStream (const UchTextStream&); + UchChannel* Copy () const; +inline UchMultiplexer* GetMultiplexer () const { return MyMpx; } +virtual void Close (); // 'close' request +virtual void Quit (); // 'quit' request +inline void Append (const char* l) { OutBuffer.Append (l, FALSE); } +inline void Append (const UchTextLine& l) { l.Unparse (&OutBuffer); OutBuffer.Append ('\n');} +inline UchTextStream& operator << (const char* l) { Append (l); return *this; } +inline UchTextStream& operator << (const UchTextLine& l) { Append (l); return *this; } +inline void Send () { DoSend (); } +inline void Send (const char* l) { Append (l); DoSend (); } +inline void Send (const UchTextLine& l) { Append (l); DoSend (); } +}; + +class UchTextService : public UchTextStream { +friend class UchServiceStarter; +public: +enum status { + isUnavailable, // address not found in port server + isError, // could not init connection + isRunning, // connection established + isLost, // no connection (auto-starting) + }; + +protected: + status StatusFlag; + UchServiceStarter* Starter; + bool Closed; + CcuString User; + CcuString Service; + CcuString Host; + + void Closing (bool); + status Restart (); + void AutoStart (int = -1, int = -1); +virtual void LostServer (); +virtual void GotServer (); +virtual void AbandonRestart (); + cmd_res Execute (const UchTextLine&); + void DoSend (); + +public: + UchTextService (const char*, const char* = 0); + UchTextService (); + ~UchTextService (); + void Init (const char*, const char* = 0); + status GetStatus () { return StatusFlag; } + int GetRetryTime (); + int GetMaxRetries (); + void Close (); // close after output buffer emptied + void CloseNow (); // close now + +}; + +// the simplest interface to a server. +extern bool TellServer (const char*, const char*, const char*); + +#endif /* TextStream_H_ */ -- cgit v1.1