00001 /* 00002 * ApiServer.h 00003 * 00004 * Created on: 24.06.2009 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef APISERVER_H_ 00009 #define APISERVER_H_ 00010 00011 #include "Component.h" 00012 #include "ClientHandler.h" 00013 #include "ibrcommon/net/tcpserver.h" 00014 #include "ibrcommon/net/NetInterface.h" 00015 #include "net/GenericServer.h" 00016 #include <ibrdtn/data/MetaBundle.h> 00017 #include <ibrcommon/thread/ThreadSafeQueue.h> 00018 00019 #include <queue> 00020 #include <list> 00021 00022 namespace dtn 00023 { 00024 namespace daemon 00025 { 00026 class ApiServer : public dtn::net::GenericServer<ClientHandler> 00027 { 00028 public: 00029 ApiServer(ibrcommon::NetInterface net, int port = 4550); 00030 virtual ~ApiServer(); 00031 00032 protected: 00033 ClientHandler* accept(); 00034 void listen(); 00035 void shutdown(); 00036 00037 void connectionUp(ClientHandler *conn); 00038 void connectionDown(ClientHandler *conn); 00039 00040 private: 00041 class Distributor : public ibrcommon::JoinableThread, public dtn::core::EventReceiver 00042 { 00043 public: 00044 Distributor(std::list<ClientHandler*> &connections, ibrcommon::Mutex &lock); 00045 ~Distributor(); 00046 00050 void run(); 00051 00055 void shutdown(); 00056 00060 void raiseEvent(const dtn::core::Event *evt); 00061 00062 private: 00063 bool _running; 00064 00065 ibrcommon::Mutex &_lock; 00066 std::list<ClientHandler*> &_connections; 00067 ibrcommon::ThreadSafeQueue<dtn::data::MetaBundle> _received; 00068 }; 00069 00070 std::list<ClientHandler*> _connections; 00071 ibrcommon::Mutex _connection_lock; 00072 ibrcommon::tcpserver _tcpsrv; 00073 Distributor _dist; 00074 }; 00075 } 00076 } 00077 00078 #endif /* APISERVER_H_ */
1.6.3