00001 #ifndef ERIS_WAIT_H
00002 #define ERIS_WAIT_H
00003
00004 #include <sigc++/object.h>
00005 #include <Eris/Types.h>
00006
00007 namespace Atlas { namespace Objects {
00008 class Root;
00009 }}
00010
00011 namespace Eris
00012 {
00013
00014
00015 class Dispatcher;
00016 class Connection;
00017
00018 class WaitForBase : virtual public SigC::Object
00019 {
00020 public:
00021 WaitForBase(const Atlas::Message::Object &m, Connection *conn);
00022 virtual ~WaitForBase() {;}
00023
00024 bool isPending() const
00025 { return _pending; }
00026
00027 void fire();
00028
00031 static bool hasFired(WaitForBase *w)
00032 { return w->_pending; }
00033
00034 protected:
00035 bool _pending;
00036 Atlas::Message::Object _msg;
00037 Connection* _conn;
00038 };
00039
00040 class WaitForDispatch : public WaitForBase
00041 {
00042 public:
00043 WaitForDispatch(const Atlas::Message::Object &msg,
00044 const std::string &ppath,
00045 Dispatcher *dsp,
00046 Connection *conn);
00047
00048 WaitForDispatch(const Atlas::Objects::Root &msg,
00049 const std::string &ppath,
00050 Dispatcher *dsp,
00051 Connection *conn);
00052
00053 virtual ~WaitForDispatch();
00054
00055 protected:
00056 std::string _parentPath;
00057 Dispatcher* _dsp;
00058 };
00059
00060 class WaitForSignal : public WaitForBase
00061 {
00062 public:
00063 WaitForSignal(Signal &sig, const Atlas::Message::Object &msg, Connection *conn);
00064 virtual ~WaitForSignal();
00065 protected:
00066
00067 };
00068
00069 }
00070
00071 #endif