00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __WVSTREAMSDAEMON_H
00010 #define __WVSTREAMSDAEMON_H
00011
00012 #include "wvdaemon.h"
00013 #include "iwvstream.h"
00014 #include "wvistreamlist.h"
00015
00016 class WvStreamsDaemon;
00017
00018 typedef WvCallback<void, WvStreamsDaemon &, void *> WvStreamsDaemonCallback;
00019
00061 class WvStreamsDaemon : public WvDaemon
00062 {
00063 private:
00064
00065 WvStreamsDaemonCallback callback;
00066 void *userdata;
00067
00068 bool do_full_close;
00069 WvIStreamList streams;
00070
00071 void init(WvStreamsDaemonCallback cb, void *ud);
00072
00073 protected:
00074
00075 virtual void do_start();
00076 virtual void do_run();
00077 virtual void do_stop();
00078
00079 private:
00080
00081 void restart_close_cb(const char *, WvStream &);
00082 void die_close_cb(const char *, WvStream &);
00083
00084 public:
00085
00088 WvStreamsDaemon(WvStringParm name,
00089 WvStringParm version,
00090 WvStreamsDaemonCallback cb,
00091 void *ud = NULL) :
00092 WvDaemon(name, version, WvDaemonCallback(),
00093 WvDaemonCallback(), WvDaemonCallback())
00094 {
00095 init(cb, ud);
00096 }
00097
00100 WvStreamsDaemon(WvStringParm name,
00101 WvStreamsDaemonCallback cb,
00102 void *ud = NULL) :
00103 WvDaemon(name, WvDaemonCallback(),
00104 WvDaemonCallback(), WvDaemonCallback())
00105 {
00106 init(cb, ud);
00107 }
00108
00112 void add_stream(IWvStream *istream,
00113 bool auto_free, const char *id = NULL);
00119 void add_restart_stream(IWvStream *istream,
00120 bool auto_free, const char *id = NULL);
00125 void add_die_stream(IWvStream *istream,
00126 bool auto_free, const char *id = NULL);
00127
00131 void close_existing_connections_on_restart()
00132 {
00133 do_full_close = true;
00134 }
00135
00137 void setcallback(WvStreamsDaemonCallback cb, void *ud = NULL);
00138
00139 public:
00140 const char *wstype() const { return "WvStreamsDaemon"; }
00141 };
00142 #endif // __WVSTREAMSDAEMON_H