/* * The Unix Channel * * by Michel Beaudouin-Lafon * * Copyright 1990-1993 * Laboratoire de Recherche en Informatique (LRI) * * Servers * * $Id$ * $CurLog$ */ #ifndef Server_H_ #define Server_H_ #include "ccu/List.h" #include "MsgStream.h" #include "Multiplexer.h" #include "error.h" class UchServer; class UchClient : public UchMsgStream { friend class UchServer; protected: UchServer* MyServer; public: UchClient (const UchClient& cl); UchClient (UchServer&, int); ~UchClient (); UchChannel* Copy () const; void Delete (); inline UchServer* GetServer () { return MyServer; } }; class UchServer : public UchStream { friend class UchClient; protected: #ifndef CPLUS_BUG19 CcuListOf Clients; #else CcuList Clients; #endif public: UchServer (const UchServer&); UchServer (UchBaseMultiplexer&, UchAddress*); ~UchServer (); UchChannel* Copy () const; void HandleRead (); void RemoveClient (UchClient*); void Unlisten (); void Broadcast (UchMessage&, bool = false); void Broadcast (UchMessage&, UchClient*, bool = false); void Broadcast (UchMsgBuffer&, bool = false); void Broadcast (UchMsgBuffer&, UchClient*, bool = false); // called by HandleRead when a new client connects: must build up a client from a channel virtual UchClient* CreateClient (int); virtual void HandleRemove (UchClient*); virtual bool SysError (errtype, const char*, int = 0, int = 0); virtual void Error (errtype, const char*, const char*); }; #endif /* Server_H_ */