summaryrefslogtreecommitdiff
path: root/orkaudio
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-03-05 16:09:21 +0000
committerHenri Herscher <henri@oreka.org>2007-03-05 16:09:21 +0000
commit840a37d361d9db81f313ba34266e59e956374538 (patch)
treecf0c2c97ddb978cfcf81b899dfbacc418c017c33 /orkaudio
parent21074d78f6e29408cc6fb311a5fb391b6b132304 (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.cpp2
-rw-r--r--orkaudio/Reporting.cpp67
-rw-r--r--orkaudio/Reporting.h20
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