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 #include <boost/thread.hpp> 00010 00011 #include "SctFitter/FitStrategy.h" 00012 #include "AnalysisServiceInterface.hh" 00013 #include "AnalysisArguments.h" 00014 00015 namespace SctAnalysis { 00016 class DcsInterface; 00017 class AnalysisWorkerGroup; 00018 00019 class AnalysisService : 00020 public IPCNamedObject<POA_AnalysisServiceI::AnalysisServiceInterface>, 00021 private boost::noncopyable 00022 { 00023 private: 00024 void shutdown(); 00025 public: 00026 virtual ~AnalysisService(); 00030 void run(); 00034 static void generalCallback(ISCallbackInfo* isc); 00038 static void testDataCallback(ISCallbackInfo * isc); 00042 static void scanResultCallback(ISCallbackInfo * isc); 00046 void setFitStrategy(const string& name) throw(LogicError); 00050 SctFitter::FitStrategy& getFitStrategy() const throw(LogicError); 00054 static AnalysisService& instance(); 00055 00060 static AnalysisService& initialize(AnalysisArguments args); 00065 virtual void purge() throw(); 00070 virtual void analyze(const char* testname) throw(); 00076 virtual void analyzeModule(const char* testname, 00077 const char* modulename) throw(); 00081 virtual char* status() throw(); 00085 virtual CORBA::Short busy (); 00089 virtual CORBA::Short queueLength (); 00093 DcsInterface& getDcsInterface(); 00097 const std::string getOutputISServerName(); 00101 void recover(); 00102 00103 static IPCServer& getServer() throw(); 00104 00105 protected: 00109 AnalysisWorkerGroup* workergroup; 00110 DcsInterface* dcsinterface; 00111 private: 00112 boost::recursive_mutex m_status_access ; 00113 SctFitter::FitStrategy* fitStrategy; 00114 std::auto_ptr<ISInfoReceiver> infoReceiver; 00115 static AnalysisService* service; 00116 AnalysisService(AnalysisArguments args); 00117 AnalysisArguments m_args; 00118 }; 00119 } 00120 00121 #endif //#ifndef ANALYSISSERVICE_H