00001 #ifndef ANALYSISSERVICE_H 00002 #define ANALYSISSERVICE_H 00003 #include <is/isinfo.h> 00004 #include <ipc/object.h> 00005 #include <ipc/server.h> 00006 00007 #include <string> 00008 #include <boost/utility.hpp> 00009 00010 #include "SctFitter/FitStrategy.h" 00011 #include "AnalysisWorkerGroup.h" 00012 #include "AnalysisServiceI.hh" 00013 00014 00015 namespace SctAnalysis { 00016 00017 class AnalysisService : public IPCObject, public virtual AnalysisServiceI_T_AnalysisServiceInterface, boost::noncopyable { 00018 public: 00019 virtual ~AnalysisService() {} 00021 void run(); 00023 static void testDataCallback(ISCallbackInfo * isc); 00025 static void scanResultCallback(ISCallbackInfo * isc); 00027 void setFitStrategy(const string& name) throw(LogicError); 00029 SctFitter::FitStrategy& getFitStrategy() const throw(LogicError); 00031 static AnalysisService& instance(); 00032 00037 static AnalysisService& initialize(const string& fitStrategyName = "RootFitStrategy"); 00038 00043 virtual void ipcPurge(AnalysisServiceIStatus* status) throw(); 00048 virtual void ipcAnalyze(AnalysisServiceIStatus* status, char* testname) throw(); 00054 virtual void ipcAnalyzeModule(AnalysisServiceIStatus* status, char* testname, 00055 char* modulename) throw(); 00059 virtual char* ipcStatus(AnalysisServiceIStatus* status) throw(); 00063 virtual char* ping(AnalysisServiceIStatus* status) throw(); 00064 00065 static IPCServer& getServer() throw(); 00066 00067 protected: 00069 AnalysisWorkerGroup* workergroup; 00070 private: 00071 SctFitter::FitStrategy* fitStrategy; 00072 static AnalysisService* service; 00073 AnalysisService(const string& fitStrategyName ); 00074 }; 00075 } 00076 00077 #endif //#ifndef ANALYSISSERVICE_H