diff options
author | Henri Herscher <henri@oreka.org> | 2007-03-05 16:09:21 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2007-03-05 16:09:21 +0000 |
commit | 840a37d361d9db81f313ba34266e59e956374538 (patch) | |
tree | cf0c2c97ddb978cfcf81b899dfbacc418c017c33 /orkaudio | |
parent | 21074d78f6e29408cc6fb311a5fb391b6b132304 (diff) |
Introduced ReportingSkipTape command.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@426 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio')
-rw-r--r-- | orkaudio/OrkAudio.cpp | 2 | ||||
-rw-r--r-- | orkaudio/Reporting.cpp | 67 | ||||
-rw-r--r-- | orkaudio/Reporting.h | 20 |
3 files changed, 87 insertions, 2 deletions
diff --git a/orkaudio/OrkAudio.cpp b/orkaudio/OrkAudio.cpp index 689f771..45d0f54 100644 --- a/orkaudio/OrkAudio.cpp +++ b/orkaudio/OrkAudio.cpp @@ -187,6 +187,8 @@ void MainThread() ObjectFactory::GetSingleton()->RegisterObject(objRef); objRef.reset(new TcpPingMsg); ObjectFactory::GetSingleton()->RegisterObject(objRef); + objRef.reset(new ReportingSkipTapeMsg); + ObjectFactory::GetSingleton()->RegisterObject(objRef); //objRef.reset(new TestMsg); //ObjectFactory::GetSingleton()->RegisterObject(objRef); diff --git a/orkaudio/Reporting.cpp b/orkaudio/Reporting.cpp index 9bd23a9..5b0b56d 100644 --- a/orkaudio/Reporting.cpp +++ b/orkaudio/Reporting.cpp @@ -42,6 +42,7 @@ Reporting* Reporting::Instance() Reporting::Reporting() { m_queueFullError = false; + numTapesToSkip = 0; } CStdString __CDECL__ Reporting::GetName() @@ -54,6 +55,23 @@ TapeProcessorRef Reporting::Instanciate() return m_singleton; } +void __CDECL__ Reporting::SkipTapes(int number) +{ + MutexSentinel sentinel(m_mutex); + numTapesToSkip++; +} + +bool Reporting::IsSkip() +{ + MutexSentinel sentinel(m_mutex); + if(numTapesToSkip) + { + numTapesToSkip--; + return true; + } + return false; +} + void Reporting::AddAudioTape(AudioTapeRef& audioTapeRef) { if (m_audioTapeQueue.push(audioTapeRef)) @@ -84,7 +102,7 @@ void Reporting::ThreadHandler(void *args) bool stop = false; bool reportError = true; - time_t reportErrorLastTime = time(NULL); + time_t reportErrorLastTime = 0; bool error = false; for(;stop == false;) @@ -129,7 +147,7 @@ void Reporting::ThreadHandler(void *args) bool success = false; - while (!success) + while (!success && !pReporting->IsSkip()) { if (c.Execute((SyncMessage&)(*msgRef.get()), (AsyncMessage&)(*tr.get()), CONFIG.m_trackerHostname, CONFIG.m_trackerTcpPort, CONFIG.m_trackerServicename, CONFIG.m_clientTimeout)) { @@ -196,5 +214,50 @@ void Reporting::ThreadHandler(void *args) LOG4CXX_INFO(LOG.reportingLog, CStdString("Exiting thread")); } +//======================================================= +#define REPORTING_SKIP_TAPE_CLASS "reportingskiptape" + +ReportingSkipTapeMsg::ReportingSkipTapeMsg() +{ + m_number = 1; +} + + +void ReportingSkipTapeMsg::Define(Serializer* s) +{ + CStdString thisClass(REPORTING_SKIP_TAPE_CLASS); + s->StringValue(OBJECT_TYPE_TAG, thisClass, true); + s->IntValue("num", (int&)m_number, false); +} + + +CStdString ReportingSkipTapeMsg::GetClassName() +{ + return CStdString(REPORTING_SKIP_TAPE_CLASS); +} + +ObjectRef ReportingSkipTapeMsg::NewInstance() +{ + return ObjectRef(new ReportingSkipTapeMsg); +} + +ObjectRef ReportingSkipTapeMsg::Process() +{ + bool success = true; + CStdString logMsg; + + Reporting* reporting = Reporting::Instance(); + if(reporting) + { + reporting->SkipTapes(m_number); + } + + SimpleResponseMsg* msg = new SimpleResponseMsg; + ObjectRef ref(msg); + msg->m_success = success; + msg->m_comment = logMsg; + return ref; +} + diff --git a/orkaudio/Reporting.h b/orkaudio/Reporting.h index 5f5365e..237fa40 100644 --- a/orkaudio/Reporting.h +++ b/orkaudio/Reporting.h @@ -27,17 +27,37 @@ public: CStdString __CDECL__ GetName(); TapeProcessorRef __CDECL__ Instanciate(); void __CDECL__ AddAudioTape(AudioTapeRef& audioTapeRef); + void __CDECL__ SkipTapes(int number); //static Reporting* GetInstance(); static void ThreadHandler(void *args); private: Reporting(); + bool IsSkip(); + //static Reporting m_reportingSingleton; static TapeProcessorRef m_singleton; ThreadSafeQueue<AudioTapeRef> m_audioTapeQueue; bool m_queueFullError; + int numTapesToSkip; + ACE_Thread_Mutex m_mutex; +}; + +class ReportingSkipTapeMsg : public SyncMessage +{ +public: + ReportingSkipTapeMsg(); + + void Define(Serializer* s); + inline void Validate() {}; + + CStdString GetClassName(); + ObjectRef NewInstance(); + ObjectRef Process(); + + int m_number; }; #endif |