Eris  1.3.19
Poll.h
00001 #ifndef ERIS_POLL_H
00002 #define ERIS_POLL_H 
00003 
00004 #include <sigc++/signal.h>
00005 
00006 // Forward declaration from skstream
00007 class basic_socket;
00008 
00009 namespace Eris {
00010 
00011 class PollData
00012 {
00013 public:
00014         PollData() {}
00015         virtual ~PollData() {}
00016 
00017         virtual bool isReady(const basic_socket*) = 0;
00018 };
00019 
00020 class Poll
00021 {
00022 public:
00023         Poll() {}
00024         virtual ~Poll() {}
00025 
00026         static const int
00027                 READ = 1,
00028                 WRITE = 2,
00029                 EXCEPT = 4,
00030                 MASK = READ | WRITE | EXCEPT;
00031         typedef int Check;
00032 
00033         virtual int maxStreams() const = 0;
00034         virtual int maxConnectingStreams() const = 0;
00035 
00036         virtual void addStream(const basic_socket*, Check = READ) = 0;
00037         virtual void changeStream(const basic_socket*, Check) = 0;
00038         virtual void removeStream(const basic_socket*) = 0;
00039 
00040         static Poll& instance();
00041         static void setInstance(Poll*);
00042 
00043         static void newTimedEvent() {new_timeout_ = true;}
00044 
00045     sigc::signal<void, PollData&> Ready;
00046 private:
00047         Poll(const Poll&);
00048         static Poll *_inst;
00049 protected:
00050         static bool new_timeout_;
00051 };
00052 
00053 } // namespace Eris
00054 
00055 #endif // ERIS_POLL_H