WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Tunnel Vision Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * High-level abstraction for creating daemon processes that do 00006 * nothing but listen on a list of WvStreams and add connections 00007 * to the global list. 00008 */ 00009 #ifndef __WVSTREAMSDAEMON_H 00010 #define __WVSTREAMSDAEMON_H 00011 00012 #include "wvdaemon.h" 00013 #include "iwvstream.h" 00014 #include "wvistreamlist.h" 00015 00030 class WvStreamsDaemon : public WvDaemon 00031 { 00032 private: 00033 00034 WvDaemonCallback callback; 00035 00036 bool do_full_close; 00037 WvIStreamList streams; 00038 00039 void init(WvDaemonCallback cb); 00040 00041 protected: 00042 00043 virtual void do_start(); 00044 virtual void do_run(); 00045 virtual void do_stop(); 00046 00047 private: 00048 00049 void restart_close_cb(IWvStream *s, const char *id); 00050 void die_close_cb(IWvStream *s, const char *id); 00051 00052 public: 00053 00056 WvStreamsDaemon(WvStringParm name, 00057 WvStringParm version, 00058 WvDaemonCallback cb) : 00059 WvDaemon(name, version, WvDaemonCallback(), 00060 WvDaemonCallback(), WvDaemonCallback()) 00061 { 00062 init(cb); 00063 } 00064 00068 void add_stream(IWvStream *istream, 00069 bool auto_free, const char *id); 00075 void add_restart_stream(IWvStream *istream, 00076 bool auto_free, const char *id); 00081 void add_die_stream(IWvStream *istream, 00082 bool auto_free, const char *id); 00083 00087 void close_existing_connections_on_restart() 00088 { 00089 do_full_close = true; 00090 } 00091 00093 void setcallback(WvDaemonCallback cb); 00094 00095 private: 00099 void add_stream(IWvStream *istream, bool auto_free, WvString id); 00100 void add_restart_stream(IWvStream *istream, bool auto_free, WvString id); 00101 void add_die_stream(IWvStream *istream, bool auto_free, WvString id); 00102 public: 00103 const char *wstype() const { return "WvStreamsDaemon"; } 00104 }; 00105 #endif // __WVSTREAMSDAEMON_H