00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUSSERVER_H
00020 #define CONEXUSSERVER_H
00021
00022 #include <set>
00023 #include <queue>
00024
00025 #include <sys/select.h>
00026 #include <pthread.h>
00027
00028 #include <sigc++/sigc++.h>
00029
00030 #include <glibmm/dispatcher.h>
00031 #include <glibmm/thread.h>
00032
00033 #include <conexus/object.h>
00034 #include <conexus/data.h>
00035
00036 namespace Conexus
00037 {
00038
00043 class Server: public Object
00044 {
00045 public:
00046 Server();
00047 virtual ~Server();
00048
00049 virtual void start(bool use_dispatcher=false);
00050 virtual void stop();
00051
00063 virtual void set_responsiveness(long r) = 0;
00064
00068 virtual long responsiveness() = 0;
00069
00070 virtual bool is_running();
00071
00072 virtual const std::string& object_type() { static std::string s("Conexus::Server"); return s; }
00073
00074 protected:
00075 pthread_t m_thread;
00076 pthread_attr_t m_thread_attr;
00077 bool m_terminate;
00078 bool m_running;
00079 Glib::Dispatcher* m_dispatcher;
00080 bool m_use_dispatcher;
00081
00082
00083 virtual void service_thread_main() = 0;
00084
00085 private:
00086 static void* service_thread_main_static_proxy(void*);
00087 void service_thread_main_proxy();
00088
00089 };
00090
00091 }
00092
00093 #endif