handler.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __FAWKES_BLACKBOARD_NETWORK_HANDLER_H_
00025 #define __FAWKES_BLACKBOARD_NETWORK_HANDLER_H_
00026
00027 #include <core/threading/thread.h>
00028 #include <netcomm/fawkes/handler.h>
00029
00030 #include <core/utils/lock_queue.h>
00031 #include <core/utils/lock_map.h>
00032 #include <list>
00033
00034 namespace fawkes {
00035
00036 class Interface;
00037 class BlackBoard;
00038 class FawkesNetworkHub;
00039 class BlackBoardNetHandlerInterfaceListener;
00040
00041 class BlackBoardNetworkHandler
00042 : public Thread,
00043 public FawkesNetworkHandler
00044 {
00045 public:
00046 BlackBoardNetworkHandler(BlackBoard *blackboard,
00047 FawkesNetworkHub *hub);
00048 ~BlackBoardNetworkHandler();
00049
00050
00051 virtual void handle_network_message(FawkesNetworkMessage *msg);
00052 virtual void client_connected(unsigned int clid);
00053 virtual void client_disconnected(unsigned int clid);
00054 virtual void loop();
00055
00056
00057 protected: virtual void run() { Thread::run(); }
00058
00059 private:
00060 void send_opensuccess(unsigned int clid, Interface *interface);
00061 void send_openfailure(unsigned int clid, unsigned int errno);
00062
00063
00064 BlackBoard *__bb;
00065 LockQueue< FawkesNetworkMessage * > __inbound_queue;
00066
00067
00068 LockMap< unsigned int, Interface * > __interfaces;
00069 LockMap< unsigned int, Interface * >::iterator __iit;
00070
00071 std::map<unsigned int, BlackBoardNetHandlerInterfaceListener *> __listeners;
00072 std::map<unsigned int, BlackBoardNetHandlerInterfaceListener *>::iterator __lit;
00073
00074
00075 LockMap<unsigned int, unsigned int > __serial_to_clid;
00076
00077
00078 LockMap< unsigned int, std::list<Interface *> > __client_interfaces;
00079 std::list<Interface *>::iterator __ciit;
00080
00081 FawkesNetworkHub *__nhub;
00082 };
00083
00084 }
00085
00086 #endif