WvStreams
wvstreamsdaemon.h
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 
00057 class WvStreamsDaemon : public WvDaemon
00058 {
00059 private:
00060 
00061     WvDaemonCallback callback;
00062 
00063     bool do_full_close;
00064     WvIStreamList streams;
00065 
00066     void init(WvDaemonCallback cb);
00067 
00068 protected:
00069 
00070     virtual void do_start();
00071     virtual void do_run();
00072     virtual void do_stop();
00073 
00074 private:
00075 
00076     void restart_close_cb(IWvStream *s, const char *id);
00077     void die_close_cb(IWvStream *s, const char *id);
00078 
00079 public:
00080 
00083     WvStreamsDaemon(WvStringParm name,
00084             WvStringParm version,
00085             WvDaemonCallback cb) :
00086         WvDaemon(name, version, WvDaemonCallback(),
00087                 WvDaemonCallback(), WvDaemonCallback())
00088     {
00089         init(cb);
00090     }
00091 
00095     void add_stream(IWvStream *istream,
00096                     bool auto_free, const char *id);
00102     void add_restart_stream(IWvStream *istream,
00103                             bool auto_free, const char *id);
00108     void add_die_stream(IWvStream *istream,
00109                         bool auto_free, const char *id);
00110 
00114     void close_existing_connections_on_restart()
00115     {
00116         do_full_close = true;
00117     }
00118 
00120     void setcallback(WvDaemonCallback cb);
00121 
00122 private:
00126     void add_stream(IWvStream *istream, bool auto_free, WvString id);
00127     void add_restart_stream(IWvStream *istream, bool auto_free, WvString id);
00128     void add_die_stream(IWvStream *istream, bool auto_free, WvString id);
00129 public:
00130     const char *wstype() const { return "WvStreamsDaemon"; }
00131 };
00132 #endif // __WVSTREAMSDAEMON_H