00001 #ifndef EVF_MODULE_WEB_REGISTRY_H 00002 #define EVF_MODULE_WEB_REGISTRY_H 00003 00004 #include <string> 00005 #include <map> 00006 #include <list> 00007 #include "xgi/Method.h" 00008 #include "xdata/InfoSpace.h" 00009 00010 namespace edm{ 00011 class ParameterSet; 00012 } 00013 00014 namespace xgi{ 00015 class Input; 00016 class Output; 00017 } 00018 00019 namespace xdaq{ 00020 class Application; 00021 } 00022 00023 namespace evf 00024 { 00025 namespace moduleweb { 00026 class ForkInfoObj; 00027 } 00028 class ModuleWeb; 00029 class ModuleWebRegistry 00030 { 00031 public: 00032 ModuleWebRegistry(const edm::ParameterSet &); 00033 00034 void registerWeb(std::string &name, ModuleWeb *cl) 00035 { 00036 clm_.insert(std::pair<std::string, ModuleWeb*>(name,cl)); 00037 // CAN ONLY BIND TO xdaq::Application methods... 00038 // xgi::bind(cl, func, name); 00039 } 00040 void invoke(xgi::Input *, xgi::Output *, const std::string &); 00041 void publish(xdata::InfoSpace *); 00042 void publishToXmas(xdata::InfoSpace *); 00043 bool checkWeb(const std::string &); 00044 void publishForkInfo(std::string name, moduleweb::ForkInfoObj *forkInfoObj); 00045 00046 private: 00047 typedef std::map<std::string, ModuleWeb*> dct; 00048 typedef dct::iterator idct; 00049 void openBackDoor(const std::string &, unsigned int timeout_sec = 0, bool * started = 0); 00050 void closeBackDoor(const std::string &); 00051 void clear(); 00052 dct clm_; 00053 friend class FWEPWrapper; 00054 }; 00055 } 00056 #endif 00057