: ICommunicator(&executor)
, PluginBase(executor, config, Communicator_Api_v1)
, m_running(ILM_FALSE)
+, m_iterationCounter(0)
{
MethodTable manager_methods[] =
{
mThreadId = pthread_self();
}
-bool GenericCommunicator::start()
+bool GenericCommunicator::start(int maxIterationTimeInMS)
{
+ m_maxIterationDurationInMS = maxIterationTimeInMS;
+
LOG_DEBUG("GenericCommunicator", "Starting up IpcModules.");
if (!loadIpcModule(&m_ipcModule))
LOG_DEBUG("GenericCommunicator", "Initializing IpcModule success.");
m_running = ILM_TRUE;
- pluginSetHealth(HealthRunning);
threadCreate();
threadInit();
{
m_ipcModule.destroy();
}
- pluginSetHealth(HealthStopped);
}
-void GenericCommunicator::process(int timeout_ms)
+void GenericCommunicator::process()
{
- t_ilm_message message = m_ipcModule.receive(timeout_ms);
+ ++m_iterationCounter;
+
+ t_ilm_message message = m_ipcModule.receive(m_maxIterationDurationInMS);
if (!message)
{
return;
case IpcMessageTypeNone:
break;
+ case IpcMessageTypeTimeout:
+ LOG_INFO("GenericCommunicator", "no incoming message for " << m_maxIterationDurationInMS << "ms, force wakeup for health monitoring");
+ break;
+
default:
LOG_DEBUG("GenericCommunicator", "Received unknown data from "
<< m_executor->getSenderName(senderHandle)
m_ipcModule.destroyMessage(message);
}
+
void GenericCommunicator::setdebug(bool onoff)
{
(void)onoff; // TODO: remove, only prevents warning
t_ilm_bool GenericCommunicator::threadMainLoop()
{
- process(-1);
+ process();
return ILM_TRUE;
}
+int GenericCommunicator::getIterationCounter()
+{
+ return m_iterationCounter;
+}
+
t_ilm_const_string GenericCommunicator::pluginGetName() const
{
return "GenericCommunicator";
}
}
-HealthCondition GenericCommunicator::pluginGetHealth()
-{
- HealthCondition health = PluginBase::pluginGetHealth();
- if (0 != pthread_kill(mThreadId, 0))
- {
- health = HealthDead;
- }
- return health;
-}
-
void GenericCommunicator::SetOptimizationMode(t_ilm_message message)
{
t_ilm_message response;