Commit ea80950c authored by Pavel Vainerman's avatar Pavel Vainerman

- Оптимизация обработка сообщений (правда "опасным" способом с использованием…

- Оптимизация обработка сообщений (правда "опасным" способом с использованием reinterpret_cast<>). - перенёс в UniSetObject базовые реализации функций processingMessage, sensorInfo,sysCommand,timerInfo. - исправил ошибку в IONotifyController (при водившую к SEGFAULT при интенсивном сохранении датчиков)
parent 4943179f
......@@ -107,7 +107,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
msleep( sleep_msec );
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( UniSetTypes::SensorMessage* _sm )
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm )
{
<xsl:for-each select="//sensors/item/consumers/consumer">
<xsl:if test="normalize-space(../../@msg)!='1'">
......
......@@ -125,7 +125,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm
}
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( UniSetTypes::SensorMessage* _sm )
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm )
{
sensorInfo(_sm);
}
......
......@@ -147,7 +147,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
-->
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( UniSetTypes::SensorMessage* _sm )
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm )
{
<xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@vartype)='in'">
......
......@@ -179,7 +179,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si
return 0;
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( UniSetTypes::SensorMessage* sm )
void <xsl:value-of select="$CLASSNAME"/>_SK::preSensorInfo( const UniSetTypes::SensorMessage* sm )
{
sensorInfo(sm);
}
......
......@@ -184,10 +184,10 @@
<xsl:template name="COMMON-HEAD-PROTECTED">
virtual void callback();
virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void sensorInfo( UniSetTypes::SensorMessage* sm ){}
virtual void timerInfo( UniSetTypes::TimerMessage* tm ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ){}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ){}
virtual void sigterm( int signo );
virtual bool activateObject();
virtual void testMode( bool state );
......@@ -198,8 +198,8 @@
bool checkTestMode();
</xsl:if>
void preAskSensors( UniversalIO::UIOCommand cmd );
void preSensorInfo( UniSetTypes::SensorMessage* sm );
void preTimerInfo( UniSetTypes::TimerMessage* tm );
void preSensorInfo( const UniSetTypes::SensorMessage* sm );
void preTimerInfo( const UniSetTypes::TimerMessage* tm );
void waitSM( int wait_msec, UniSetTypes::ObjectId testID = UniSetTypes::DefaultObjectId );
void resetMsg();
......@@ -260,25 +260,16 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::processingMessage( UniSetTypes::Voi
switch( _msg->type )
{
case Message::SensorInfo:
{
SensorMessage _sm( _msg );
preSensorInfo( &amp;_sm );
break;
}
preSensorInfo( reinterpret_cast&lt;SensorMessage*&gt;(_msg) );
break;
case Message::Timer:
{
TimerMessage _tm(_msg);
preTimerInfo(&amp;_tm);
break;
}
preTimerInfo( reinterpret_cast&lt;TimerMessage*&gt;(_msg) );
break;
case Message::SysCommand:
{
SystemMessage _sm( _msg );
sysCommand( &amp;_sm );
break;
}
sysCommand( reinterpret_cast&lt;SystemMessage*&gt;(_msg) );
break;
default:
break;
......@@ -290,7 +281,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::processingMessage( UniSetTypes::Voi
}
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::sysCommand( SystemMessage* _sm )
void <xsl:value-of select="$CLASSNAME"/>_SK::sysCommand( const SystemMessage* _sm )
{
switch( _sm->command )
{
......@@ -368,7 +359,7 @@ bool <xsl:value-of select="$CLASSNAME"/>_SK::activateObject()
return true;
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::preTimerInfo( UniSetTypes::TimerMessage* _tm )
void <xsl:value-of select="$CLASSNAME"/>_SK::preTimerInfo( const UniSetTypes::TimerMessage* _tm )
{
timerInfo(_tm);
}
......
......@@ -23,11 +23,11 @@ void Skel::step()
{
}
// -----------------------------------------------------------------------------
void Skel::sensorInfo( SensorMessage *sm )
void Skel::sensorInfo( const SensorMessage *sm )
{
}
// -----------------------------------------------------------------------------
void Skel::timerInfo( TimerMessage *tm )
void Skel::timerInfo( const TimerMessage *tm )
{
}
// -----------------------------------------------------------------------------
......
......@@ -8,7 +8,7 @@
Name: libuniset
Version: 2.0
Release: alt0.1
Release: alt0.2
Summary: UniSet - library for building distributed industrial control systems
......@@ -333,6 +333,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
%exclude %_pkgconfigdir/libUniSet.pc
%changelog
* Fri Jan 24 2014 Pavel Vainerman <pv@altlinux.ru> 2.0-alt0.2
- oprimization processing message (warning: use reinterpret_cast<> )
* Tue Dec 24 2013 Pavel Vainerman <pv@altlinux.ru> 2.0-alt0.1
- rename "IOTypes" --> "IOType"
- rename DigitalInput --> DI
......@@ -350,13 +353,12 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
- add iofront=[01,10] to IOBase
- remove deprecated interfaces (Storages,CycleStorage,TableStorage,TextIndex,..)
- rename unideb --> ulog
- DebugStream refactoring (add new function)
- DebugStream refactoring (add new function, add syntax sugar for ulog, dlog /dcrit,dwarn,dlog1,ulog1,ucrit,.../)
- UniversalInterface --> UInterface
- ObjectsManager --> UniSetManager
- ObjectsActitvator --> UniSetActivator
- remove deprecated property: "sensebility"
- rename property "inverse" --> "threshold_invert"
- add syntax sugar for ulog, dlog (dcrit,dwarn,dlog1,ulog1,ucrit,...)
* Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3
- add RRDServer
......
......@@ -88,24 +88,7 @@ DBServer_MySQL::~DBServer_MySQL()
}
}
//--------------------------------------------------------------------------------------------
void DBServer_MySQL::processingMessage( UniSetTypes::VoidMessage *msg )
{
switch(msg->type)
{
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
default:
DBServer::processingMessage(msg);
break;
}
}
//--------------------------------------------------------------------------------------------
void DBServer_MySQL::sysCommand( UniSetTypes::SystemMessage *sm )
void DBServer_MySQL::sysCommand( const UniSetTypes::SystemMessage *sm )
{
switch( sm->command )
{
......@@ -134,7 +117,7 @@ void DBServer_MySQL::sysCommand( UniSetTypes::SystemMessage *sm )
}
//--------------------------------------------------------------------------------------------
void DBServer_MySQL::parse( UniSetTypes::ConfirmMessage* cem )
void DBServer_MySQL::confirmInfo( const UniSetTypes::ConfirmMessage* cem )
{
try
{
......@@ -235,7 +218,7 @@ void DBServer_MySQL::flushBuffer()
}
}
//--------------------------------------------------------------------------------------------
void DBServer_MySQL::parse( UniSetTypes::SensorMessage *si )
void DBServer_MySQL::sensorInfo( const UniSetTypes::SensorMessage* si )
{
try
{
......@@ -243,7 +226,7 @@ void DBServer_MySQL::parse( UniSetTypes::SensorMessage *si )
if( !si->tm.tv_sec )
{
struct timezone tz;
gettimeofday(&si->tm,&tz);
gettimeofday( const_cast<struct timeval*>(&si->tm),&tz);
}
// см. DBTABLE AnalogSensors, DigitalSensors
......@@ -380,7 +363,7 @@ void DBServer_MySQL::createTables( DBInterface *db )
}
}
//--------------------------------------------------------------------------------------------
void DBServer_MySQL::timerInfo( UniSetTypes::TimerMessage* tm )
void DBServer_MySQL::timerInfo( const UniSetTypes::TimerMessage* tm )
{
switch( tm->id )
{
......
......@@ -147,18 +147,15 @@ class DBServer_MySQL:
virtual void initDB(DBInterface *db){};
virtual void initDBTableMap(DBTableMap& tblMap){};
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void timerInfo( UniSetTypes::TimerMessage* tm );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
// Функции обработки пришедших сообщений
virtual void parse( UniSetTypes::SensorMessage* sm );
virtual void parse( UniSetTypes::ConfirmMessage* cmsg );
virtual void timerInfo( const UniSetTypes::TimerMessage* tm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm );
virtual void confirmInfo( const UniSetTypes::ConfirmMessage* cmsg );
bool writeToBase( const string& query );
virtual void init_dbserver();
void createTables( DBInterface* db );
inline const char* tblName(int key)
{
return tblMap[key].c_str();
......
......@@ -84,25 +84,7 @@ DBServer_SQLite::~DBServer_SQLite()
}
}
//--------------------------------------------------------------------------------------------
void DBServer_SQLite::processingMessage( UniSetTypes::VoidMessage *msg )
{
DBServer::processingMessage(msg);
switch(msg->type)
{
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
default:
break;
}
}
//--------------------------------------------------------------------------------------------
void DBServer_SQLite::sysCommand( UniSetTypes::SystemMessage *sm )
void DBServer_SQLite::sysCommand( const UniSetTypes::SystemMessage *sm )
{
DBServer::sysCommand(sm);
......@@ -130,7 +112,7 @@ void DBServer_SQLite::sysCommand( UniSetTypes::SystemMessage *sm )
}
}
//--------------------------------------------------------------------------------------------
void DBServer_SQLite::parse( UniSetTypes::ConfirmMessage* cem )
void DBServer_SQLite::confirmInfo( const UniSetTypes::ConfirmMessage* cem )
{
try
{
......@@ -212,7 +194,7 @@ void DBServer_SQLite::flushBuffer()
}
}
//--------------------------------------------------------------------------------------------
void DBServer_SQLite::parse( UniSetTypes::SensorMessage *si )
void DBServer_SQLite::sensorInfo( const UniSetTypes::SensorMessage *si )
{
try
{
......@@ -220,7 +202,7 @@ void DBServer_SQLite::parse( UniSetTypes::SensorMessage *si )
if( !si->tm.tv_sec )
{
struct timezone tz;
gettimeofday(&si->tm,&tz);
gettimeofday(const_cast<struct timeval*>(&si->tm),&tz);
}
// см. DBTABLE AnalogSensors, DigitalSensors
......@@ -349,7 +331,7 @@ void DBServer_SQLite::createTables( SQLiteInterface *db )
}
}
//--------------------------------------------------------------------------------------------
void DBServer_SQLite::timerInfo( UniSetTypes::TimerMessage* tm )
void DBServer_SQLite::timerInfo( const UniSetTypes::TimerMessage* tm )
{
switch( tm->id )
{
......
......@@ -147,18 +147,15 @@ class DBServer_SQLite:
virtual void initDB( SQLiteInterface *db ){};
virtual void initDBTableMap(DBTableMap& tblMap){};
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void timerInfo( UniSetTypes::TimerMessage* tm );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
// Функции обработки пришедших сообщений
virtual void parse( UniSetTypes::SensorMessage* sm );
virtual void parse( UniSetTypes::ConfirmMessage* cmsg );
virtual void timerInfo( const UniSetTypes::TimerMessage* tm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm );
virtual void confirmInfo( const UniSetTypes::ConfirmMessage* cmsg );
bool writeToBase( const string& query );
virtual void init_dbserver();
void createTables( SQLiteInterface* db );
inline const char* tblName(int key)
{
return tblMap[key].c_str();
......
......@@ -1154,44 +1154,7 @@ void IOControl::help_print( int argc, const char* const* argv )
cout << "--prefix-sm-ready-test-sid - Использовать указанный датчик, для проверки готовности SharedMemory" << endl;
}
// -----------------------------------------------------------------------------
void IOControl::processingMessage( UniSetTypes::VoidMessage* msg )
{
try
{
switch( msg->type )
{
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo( &sm );
break;
}
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
case Message::SysCommand:
{
SystemMessage sm( msg );
sysCommand( &sm );
break;
}
default:
break;
}
}
catch(Exception& ex)
{
dcrit << myname << "(processingMessage): " << ex << endl;
}
}
// -----------------------------------------------------------------------------
void IOControl::sysCommand( SystemMessage* sm )
void IOControl::sysCommand( const SystemMessage* sm )
{
switch( sm->command )
{
......@@ -1346,7 +1309,7 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
}
}
// -----------------------------------------------------------------------------
void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
void IOControl::sensorInfo( const UniSetTypes::SensorMessage* sm )
{
dlog1 << myname << "(sensorInfo): sm->id=" << sm->id
<< " val=" << sm->value << endl;
......@@ -1451,7 +1414,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
// (так комфортнее выглядит для оператора)
if( it->ignore || it->subdev==DefaultSubdev || it->channel==DefaultChannel )
break;
ComediInterface* card = cards.getCard(it->ncard);
if( card != NULL )
......@@ -1478,7 +1441,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
}
}
// -----------------------------------------------------------------------------
void IOControl::timerInfo( UniSetTypes::TimerMessage* tm )
void IOControl::timerInfo( const UniSetTypes::TimerMessage* tm )
{
}
......
......@@ -279,16 +279,15 @@ class IOControl:
void check_testlamp();
void check_testmode();
void blink();
// действия при завершении работы
virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sensorInfo( UniSetTypes::SensorMessage* sm );
virtual void timerInfo( UniSetTypes::TimerMessage* tm );
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm );
virtual void timerInfo( const UniSetTypes::TimerMessage* tm );
virtual void sigterm( int signo );
virtual bool activateObject();
// начальная инициализация выходов
void initOutputs();
......
......@@ -88,7 +88,7 @@ void PassiveLProcessor::askSensors( UniversalIO::UIOCommand cmd )
}
}
// -------------------------------------------------------------------------
void PassiveLProcessor::sensorInfo( UniSetTypes::SensorMessage*sm )
void PassiveLProcessor::sensorInfo( const UniSetTypes::SensorMessage*sm )
{
for( EXTList::iterator it=extInputs.begin(); it!=extInputs.end(); ++it )
{
......@@ -97,13 +97,13 @@ void PassiveLProcessor::sensorInfo( UniSetTypes::SensorMessage*sm )
}
}
// -------------------------------------------------------------------------
void PassiveLProcessor::timerInfo( UniSetTypes::TimerMessage *tm )
void PassiveLProcessor::timerInfo( const UniSetTypes::TimerMessage *tm )
{
if( tm->id == tidStep )
step();
}
// -------------------------------------------------------------------------
void PassiveLProcessor::sysCommand( UniSetTypes::SystemMessage *sm )
void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm )
{
switch( sm->command )
{
......@@ -225,40 +225,3 @@ void PassiveLProcessor::sigterm( int signo )
}
}
// -------------------------------------------------------------------------
void PassiveLProcessor::processingMessage( UniSetTypes::VoidMessage* msg )
{
try
{
switch( msg->type )
{
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo( &sm );
break;
}
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
case Message::SysCommand:
{
SystemMessage sm( msg );
sysCommand( &sm );
break;
}
default:
break;
}
}
catch(Exception& ex)
{
dcrit << myname << "(processingMessage): " << ex << endl;
}
}
// -----------------------------------------------------------------------------
......@@ -33,11 +33,10 @@ class PassiveLProcessor:
virtual void getInputs();
virtual void setOuts();
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
void sysCommand( UniSetTypes::SystemMessage *msg );
void sensorInfo( UniSetTypes::SensorMessage*sm );
void timerInfo( UniSetTypes::TimerMessage *tm );
void askSensors( UniversalIO::UIOCommand cmd );
void sysCommand( const UniSetTypes::SystemMessage *msg );
void sensorInfo( const UniSetTypes::SensorMessage*sm );
void timerInfo( const UniSetTypes::TimerMessage *tm );
void askSensors( const UniversalIO::UIOCommand cmd );
// void initOutput();
// действия при завершении работы
......
......@@ -2386,53 +2386,7 @@ bool MBExchange::activateObject()
return true;
}
// ------------------------------------------------------------------------------------------
void MBExchange::processingMessage(UniSetTypes::VoidMessage *msg)
{
try
{
switch(msg->type)
{
case UniSetTypes::Message::SysCommand:
{
UniSetTypes::SystemMessage sm( msg );
sysCommand( &sm );
}
break;
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
}
break;
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo(&sm);
}
break;
default:
break;
}
}
catch( SystemError& ex )
{
dcrit << myname << "(SystemError): " << ex << std::endl;
// throw SystemError(ex);
}
catch( Exception& ex )
{
dcrit << myname << "(processingMessage): " << ex << std::endl;
}
catch(...)
{
dcrit << myname << "(processingMessage): catch ...\n";
}
}
// -----------------------------------------------------------------------------
void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
void MBExchange::sysCommand( const UniSetTypes::SystemMessage *sm )
{
switch( sm->command )
{
......@@ -2608,7 +2562,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
}
}
// ------------------------------------------------------------------------------------------
void MBExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
void MBExchange::sensorInfo( const UniSetTypes::SensorMessage* sm )
{
if( sm->id == sidExchangeMode )
{
......@@ -2653,7 +2607,7 @@ void MBExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
}
}
// ------------------------------------------------------------------------------------------
void MBExchange::timerInfo( TimerMessage *tm )
void MBExchange::timerInfo( const TimerMessage *tm )
{
if( tm->id == tmExchange )
{
......
......@@ -187,7 +187,7 @@ class MBExchange:
friend std::ostream& operator<<( std::ostream& os, RTUDeviceMap& d );
void printMap(RTUDeviceMap& d);
// ----------------------------------
static RegID genRegID( const ModbusRTU::ModbusData r, const int fn );
......@@ -197,14 +197,13 @@ class MBExchange:
};
void execute();
protected:
virtual void step();
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void sysCommand( UniSetTypes::SystemMessage *msg );
virtual void sensorInfo( UniSetTypes::SensorMessage*sm );
virtual void timerInfo( UniSetTypes::TimerMessage *tm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sysCommand( const UniSetTypes::SystemMessage *msg );
virtual void sensorInfo( const UniSetTypes::SensorMessage*sm );
virtual void timerInfo( const UniSetTypes::TimerMessage *tm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void initOutput();
virtual void sigterm( int signo );
virtual bool activateObject();
......
......@@ -53,6 +53,7 @@ pollThread(0)
if( port <= 0 )
throw UniSetTypes::SystemError(myname+"(MBMaster): Unknown inet port...(Use: " + tmp +")" );
dinfo << myname << "(init): gateway " << iaddr << ":" << port << endl;
force_disconnect = conf->getArgInt("--" + prefix + "-persistent-connection",it.getProp("persistent_connection")) ? false : true;
dinfo << myname << "(init): persisten-connection=" << (!force_disconnect) << endl;
......@@ -127,7 +128,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
return mbtcp;
}
// -----------------------------------------------------------------------------
void MBTCPMaster::sysCommand( UniSetTypes::SystemMessage *sm )
void MBTCPMaster::sysCommand( const UniSetTypes::SystemMessage *sm )
{
MBExchange::sysCommand(sm);
if( sm->command == SystemMessage::StartUp )
......
......@@ -205,7 +205,7 @@ class MBTCPMaster:
static void help_print( int argc, const char* const* argv );
protected:
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
UniSetTypes::uniset_rwmutex mbMutex;
std::string iaddr;
......
......@@ -259,7 +259,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init()
return false;
}
// -----------------------------------------------------------------------------
void MBTCPMultiMaster::sysCommand( UniSetTypes::SystemMessage *sm )
void MBTCPMultiMaster::sysCommand( const UniSetTypes::SystemMessage *sm )
{
MBExchange::sysCommand(sm);
if( sm->command == SystemMessage::StartUp )
......
......@@ -227,7 +227,7 @@ class MBTCPMultiMaster:
static void help_print( int argc, const char* const* argv );
protected:
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
virtual void initIterators();
virtual ModbusClient* initMB( bool reopen=false );
void poll_thread();
......
......@@ -8,7 +8,7 @@
--mbtcp-set-prop-prefix \
--mbtcp-filter-field rs \
--mbtcp-filter-value 5 \
--mbtcp-gateway-iaddr 127.0.0.1 \
--mbtcp-gateway-iaddr localhost \
--mbtcp-gateway-port 2048 \
--mbtcp-recv-timeout 5000 \
--mbtcp-force-disconnect 1 \
......
......@@ -529,48 +529,7 @@ void MBSlave::execute_tcp()
}
}
// -------------------------------------------------------------------------
void MBSlave::processingMessage(UniSetTypes::VoidMessage *msg)
{
try
{
switch(msg->type)
{
case UniSetTypes::Message::SysCommand:
{
UniSetTypes::SystemMessage sm( msg );
sysCommand( &sm );
}
break;
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo(&sm);
}
break;
default:
break;
}
}
catch( SystemError& ex )
{
dcrit << myname << "(SystemError): " << ex << std::endl;
// throw SystemError(ex);
raise(SIGTERM);
}
catch( Exception& ex )
{
dcrit << myname << "(processingMessage): " << ex << std::endl;
}
catch(...)
{
dcrit << myname << "(processingMessage): catch ...\n";
}
}
// -----------------------------------------------------------------------------
void MBSlave::sysCommand(UniSetTypes::SystemMessage *sm)
void MBSlave::sysCommand( const UniSetTypes::SystemMessage *sm )
{
switch( sm->command )
{
......@@ -598,7 +557,9 @@ void MBSlave::sysCommand(UniSetTypes::SystemMessage *sm)
}
if( !activated )
{
dcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
}
else
{
UniSetTypes::uniset_rwmutex_rlock l(mutex_start);
......@@ -685,7 +646,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd )
}
}
// ------------------------------------------------------------------------------------------
void MBSlave::sensorInfo( UniSetTypes::SensorMessage* sm )
void MBSlave::sensorInfo( const UniSetTypes::SensorMessage* sm )
{
IOMap::iterator it=iomap.begin();
for( ; it!=iomap.end(); ++it )
......
......@@ -138,16 +138,15 @@ class MBSlave:
SMInterface* shm;
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
void sysCommand( UniSetTypes::SystemMessage *msg );
void sensorInfo( UniSetTypes::SensorMessage* sm );
void askSensors( UniversalIO::UIOCommand cmd );
virtual void sysCommand( const UniSetTypes::SystemMessage *msg );
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm );
void askSensors( UniversalIO::UIOCommand cmd );
void waitSMReady();
void execute_rtu();
void execute_tcp();
virtual bool activateObject();
// действия при завершении работы
virtual void sigterm( int signo );
......
......@@ -273,7 +273,7 @@ void RRDServer::askSensors( UniversalIO::UIOCommand cmd )
}
}
// -----------------------------------------------------------------------------
void RRDServer::sysCommand( UniSetTypes::SystemMessage* sm )
void RRDServer::sysCommand( const UniSetTypes::SystemMessage* sm )
{
UObject_SK::sysCommand(sm);
if( sm->command == SystemMessage::StartUp || sm->command == SystemMessage::WatchDog )
......@@ -292,7 +292,7 @@ void RRDServer::sysCommand( UniSetTypes::SystemMessage* sm )
}
}
// -----------------------------------------------------------------------------
void RRDServer::sensorInfo( UniSetTypes::SensorMessage* sm )
void RRDServer::sensorInfo( const UniSetTypes::SensorMessage* sm )
{
for( RRDList::iterator it=rrdlist.begin(); it!=rrdlist.end(); ++it )
{
......@@ -304,7 +304,7 @@ void RRDServer::sensorInfo( UniSetTypes::SensorMessage* sm )
}
}
// -----------------------------------------------------------------------------
void RRDServer::timerInfo( UniSetTypes::TimerMessage* tm )
void RRDServer::timerInfo( const UniSetTypes::TimerMessage* tm )
{
for( RRDList::iterator it=rrdlist.begin(); it!=rrdlist.end(); ++it )
{
......
......@@ -74,9 +74,9 @@ class RRDServer:
RRDServer();
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sensorInfo( UniSetTypes::SensorMessage* sm );
virtual void timerInfo( UniSetTypes::TimerMessage* tm );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm );
virtual void timerInfo( const UniSetTypes::TimerMessage* tm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void initRRD( xmlNode* cnode, int tmID );
void step();
......
......@@ -134,75 +134,7 @@ SharedMemory::~SharedMemory()
}
// --------------------------------------------------------------------------------
void SharedMemory::processingMessage( UniSetTypes::VoidMessage *msg )
{
try
{
switch( msg->type )
{
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo( &sm );
break;
}
case Message::SysCommand:
{
SystemMessage sm( msg );
sysCommand( &sm );
break;
}
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
default:
break;
}
}
catch( Exception& ex )
{
dcrit << myname << "(processingMessage): " << ex << endl;
}
catch(CORBA::SystemException& ex)
{
dcrit << myname << "(processingMessage): CORBA::SystemException: " << ex.NP_minorString() << endl;
}
catch(CORBA::Exception& ex)
{
dwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
}
catch( omniORB::fatalException& fe )
{
if( dlog.is_crit() )
{
dlog.crit() << myname << "(processingMessage): Caught omniORB::fatalException:" << endl;
dlog.crit() << myname << "(processingMessage): file: " << fe.file()
<< " line: " << fe.line()
<< " mesg: " << fe.errmsg() << endl;
}
}
catch(...)
{
dcrit << myname << "(processingMessage): catch..." << endl;
}
}
// ------------------------------------------------------------------------------------------
void SharedMemory::sensorInfo( SensorMessage *sm )
{
}
// ------------------------------------------------------------------------------------------
void SharedMemory::timerInfo( TimerMessage *tm )
void SharedMemory::timerInfo( const TimerMessage *tm )
{
if( tm->id == tmHeartBeatCheck )
checkHeartBeat();
......@@ -228,8 +160,7 @@ void SharedMemory::timerInfo( TimerMessage *tm )
}
// ------------------------------------------------------------------------------------------
void SharedMemory::sysCommand( SystemMessage *sm )
void SharedMemory::sysCommand( const SystemMessage *sm )
{
switch( sm->command )
{
......@@ -237,7 +168,7 @@ void SharedMemory::sysCommand( SystemMessage *sm )
{
PassiveTimer ptAct(activateTimeout);
while( !isActivated() && !ptAct.checkTime() )
{
{
cout << myname << "(sysCommand): wait activate..." << endl;
msleep(100);
}
......@@ -258,11 +189,11 @@ void SharedMemory::sysCommand( SystemMessage *sm )
askTimer(tmPulsar,msecPulsar);
}
break;
case SystemMessage::FoldUp:
case SystemMessage::Finish:
break;
case SystemMessage::WatchDog:
break;
......
......@@ -15,7 +15,7 @@
\section sec_SM_Common Задачи решаемые объектом SharedMemory
Класс SharedMemory расширяет набор задач класса IONotifyController.
Для ознакомления с базовыми функциями см. \ref page_IONotifyController
......@@ -323,9 +323,9 @@ class SharedMemory:
long fuse_sec;
long fuse_usec;
};
friend std::ostream& operator<<( std::ostream& os, const HistoryInfo& h );
typedef std::list<HistoryInfo> History;
// т.к. могуть быть одинаковые "детонаторы" для разных "историй" то,
......@@ -338,15 +338,13 @@ class SharedMemory:
HistorySlot signal_history(); /*!< сигнал о срабатывании условий "сборса" дампа истории */
inline int getHistoryStep(){ return histSaveTime; } /*!< период между точками "дампа", мсек */
protected:
typedef std::list<Restorer_XML::ReaderSlot> ReadSlotList;
ReadSlotList lstRSlot;
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sensorInfo( UniSetTypes::SensorMessage *sm );
virtual void timerInfo( UniSetTypes::TimerMessage *tm );
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
virtual void timerInfo( const UniSetTypes::TimerMessage *tm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sendEvent( UniSetTypes::SystemMessage& sm );
......
......@@ -4,7 +4,7 @@ export LD_LIBRARY_PATH="../../lib/.libs;../lib/.libs"
ulimit -Sc 10000000000
./uniset-start.sh -f ./uniset-smemory --smemory-id SharedMemory --pulsar-id DO_C --pulsar-iotype DO \
./uniset-start.sh -g ./uniset-smemory --smemory-id SharedMemory --pulsar-id DO_C --pulsar-iotype DO \
--confile test.xml --datfile test.xml \
--unideb-add-levels info,crit,warn,level9,system \
--dlog-add-levels info,crit,warn \
......
......@@ -391,7 +391,7 @@ void UNetExchange::waitSMReady()
}
}
// -----------------------------------------------------------------------------
void UNetExchange::timerInfo( TimerMessage *tm )
void UNetExchange::timerInfo( const TimerMessage *tm )
{
if( !activated )
return;
......@@ -460,53 +460,7 @@ void UNetExchange::ReceiverInfo::step( SMInterface* shm, const std::string& myna
}
}
// -----------------------------------------------------------------------------
void UNetExchange::processingMessage( UniSetTypes::VoidMessage *msg )
{
try
{
switch(msg->type)
{
case UniSetTypes::Message::SysCommand:
{
UniSetTypes::SystemMessage sm( msg );
sysCommand( &sm );
}
break;
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo(&sm);
}
break;
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
}
break;
default:
break;
}
}
catch( SystemError& ex )
{
dcrit << myname << "(SystemError): " << ex << std::endl;
raise(SIGTERM);
}
catch( Exception& ex )
{
dcrit << myname << "(processingMessage): " << ex << std::endl;
}
catch(...)
{
dcrit << myname << "(processingMessage): catch ..." << std::endl;
}
}
// -----------------------------------------------------------------------------
void UNetExchange::sysCommand( UniSetTypes::SystemMessage *sm )
void UNetExchange::sysCommand( const UniSetTypes::SystemMessage *sm )
{
switch( sm->command )
{
......@@ -608,7 +562,7 @@ void UNetExchange::askSensors( UniversalIO::UIOCommand cmd )
sender2->askSensors(cmd);
}
// ------------------------------------------------------------------------------------------
void UNetExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
void UNetExchange::sensorInfo( const UniSetTypes::SensorMessage* sm )
{
if( sender )
sender->updateSensor( sm->id , sm->value );
......
......@@ -100,16 +100,15 @@ class UNetExchange:
SMInterface* shm;
void step();
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
void sysCommand( UniSetTypes::SystemMessage *msg );
void sensorInfo( UniSetTypes::SensorMessage*sm );
void timerInfo( UniSetTypes::TimerMessage *tm );
void sysCommand( const UniSetTypes::SystemMessage *msg );
void sensorInfo( const UniSetTypes::SensorMessage*sm );
void timerInfo( const UniSetTypes::TimerMessage *tm );
void askSensors( UniversalIO::UIOCommand cmd );
void waitSMReady();
void receiverEvent( UNetReceiver* r, UNetReceiver::Event ev );
virtual bool activateObject();
// действия при завершении работы
virtual void sigterm( int signo );
......
......@@ -297,44 +297,7 @@ void UniExchange::askSensors( UniversalIO::UIOCommand cmd )
}
// -----------------------------------------------------------------------------
void UniExchange::processingMessage( UniSetTypes::VoidMessage* msg )
{
try
{
switch( msg->type )
{
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo( &sm );
break;
}
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
case Message::SysCommand:
{
SystemMessage sm( msg );
sysCommand( &sm );
break;
}
default:
break;
}
}
catch(Exception& ex)
{
cout << myname << "(processingMessage): " << ex << endl;
}
}
// -----------------------------------------------------------------------------
void UniExchange::sysCommand( SystemMessage* sm )
void UniExchange::sysCommand( const SystemMessage* sm )
{
switch( sm->command )
{
......@@ -343,12 +306,12 @@ void UniExchange::sysCommand( SystemMessage* sm )
askSensors(UniversalIO::UIONotify);
break;
}
case SystemMessage::FoldUp:
case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify);
break;
case SystemMessage::WatchDog:
askSensors(UniversalIO::UIONotify);
break;
......@@ -362,16 +325,6 @@ void UniExchange::sigterm( int signo )
{
}
// -----------------------------------------------------------------------------
void UniExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
{
}
// -----------------------------------------------------------------------------
void UniExchange::timerInfo( UniSetTypes::TimerMessage* tm )
{
}
// -----------------------------------------------------------------------------
UniExchange* UniExchange::init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string& prefix )
......
......@@ -53,11 +53,8 @@ class UniExchange:
protected:
virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sensorInfo( UniSetTypes::SensorMessage* sm );
virtual void timerInfo( UniSetTypes::TimerMessage* tm );
virtual void sigterm( int signo );
xmlNode* cnode;
......
......@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2014-01-23+04:00
// generate timestamp: 2014-01-24+04:00
// -----------------------------------------------------------------------------
#ifndef UObject_SK_H_
#define UObject_SK_H_
......@@ -38,7 +38,7 @@ class UObject_SK:
void setMsg( UniSetTypes::ObjectId code, bool state );
DebugStream mylog;
void init_mylog( DebugStream& d );
void init_dlog( DebugStream& d );
// "синтаксический сахар"..для логов
#define myinfo if( mylog.debugging(Debug::INFO) ) mylog
......@@ -78,10 +78,10 @@ class UObject_SK:
virtual void callback();
virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm );
virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void sensorInfo( UniSetTypes::SensorMessage* sm ){}
virtual void timerInfo( UniSetTypes::TimerMessage* tm ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ){}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ){}
virtual void sigterm( int signo );
virtual bool activateObject();
virtual void testMode( bool state );
......@@ -90,8 +90,8 @@ class UObject_SK:
void updateOutputs( bool force );
void preAskSensors( UniversalIO::UIOCommand cmd );
void preSensorInfo( UniSetTypes::SensorMessage* sm );
void preTimerInfo( UniSetTypes::TimerMessage* tm );
void preSensorInfo( const UniSetTypes::SensorMessage* sm );
void preTimerInfo( const UniSetTypes::TimerMessage* tm );
void waitSM( int wait_msec, UniSetTypes::ObjectId testID = UniSetTypes::DefaultObjectId );
void resetMsg();
......
......@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2014-01-23+04:00
// generate timestamp: 2014-01-24+04:00
// -----------------------------------------------------------------------------
#include "Configuration.h"
#include "Exceptions.h"
......@@ -202,7 +202,7 @@ void UObject_SK::testMode( bool _state )
// --------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void UObject_SK::init_mylog( DebugStream& d )
void UObject_SK::init_dlog( DebugStream& d )
{
UObject_SK::mylog = d;
}
......@@ -214,25 +214,16 @@ void UObject_SK::processingMessage( UniSetTypes::VoidMessage* _msg )
switch( _msg->type )
{
case Message::SensorInfo:
{
SensorMessage _sm( _msg );
preSensorInfo( &_sm );
break;
}
preSensorInfo( reinterpret_cast<SensorMessage*>(_msg) );
break;
case Message::Timer:
{
TimerMessage _tm(_msg);
preTimerInfo(&_tm);
break;
}
preTimerInfo( reinterpret_cast<TimerMessage*>(_msg) );
break;
case Message::SysCommand:
{
SystemMessage _sm( _msg );
sysCommand( &_sm );
break;
}
sysCommand( reinterpret_cast<SystemMessage*>(_msg) );
break;
default:
break;
......@@ -244,7 +235,7 @@ void UObject_SK::processingMessage( UniSetTypes::VoidMessage* _msg )
}
}
// -----------------------------------------------------------------------------
void UObject_SK::sysCommand( SystemMessage* _sm )
void UObject_SK::sysCommand( const SystemMessage* _sm )
{
switch( _sm->command )
{
......@@ -314,7 +305,7 @@ bool UObject_SK::activateObject()
return true;
}
// -----------------------------------------------------------------------------
void UObject_SK::preTimerInfo( UniSetTypes::TimerMessage* _tm )
void UObject_SK::preTimerInfo( const UniSetTypes::TimerMessage* _tm )
{
timerInfo(_tm);
}
......@@ -423,7 +414,7 @@ void UObject_SK::updateOutputs( bool _force )
}
// -----------------------------------------------------------------------------
void UObject_SK::preSensorInfo( UniSetTypes::SensorMessage* _sm )
void UObject_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm )
{
......
......@@ -57,15 +57,11 @@ class DBServer:
protected:
virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void sysCommand( UniSetTypes::SystemMessage* sm ){};
// Функции обработки пришедших сообщений
virtual void parse( UniSetTypes::SensorMessage* sm ){};
virtual void parse( UniSetTypes::ConfirmMessage* cmsg ){};
virtual void confirmInfo( const UniSetTypes::ConfirmMessage* cmsg ){}
virtual bool activateObject();
virtual void init_dbserver(){};
private:
};
//------------------------------------------------------------------------------------------
......
......@@ -150,14 +150,17 @@ class IOController:
// Дополнительные (вспомогательные поля)
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
IOStateList::iterator it;
void* any; /*!< расширение для возможности хранения своей информации */
// сигнал для реализации механизма зависимостией..
// (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals)
UniSetTypes::uniset_rwmutex changeMutex;
ChangeSignal sigChange;
UniSetTypes::uniset_rwmutex undefMutex;
ChangeUndefinedStateSignal sigUndefChange;
IOController_i::SensorInfo d_si; /*!< идентификатор датчика, от которого зависит данный */
......@@ -276,15 +279,19 @@ class IOController:
inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline int iodiltersSize(){ return iofilters.size(); }
private:
private:
friend class NCRestorer;
UniSetTypes::uniset_mutex siganyMutex;
ChangeSignal sigAnyChange;
UniSetTypes::uniset_mutex siganyundefMutex;
ChangeSignal sigAnyUndefChange;
InitSignal sigInit;
IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */
bool isPingDBServer; // флаг связи с DBServer-ом
IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */
......
......@@ -44,7 +44,7 @@ namespace UniSetTypes
Timer, // Сообщения о срабатывании таймера
TheLastFieldOfTypeOfMessage // Обязательно оставьте последним
};
int type; // Содержание сообщения (тип)
enum Priority
......
......@@ -54,10 +54,10 @@ class PassiveObject
inline std::string getName(){ return myname; }
protected:
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void timerInfo( UniSetTypes::TimerMessage *tm ){}
virtual void sensorInfo( UniSetTypes::SensorMessage *sm ){}
virtual void timerInfo( const UniSetTypes::TimerMessage *tm ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage *sm ){}
std::string myname;
......
......@@ -15,10 +15,9 @@ class SMonitor:
// -----
protected:
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sensorInfo( UniSetTypes::SensorMessage *si );
virtual void timerInfo( UniSetTypes::TimerMessage *tm );
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
virtual void sensorInfo( const UniSetTypes::SensorMessage *si );
virtual void timerInfo( const UniSetTypes::TimerMessage *tm );
virtual void sigterm( int signo );
SMonitor();
......
......@@ -58,7 +58,6 @@ class UniSetActivator:
inline void oakill(int signo){ raise(signo);}
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("UniSetActivator"); }
protected:
......@@ -88,8 +87,7 @@ class UniSetActivator:
return orb;
}
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
private:
......
......@@ -90,24 +90,27 @@ class UniSetObject:
protected:
/*! обработка приходящих сообщений */
virtual void processingMessage(UniSetTypes::VoidMessage *msg);
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ){}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ){}
/*! Получить сообщение */
bool receiveMessage(UniSetTypes::VoidMessage& vm);
bool receiveMessage( UniSetTypes::VoidMessage& vm );
/*! текущее количесво сообщений в очереди */
unsigned int countMessages();
/*! прервать ожидание сообщений */
void termWaiting();
UInterface ui; /*!< универсальный интерфейс для работы с другими процессами */
UInterface ui; /*!< универсальный интерфейс для работы с другими процессами */
std::string myname;
std::string section;
//! Дизактивизация объекта (переопределяется для необходимых действий перед деактивацией)
//! Дизактивизация объекта (переопределяется для необходимых действий перед деактивацией)
virtual bool disactivateObject(){return true;}
//! Активизация объекта (переопределяется для необходимых действий после активизации)
//! Активизация объекта (переопределяется для необходимых действий после активизации)
virtual bool activateObject(){return true;}
/*! запрет(разрешение) создания потока для обработки сообщений */
......
......@@ -89,32 +89,23 @@ void PassiveObject::init( ProxyManager* _mngr )
}
// ------------------------------------------------------------------------------------------
void PassiveObject::processingMessage( UniSetTypes::VoidMessage* msg )
void PassiveObject::processingMessage( UniSetTypes::VoidMessage *msg )
{
try
{
switch( msg->type )
{
case Message::SensorInfo:
{
SensorMessage sm( msg );
sensorInfo( &sm );
break;
}
case Message::SysCommand:
{
SystemMessage sm( msg );
sysCommand( &sm );
break;
}
sensorInfo( reinterpret_cast<SensorMessage*>(msg) );
break;
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
timerInfo( reinterpret_cast<TimerMessage*>(msg) );
break;
case Message::SysCommand:
sysCommand( reinterpret_cast<SystemMessage*>(msg) );
break;
default:
break;
......@@ -122,11 +113,33 @@ void PassiveObject::processingMessage( UniSetTypes::VoidMessage* msg )
}
catch( Exception& ex )
{
uwarn << myname << "(processingMessage): " << ex << endl;
ucrit << myname << "(processingMessage): " << ex << endl;
}
catch(CORBA::SystemException& ex)
{
ucrit << myname << "(processingMessage): CORBA::SystemException: " << ex.NP_minorString() << endl;
}
catch(CORBA::Exception& ex)
{
uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
}
catch( omniORB::fatalException& fe )
{
if( ulog.is_crit() )
{
ulog.crit() << myname << "(processingMessage): Caught omniORB::fatalException:" << endl;
ulog.crit() << myname << "(processingMessage): file: " << fe.file()
<< " line: " << fe.line()
<< " mesg: " << fe.errmsg() << endl;
}
}
catch(...)
{
ucrit << myname << "(processingMessage): catch..." << endl;
}
}
// -------------------------------------------------------------------------
void PassiveObject::sysCommand( SystemMessage *sm )
void PassiveObject::sysCommand( const SystemMessage *sm )
{
switch( sm->command )
{
......@@ -138,7 +151,7 @@ void PassiveObject::sysCommand( SystemMessage *sm )
case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify);
break;
case SystemMessage::WatchDog:
case SystemMessage::LogRotate:
break;
......
......@@ -323,31 +323,7 @@ void UniSetActivator::getinfo()
}
}
// ------------------------------------------------------------------------------------------
void UniSetActivator::processingMessage( UniSetTypes::VoidMessage *msg )
{
try
{
switch( msg->type )
{
case Message::SysCommand:
{
SystemMessage sm( msg );
sysCommand(&sm);
}
break;
default:
break;
}
}
catch(Exception& ex)
{
ucrit << myname << "(processingMessage): " << ex << endl;
}
}
// -------------------------------------------------------------------------
void UniSetActivator::sysCommand( UniSetTypes::SystemMessage *sm )
void UniSetActivator::sysCommand( const UniSetTypes::SystemMessage *sm )
{
switch(sm->command)
{
......
......@@ -781,9 +781,55 @@ void UniSetObject::callback()
// ------------------------------------------------------------------------------------------
void UniSetObject::processingMessage( UniSetTypes::VoidMessage *msg )
{
uinfo << myname << ": default processing messages..." << endl;
try
{
switch( msg->type )
{
case Message::SensorInfo:
sensorInfo( reinterpret_cast<SensorMessage*>(msg) );
break;
case Message::Timer:
timerInfo( reinterpret_cast<TimerMessage*>(msg) );
break;
case Message::SysCommand:
sysCommand( reinterpret_cast<SystemMessage*>(msg) );
break;
default:
break;
}
}
catch( Exception& ex )
{
ucrit << myname << "(processingMessage): " << ex << endl;
}
catch(CORBA::SystemException& ex)
{
ucrit << myname << "(processingMessage): CORBA::SystemException: " << ex.NP_minorString() << endl;
}
catch(CORBA::Exception& ex)
{
uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
}
catch( omniORB::fatalException& fe )
{
if( ulog.is_crit() )
{
ulog.crit() << myname << "(processingMessage): Caught omniORB::fatalException:" << endl;
ulog.crit() << myname << "(processingMessage): file: " << fe.file()
<< " line: " << fe.line()
<< " mesg: " << fe.errmsg() << endl;
}
}
catch(...)
{
ucrit << myname << "(processingMessage): catch..." << endl;
}
}
// ------------------------------------------------------------------------------------------
UniSetTypes::SimpleInfo* UniSetObject::getInfo()
{
ostringstream info;
......
......@@ -186,31 +186,43 @@ void IOController::localSetUndefinedState( IOStateList::iterator& li,
try
{
if( changed )
{
uniset_rwmutex_wrlock l(li->second.undefMutex);
li->second.sigUndefChange.emit(li, this);
}
}
catch(...){}
// потом глобольное, но конкретно для 'undefchange'
try
{
{
if( changed )
{
uniset_mutex_lock l(siganyundefMutex);
sigAnyUndefChange.emit(li, this);
}
}
catch(...){}
// теперь просто событие по изменению состояния
try
{
{
if( changed )
{
uniset_rwmutex_wrlock(li->second.changeMutex);
li->second.sigChange.emit(li, this);
}
}
catch(...){}
// глобальное по всем..
try
{
{
if( changed )
{
uniset_mutex_lock l(siganyMutex);
sigAnyChange.emit(li, this);
}
}
catch(...){}
}
......@@ -295,16 +307,22 @@ void IOController::localSetValue( IOController::IOStateList::iterator& li,
} // unlock
try
{
{
if( changed )
{
uniset_rwmutex_wrlock l(li->second.changeMutex);
li->second.sigChange.emit(li, this);
}
}
catch(...){}
try
{
{
if( changed )
{
uniset_mutex_lock l(siganyMutex);
sigAnyChange.emit(li, this);
}
}
catch(...){}
}
......
......@@ -271,7 +271,7 @@ void IONotifyController::ask(AskMap& askLst, const IOController_i::SensorInfo& s
if( removeConsumer(askIterator->second, cons) )
{
if( askIterator->second.empty() )
askLst.erase(askIterator);
askLst.erase(askIterator);
else
{
try
......@@ -414,6 +414,7 @@ void IONotifyController::send(ConsumerList& lst, UniSetTypes::SensorMessage& sm)
if( maxAttemtps>0 && (--li->attempt <= 0) )
{
li = lst.erase(li);
if( li == lst.end() ) --li;
break;
}
......
......@@ -76,29 +76,13 @@ void DBServer::processingMessage( UniSetTypes::VoidMessage *msg )
{
switch(msg->type)
{
case Message::SysCommand:
{
SystemMessage sm(msg);
sysCommand(&sm);
break;
}
case Message::Confirm:
{
ConfirmMessage cm(msg);
parse(&cm);
break;
}
case Message::SensorInfo:
{
SensorMessage sm(msg);
parse(&sm);
break;
}
confirmInfo( reinterpret_cast<ConfirmMessage*>(msg) );
break;
default:
break;
UniSetObject_LT::processingMessage(msg);
break;
}
}
......
......@@ -85,6 +85,8 @@ timeout_t LT_Object::checkTimers( UniSetObject* obj )
if( !li->curTick )
{
li = tlst.erase(li);
if( li == tlst.end() ) --li;
if( tlst.empty() )
sleepTime = UniSetTimer::WaitUpTime;
continue;
......
......@@ -35,63 +35,19 @@ SMonitor::~SMonitor()
{
}
// ------------------------------------------------------------------------------------------
void SMonitor::processingMessage( UniSetTypes::VoidMessage *msg)
{
try
{
switch(msg->type)
{
case Message::SensorInfo:
{
// cout << myname << "(sensorMessage): type="<< msg->type << " prior=" << msg->priority;
// cout << " sec=" << msg->tm.tv_sec << " usec=" << msg->tm.tv_usec << endl;
SensorMessage sm(msg);
sensorInfo(&sm);
break;
}
case Message::SysCommand:
{
SystemMessage sm(msg);
sysCommand(&sm);
break;
}
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
default:
cout << myname << ": неизвестное сообщение "<< msg->type << endl;
break;
}
}
catch(Exception& ex)
{
cerr << myname << ":(processing): " << ex << endl;
}
catch(...){}
}
// ------------------------------------------------------------------------------------------
void SMonitor::sigterm( int signo )
{
cout << myname << "SMonitor: sigterm "<< endl;
cout << myname << "SMonitor: sigterm "<< endl;
}
// ------------------------------------------------------------------------------------------
void SMonitor::sysCommand( SystemMessage *sm )
void SMonitor::sysCommand( const SystemMessage *sm )
{
switch(sm->command)
{
case SystemMessage::StartUp:
{
for( MyIDList::iterator it=lst.begin(); it!=lst.end(); it++ )
{
{
if( it->si.node == DefaultObjectId )
it->si.node = conf->getLocalNode();
......@@ -113,7 +69,7 @@ void SMonitor::sysCommand( SystemMessage *sm )
}
}
break;
case SystemMessage::FoldUp:
case SystemMessage::Finish:
break;
......@@ -126,7 +82,7 @@ void SMonitor::sysCommand( SystemMessage *sm )
}
}
// ------------------------------------------------------------------------------------------
void SMonitor::sensorInfo( SensorMessage *si )
void SMonitor::sensorInfo( const SensorMessage* si )
{
cout << "(" << setw(6) << si->id << "): " << setw(8) << timeToString(si->sm_tv_sec,":")
<< "(" << setw(6) << si->sm_tv_usec << "): ";
......@@ -153,8 +109,8 @@ void SMonitor::sensorInfo( SensorMessage *si )
}
}
// ------------------------------------------------------------------------------------------
void SMonitor::timerInfo( UniSetTypes::TimerMessage *tm )
void SMonitor::timerInfo( const UniSetTypes::TimerMessage *tm )
{
}
// ------------------------------------------------------------------------------------------
......@@ -14,12 +14,11 @@ int main( int argc, const char **argv )
tlog[Debug::INFO] << ": [info] ..." << endl;
tlog(Debug::INFO) << ": (info) ..." << endl;
cout << endl;
tlog.d_level1() << ": (level1) ..." << endl;
tlog.level1() << ": [level1] ..." << endl;
tlog.info() << ": [info] ..." << endl;
if( tlog.is_level1() )
tlog.d_level1() << ": is level1..." << endl;
tlog.level1() << ": is level1..." << endl;
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment