summaryrefslogtreecommitdiff
path: root/comm/OLD/TextStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'comm/OLD/TextStream.h')
-rw-r--r--comm/OLD/TextStream.h157
1 files changed, 157 insertions, 0 deletions
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_ */