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 __PLUGIN_NET_HANDLER_H_
00025 #define __PLUGIN_NET_HANDLER_H_
00026
00027 #include <netcomm/fawkes/handler.h>
00028 #include <core/threading/thread.h>
00029 #include <core/utils/lock_queue.h>
00030 #include <core/utils/lock_list.h>
00031 #include <core/utils/lock_map.h>
00032 #include <config/change_handler.h>
00033 #include <utils/system/fam.h>
00034 #include <plugin/listener.h>
00035
00036 #include <map>
00037 #include <list>
00038 #include <string>
00039 #include <utility>
00040
00041 namespace fawkes {
00042 #if 0
00043 }
00044 #endif
00045
00046 class ThreadCollector;
00047 class FawkesNetworkHub;
00048 class Plugin;
00049 class PluginLoader;
00050 class Mutex;
00051 class PluginListMessage;
00052 class Configuration;
00053 class FamThread;
00054
00055 class PluginNetworkHandler
00056 : public fawkes::Thread,
00057 public fawkes::FawkesNetworkHandler,
00058 public fawkes::PluginManagerListener
00059 {
00060 public:
00061 PluginNetworkHandler(PluginManager *manager, FawkesNetworkHub *hub,
00062 Mutex *mutex = NULL);
00063 ~PluginNetworkHandler();
00064
00065 virtual void handle_network_message(FawkesNetworkMessage *msg);
00066 virtual void client_connected(unsigned int clid);
00067 virtual void client_disconnected(unsigned int clid);
00068
00069 virtual void loop();
00070
00071 virtual void plugin_loaded(const char *plugin_name);
00072 virtual void plugin_unloaded(const char *plugin_name);
00073
00074 private:
00075 PluginListMessage * list_avail();
00076 PluginListMessage * list_loaded();
00077 void send_load_failure(const char *plugin_name, unsigned int client_id);
00078 void send_load_success(const char *plugin_name, unsigned int client_id);
00079 void send_unload_failure(const char *plugin_name, unsigned int client_id);
00080 void send_unload_success(const char *plugin_name, unsigned int client_id);
00081 void send_loaded(const char *plugin_name);
00082 void send_unloaded(const char *plugin_name);
00083
00084 void load(const char *plugin_list, unsigned int clid);
00085 void unload(const char *plugin_list, unsigned int clid);
00086
00087
00088 protected: virtual void run() { Thread::run(); }
00089
00090 private:
00091 Mutex *__mutex;
00092
00093 PluginManager *__manager;
00094 FawkesNetworkHub *__hub;
00095
00096 LockQueue< FawkesNetworkMessage * > __inbound_queue;
00097
00098 LockList<unsigned int> __subscribers;
00099 LockList<unsigned int>::iterator __ssit;
00100 };
00101
00102 }
00103
00104 #endif