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 
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