Commit e57222e0 authored by Pavel Vainerman's avatar Pavel Vainerman

backported to p8 as 2.4-alt3.M80P.4 (with rpmbph script)

parents 94cbb982 a6731ce7
...@@ -7,10 +7,6 @@ ...@@ -7,10 +7,6 @@
- (IONotifyController): Разработать механизм заказа группы датчиков сразу (и ответ тоже группой) - (IONotifyController): Разработать механизм заказа группы датчиков сразу (и ответ тоже группой)
---------- ----------
codegen:
- Сделать работу с TestMode на основе заказа!
- Сделать работу с ResetMsg на основе askTimer! // подумать нужно ли..
Version 2.3 Version 2.3
============ ============
...@@ -43,7 +39,6 @@ Version 2.3 ...@@ -43,7 +39,6 @@ Version 2.3
uniset-codegen: добавить ключ --gen-sensor-name для генерирования name_Item.. (чтобы можно было в логах использовать текстовые названия) uniset-codegen: добавить ключ --gen-sensor-name для генерирования name_Item.. (чтобы можно было в логах использовать текстовые названия)
uniset-codegen: перенести инициализацию полей в header (c++11) и "разгрузить конструкторы" uniset-codegen: перенести инициализацию полей в header (c++11) и "разгрузить конструкторы"
SQL: SQL:
==== ====
- добавить работу с History (при передаче указателя на SM в конструкторе). - добавить работу с History (при передаче указателя на SM в конструкторе).
...@@ -58,16 +53,16 @@ Version 2.5 ...@@ -58,16 +53,16 @@ Version 2.5
- IOBase: возможность задавать свою формулу преобразования входного сигнала (помимо калибровки).. - IOBase: возможность задавать свою формулу преобразования входного сигнала (помимо калибровки)..
- переписать систему инициализации и работы между UniSetActivator,UniSetManager и UniSetObject-ами - переписать систему инициализации и работы между UniSetActivator,UniSetManager и UniSetObject-ами (уменьшить количество функций (связность))
(уменьшить количество функций (связность) и определится кто отвечает за удаление объекта и т.п.)
- Использовать PIMPL - Использовать PIMPL (подумать.. это серьёзная переделка кода)
- подумать.. это серьёзная переделка кода..
- Вылетать с ошибкой если в секции <thresholds> указан не существующий датчик - Вылетать с ошибкой если в секции <thresholds> указан не существующий датчик
- совместимость между 64bit и 32bit - для этого нужно отказаться от использования сырого long и перейти либо на int32_t либо CORBA::Long. - совместимость между 64bit и 32bit - для этого нужно отказаться от использования сырого long и перейти либо на int32_t либо CORBA::Long.
Либо стоит всё-таки ввести свой тип данных value_t для хранимых значений, чтобы спокойно работать в x86_64 и x86_32
при этом скрыв детали реализации. А возможно в последствии наложить какие-то ограничения на этот тип
- timeout_t getSharedMemoryReadyTimeout()! - timeout_t getSharedMemoryReadyTimeout()!
...@@ -90,8 +85,6 @@ DB: Сделать регулируемый буфер на INSERT-ы БД, чт ...@@ -90,8 +85,6 @@ DB: Сделать регулируемый буфер на INSERT-ы БД, чт
Уйти от использования libcommoncpp,libxml2,DebugLog,Thread,RWLock ==> и применяять одну библиотеку libpoco (http://pocoproject.org/documentation/index.html) Уйти от использования libcommoncpp,libxml2,DebugLog,Thread,RWLock ==> и применяять одну библиотеку libpoco (http://pocoproject.org/documentation/index.html)
================== ==================
Возможно стоит всё-таки ввести свой тип данных value_t для хранимых значений, чтобы спокойно работать в x86_64 и x86_32
при этом скрыв детали реализации. А возможно в последствии наложить какие-то ограничения на этот тип
Но тогда стоит вводить и namespace uniset Но тогда стоит вводить и namespace uniset
================= =================
......
...@@ -237,13 +237,13 @@ ...@@ -237,13 +237,13 @@
\param id - идентификатор датчика \param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить \param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/ */
std::string str( UniSetTypes::ObjectId id, bool showLinkName=true ); std::string str( UniSetTypes::ObjectId id, bool showLinkName=true ) const;
/*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val /*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val
\param id - идентификатор датчика \param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить \param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/ */
std::string strval( UniSetTypes::ObjectId id, bool showLinkName=true ); std::string strval( UniSetTypes::ObjectId id, bool showLinkName=true ) const;
/*! Вывод состояния внутренних переменных */ /*! Вывод состояния внутренних переменных */
inline std::string dumpVars(){ return std::move(vmon.pretty_str()); } inline std::string dumpVars(){ return std::move(vmon.pretty_str()); }
...@@ -1184,7 +1184,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1184,7 +1184,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
return std::move(s.str()); return std::move(s.str());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId id, bool showLinkName ) std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId id, bool showLinkName ) const
{ {
ostringstream s; ostringstream s;
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
...@@ -1198,7 +1198,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId ...@@ -1198,7 +1198,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId
return ""; return "";
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::ObjectId id, bool showLinkName ) std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::ObjectId id, bool showLinkName ) const
{ {
ostringstream s; ostringstream s;
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
...@@ -1511,7 +1511,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1511,7 +1511,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
return std::move(s.str()); return std::move(s.str());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId id, bool showLinkName ) std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId id, bool showLinkName ) const
{ {
ostringstream s; ostringstream s;
<xsl:for-each select="//sensors/item/consumers/consumer"> <xsl:for-each select="//sensors/item/consumers/consumer">
...@@ -1529,7 +1529,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId ...@@ -1529,7 +1529,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::str( UniSetTypes::ObjectId
return ""; return "";
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::ObjectId id, bool showLinkName ) std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::ObjectId id, bool showLinkName ) const
{ {
ostringstream s; ostringstream s;
<xsl:for-each select="//sensors/item/consumers/consumer"> <xsl:for-each select="//sensors/item/consumers/consumer">
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.4 Version: 2.4
Release: alt2.M80P.3 Release: alt3.M80P.4
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: LGPL License: LGPL
...@@ -486,9 +486,15 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -486,9 +486,15 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Tue Jul 26 2016 Pavel Vainerman <pv@altlinux.ru> 2.4-alt2.M80P.3 * Mon Aug 01 2016 Pavel Vainerman <pv@altlinux.ru> 2.4-alt3.M80P.4
- backport to ALTLinux p8 (by rpmbph script) - backport to ALTLinux p8 (by rpmbph script)
* Mon Aug 01 2016 Pavel Vainerman <pv@altlinux.ru> 2.4-alt4
- build new version
* Thu Jul 28 2016 Pavel Vainerman <pv@altlinux.ru> 2.4-alt3.1
- test build
* Tue Jul 26 2016 Pavel Vainerman <pv@altlinux.ru> 2.4-alt3 * Tue Jul 26 2016 Pavel Vainerman <pv@altlinux.ru> 2.4-alt3
- merge devel/master - merge devel/master
......
...@@ -41,7 +41,7 @@ class MySQLInterface: ...@@ -41,7 +41,7 @@ class MySQLInterface:
// DBResult listFields( const std::string& table, const std::string& wild ); // DBResult listFields( const std::string& table, const std::string& wild );
virtual bool nconnect( const std::string& host, const std::string& user, const std::string& pswd, virtual bool nconnect( const std::string& host, const std::string& user, const std::string& pswd,
const std::string& dbname, unsigned int port=0 ) override; const std::string& dbname, unsigned int port = 0 ) override;
virtual bool close() override; virtual bool close() override;
bool query_ok( const std::string& q ); bool query_ok( const std::string& q );
......
...@@ -81,7 +81,7 @@ void DBServer_PostgreSQL::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -81,7 +81,7 @@ void DBServer_PostgreSQL::sysCommand( const UniSetTypes::SystemMessage* sm )
switch( sm->command ) switch( sm->command )
{ {
case SystemMessage::StartUp: case SystemMessage::StartUp:
askTimer(FlushInsertBuffer,ibufSyncTimeout); askTimer(FlushInsertBuffer, ibufSyncTimeout);
break; break;
case SystemMessage::Finish: case SystemMessage::Finish:
...@@ -219,8 +219,9 @@ void DBServer_PostgreSQL::flushInsertBuffer() ...@@ -219,8 +219,9 @@ void DBServer_PostgreSQL::flushInsertBuffer()
std::advance(end, delnum); std::advance(end, delnum);
} }
ibuf.erase(beg,end); ibuf.erase(beg, end);
ibufSize -= delnum; ibufSize -= delnum;
if( ibufSize < 0 ) if( ibufSize < 0 )
ibufSize = 0; ibufSize = 0;
...@@ -233,7 +234,7 @@ void DBServer_PostgreSQL::flushInsertBuffer() ...@@ -233,7 +234,7 @@ void DBServer_PostgreSQL::flushInsertBuffer()
dbinfo << myname << "(flushInsertBuffer): write insert buffer[" << ibufSize << "] to DB.." << endl; dbinfo << myname << "(flushInsertBuffer): write insert buffer[" << ibufSize << "] to DB.." << endl;
if( !db->copy("main_history",tblcols,ibuf) ) if( !db->copy("main_history", tblcols, ibuf) )
{ {
dbcrit << myname << "(flushInsertBuffer): error: " << db->error() << endl; dbcrit << myname << "(flushInsertBuffer): error: " << db->error() << endl;
} }
...@@ -322,20 +323,20 @@ void DBServer_PostgreSQL::initDBServer() ...@@ -322,20 +323,20 @@ void DBServer_PostgreSQL::initDBServer()
string dbnode( conf->getArgParam("--" + prefix + "-dbnode", it.getProp("dbnode"))); string dbnode( conf->getArgParam("--" + prefix + "-dbnode", it.getProp("dbnode")));
string dbuser( conf->getArgParam("--" + prefix + "-dbuser", it.getProp("dbuser"))); string dbuser( conf->getArgParam("--" + prefix + "-dbuser", it.getProp("dbuser")));
string dbpass( conf->getArgParam("--" + prefix + "-dbpass", it.getProp("dbpass"))); string dbpass( conf->getArgParam("--" + prefix + "-dbpass", it.getProp("dbpass")));
unsigned int dbport = conf->getArgPInt("--" + prefix + "-dbport", it.getProp("dbport"),5432); unsigned int dbport = conf->getArgPInt("--" + prefix + "-dbport", it.getProp("dbport"), 5432);
ibufMaxSize = conf->getArgPInt("--" + prefix + "-ibuf-maxsize", it.getProp("ibufMaxSize"),2000); ibufMaxSize = conf->getArgPInt("--" + prefix + "-ibuf-maxsize", it.getProp("ibufMaxSize"), 2000);
ibuf.reserve(ibufMaxSize); ibuf.reserve(ibufMaxSize);
ibufSyncTimeout = conf->getArgPInt("--" + prefix + "-ibuf-sync-timeout", it.getProp("ibufSyncTimeout"),15000); ibufSyncTimeout = conf->getArgPInt("--" + prefix + "-ibuf-sync-timeout", it.getProp("ibufSyncTimeout"), 15000);
std::string sfactor = conf->getArg2Param("--" + prefix + "-ibuf-overflow-cleanfactor", it.getProp("ibufOverflowCleanFactor"),"0.5"); std::string sfactor = conf->getArg2Param("--" + prefix + "-ibuf-overflow-cleanfactor", it.getProp("ibufOverflowCleanFactor"), "0.5");
ibufOverflowCleanFactor = atof(sfactor.c_str()); ibufOverflowCleanFactor = atof(sfactor.c_str());
tblMap[UniSetTypes::Message::SensorInfo] = "main_history"; tblMap[UniSetTypes::Message::SensorInfo] = "main_history";
tblMap[UniSetTypes::Message::Confirm] = "main_history"; tblMap[UniSetTypes::Message::Confirm] = "main_history";
PingTime = conf->getArgPInt("--" + prefix + "-pingTime", it.getProp("pingTime"),15000); PingTime = conf->getArgPInt("--" + prefix + "-pingTime", it.getProp("pingTime"), 15000);
ReconnectTime = conf->getArgPInt("--" + prefix + "-reconnectTime", it.getProp("reconnectTime"),30000); ReconnectTime = conf->getArgPInt("--" + prefix + "-reconnectTime", it.getProp("reconnectTime"), 30000);
qbufSize = conf->getArgPInt("--" + prefix + "-buffer-size", it.getProp("bufferSize"), 200); qbufSize = conf->getArgPInt("--" + prefix + "-buffer-size", it.getProp("bufferSize"), 200);
......
...@@ -114,7 +114,7 @@ class DBServer_PostgreSQL: ...@@ -114,7 +114,7 @@ class DBServer_PostgreSQL:
std::mutex mqbuf; std::mutex mqbuf;
// writeBuffer // writeBuffer
const std::list<std::string> tblcols = { "date", "time","time_usec","sensor_id","value","node" }; const std::list<std::string> tblcols = { "date", "time", "time_usec", "sensor_id", "value", "node" };
typedef std::vector<PostgreSQLInterface::Record> InsertBuffer; typedef std::vector<PostgreSQLInterface::Record> InsertBuffer;
InsertBuffer ibuf; InsertBuffer ibuf;
......
...@@ -98,11 +98,12 @@ bool PostgreSQLInterface::copy( const std::string& tblname, const std::list<std: ...@@ -98,11 +98,12 @@ bool PostgreSQLInterface::copy( const std::string& tblname, const std::list<std:
try try
{ {
work w( *(db.get()) ); work w( *(db.get()) );
tablewriter t(w,tblname,cols.begin(),cols.end()); tablewriter t(w, tblname, cols.begin(), cols.end());
t.reserve(data.size()); // size() не дорогая операция для list? t.reserve(data.size()); // size() не дорогая операция для list?
for( const auto& d: data )
t.push_back(d.begin(),d.end()); for( const auto& d : data )
t.push_back(d.begin(), d.end());
t.complete(); t.complete();
w.commit(); w.commit();
......
...@@ -36,7 +36,7 @@ class PostgreSQLInterface: ...@@ -36,7 +36,7 @@ class PostgreSQLInterface:
virtual bool nconnect( const std::string& host, const std::string& user, virtual bool nconnect( const std::string& host, const std::string& user,
const std::string& pswd, const std::string& dbname, const std::string& pswd, const std::string& dbname,
unsigned int port=5432) override; unsigned int port = 5432) override;
virtual bool close() override; virtual bool close() override;
virtual bool isConnection() override; virtual bool isConnection() override;
virtual bool ping() override; // проверка доступности БД virtual bool ping() override; // проверка доступности БД
......
...@@ -14,10 +14,12 @@ int main(int argc, char** argv) ...@@ -14,10 +14,12 @@ int main(int argc, char** argv)
dbname = string(argv[1]); dbname = string(argv[1]);
size_t ver = 1; size_t ver = 1;
if( argc > 2 ) if( argc > 2 )
ver = atoi(argv[2]); ver = atoi(argv[2]);
size_t num = 10000; size_t num = 10000;
if( argc > 3 ) if( argc > 3 )
num = atoi(argv[3]); num = atoi(argv[3]);
...@@ -40,7 +42,7 @@ int main(int argc, char** argv) ...@@ -40,7 +42,7 @@ int main(int argc, char** argv)
if( ver == 1 ) if( ver == 1 )
{ {
for( size_t i=0; i<num; i++ ) for( size_t i = 0; i < num; i++ )
{ {
q << "INSERT INTO main_history(date,time,time_usec,sensor_id,value,node)" q << "INSERT INTO main_history(date,time,time_usec,sensor_id,value,node)"
<< " VALUES(now(),now(),0,7,1,3000);"; << " VALUES(now(),now(),0,7,1,3000);";
...@@ -49,7 +51,8 @@ int main(int argc, char** argv) ...@@ -49,7 +51,8 @@ int main(int argc, char** argv)
else if( ver == 2 ) else if( ver == 2 )
{ {
q << "INSERT INTO main_history(date,time,time_usec,sensor_id,value,node) VALUES"; q << "INSERT INTO main_history(date,time,time_usec,sensor_id,value,node) VALUES";
for( size_t i=0; i<num; i++ )
for( size_t i = 0; i < num; i++ )
{ {
q << "(now(),now(),0,7,1,3000),"; q << "(now(),now(),0,7,1,3000),";
} }
...@@ -58,18 +61,21 @@ int main(int argc, char** argv) ...@@ -58,18 +61,21 @@ int main(int argc, char** argv)
} }
std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::time_point<std::chrono::system_clock> start, end;
if( ver == 3 ) if( ver == 3 )
{ {
std::list<std::string> cols = { "date", "time","time_usec","sensor_id","value","node" }; std::list<std::string> cols = { "date", "time", "time_usec", "sensor_id", "value", "node" };
PostgreSQLInterface::Data data; PostgreSQLInterface::Data data;
for( size_t i=0; i<num; i++ )
for( size_t i = 0; i < num; i++ )
{ {
PostgreSQLInterface::Record d = { "now()","now()","0","7","1","3000" }; PostgreSQLInterface::Record d = { "now()", "now()", "0", "7", "1", "3000" };
data.push_back(std::move(d)); data.push_back(std::move(d));
} }
start = std::chrono::system_clock::now(); start = std::chrono::system_clock::now();
if( !db.copy("main_history",cols,data) )
if( !db.copy("main_history", cols, data) )
{ {
cerr << "query error: " << db.error() << endl; cerr << "query error: " << db.error() << endl;
db.close(); db.close();
...@@ -79,6 +85,7 @@ int main(int argc, char** argv) ...@@ -79,6 +85,7 @@ int main(int argc, char** argv)
else else
{ {
start = std::chrono::system_clock::now(); start = std::chrono::system_clock::now();
if( !db.insert( std::move(q.str())) ) if( !db.insert( std::move(q.str())) )
{ {
cerr << "query error: " << db.error() << endl; cerr << "query error: " << db.error() << endl;
......
...@@ -64,7 +64,6 @@ class ComediInterface ...@@ -64,7 +64,6 @@ class ComediInterface
void configureSubdev( int subdev, SubdevType type ) throw(UniSetTypes::Exception); void configureSubdev( int subdev, SubdevType type ) throw(UniSetTypes::Exception);
void configureChannel( int subdev, int channel, ChannelType type, int range = 0, int aref = 0 ) void configureChannel( int subdev, int channel, ChannelType type, int range = 0, int aref = 0 )
throw(UniSetTypes::Exception); throw(UniSetTypes::Exception);
......
...@@ -186,15 +186,15 @@ class CardList: ...@@ -186,15 +186,15 @@ class CardList:
{ {
public: public:
explicit CardList( int size ) : std::vector<ComediInterface * >(size) { } explicit CardList( size_t size ) : std::vector<ComediInterface * >(size) { }
~CardList() ~CardList()
{ {
for( unsigned int i = 0; i < size(); i++ ) for( size_t i = 0; i < size(); i++ )
delete (*this)[i]; delete (*this)[i];
} }
inline ComediInterface* getCard(int ncard) inline ComediInterface* getCard(int ncard) const
{ {
if( ncard >= 0 && ncard < (int)size() ) if( ncard >= 0 && ncard < (int)size() )
return (*this)[ncard]; return (*this)[ncard];
...@@ -258,7 +258,7 @@ class IOControl: ...@@ -258,7 +258,7 @@ class IOControl:
int subdev; /*!< (UNIO) подустройство (см. comedi_test для конкретной карты в/в) */ int subdev; /*!< (UNIO) подустройство (см. comedi_test для конкретной карты в/в) */
int channel; /*!< (UNIO) канал [0...23] */ int channel; /*!< (UNIO) канал [0...23] */
int ncard; /*!< номер карты [1|2]. 0 - не определена. FIXME from Lav: -1 - не определена? */ int ncard; /*!< номер карты [1|2]. -1 - не определена. */
/*! Вид поключения /*! Вид поключения
0 - analog ref = analog ground 0 - analog ref = analog ground
...@@ -286,19 +286,19 @@ class IOControl: ...@@ -286,19 +286,19 @@ class IOControl:
struct IOPriority struct IOPriority
{ {
IOPriority(int p, int i): IOPriority(size_t p, size_t i):
priority(p), index(i) {} priority(p), index(i) {}
int priority; size_t priority;
int index; size_t index;
}; };
enum TestModeID enum TestModeID
{ {
tmNone = 0, /*!< тестовый режим отключён */ tmNone = 0, /*!< тестовый режим отключён */
tmOffPoll = 1, /*!< отключить опрос */ tmOffPoll = 1, /*!< отключить опрос */
tmConfigEnable = 2, /*!< специальный режим, в соответсвии с настройкой 'enable_testmode' */ tmConfigEnable = 2, /*!< специальный режим, в соответствии с настройкой 'enable_testmode' */
tmConfigDisable = 3, /*!< специальный режим, в соответсвии с настройкой 'disable_testmode' */ tmConfigDisable = 3, /*!< специальный режим, в соответствии с настройкой 'disable_testmode' */
tmOnlyInputs = 4, /*!< включены только входы */ tmOnlyInputs = 4, /*!< включены только входы */
tmOnlyOutputs = 5 /*!< включены только выходы */ tmOnlyOutputs = 5 /*!< включены только выходы */
}; };
...@@ -335,8 +335,6 @@ class IOControl: ...@@ -335,8 +335,6 @@ class IOControl:
void waitSM(); void waitSM();
bool checkCards( const std::string& func = "" );
xmlNode* cnode = { 0 }; /*!< xml-узел в настроечном файле */ xmlNode* cnode = { 0 }; /*!< xml-узел в настроечном файле */
int polltime = { 150 }; /*!< переодичность обновления данных (опроса карт в/в), [мсек] */ int polltime = { 150 }; /*!< переодичность обновления данных (опроса карт в/в), [мсек] */
...@@ -403,8 +401,7 @@ class IOControl: ...@@ -403,8 +401,7 @@ class IOControl:
bool readconf_ok = { false }; bool readconf_ok = { false };
int activateTimeout; int activateTimeout;
UniSetTypes::ObjectId sidTestSMReady = { UniSetTypes::DefaultObjectId }; UniSetTypes::ObjectId sidTestSMReady = { UniSetTypes::DefaultObjectId };
bool term = { false }; std::atomic_bool term = { false };
UniSetTypes::ObjectId testMode_as = { UniSetTypes::DefaultObjectId }; UniSetTypes::ObjectId testMode_as = { UniSetTypes::DefaultObjectId };
IOController::IOStateList::iterator itTestMode; IOController::IOStateList::iterator itTestMode;
......
...@@ -23,7 +23,7 @@ using namespace std; ...@@ -23,7 +23,7 @@ using namespace std;
const Element::ElementID Element::DefaultElementID = "?id?"; const Element::ElementID Element::DefaultElementID = "?id?";
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void Element::addChildOut( std::shared_ptr<Element> el, int num ) void Element::addChildOut( std::shared_ptr<Element> el, size_t num )
{ {
if( el.get() == this ) if( el.get() == this )
{ {
...@@ -90,7 +90,7 @@ std::shared_ptr<Element> Element::find(const ElementID& id ) ...@@ -90,7 +90,7 @@ std::shared_ptr<Element> Element::find(const ElementID& id )
return nullptr; return nullptr;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void Element::addInput(int num, bool state) void Element::addInput(size_t num, bool state)
{ {
for( auto& it : ins ) for( auto& it : ins )
{ {
...@@ -105,7 +105,7 @@ void Element::addInput(int num, bool state) ...@@ -105,7 +105,7 @@ void Element::addInput(int num, bool state)
ins.push_front(InputInfo(num, state)); ins.push_front(InputInfo(num, state));
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void Element::delInput( int num ) void Element::delInput(size_t num )
{ {
for( auto it = ins.begin(); it != ins.end(); ++it ) for( auto it = ins.begin(); it != ins.end(); ++it )
{ {
......
...@@ -57,30 +57,30 @@ class Element ...@@ -57,30 +57,30 @@ class Element
*/ */
virtual void tick() {} virtual void tick() {}
virtual void setIn( int num, bool state ) = 0; virtual void setIn( size_t num, bool state ) = 0;
virtual bool getOut() = 0; virtual bool getOut() const = 0;
inline ElementID getId() inline ElementID getId() const
{ {
return myid; return myid;
} }
virtual std::string getType() virtual std::string getType() const
{ {
return "?type?"; return "?type?";
} }
virtual std::shared_ptr<Element> find( const ElementID& id ); virtual std::shared_ptr<Element> find( const ElementID& id );
virtual void addChildOut( std::shared_ptr<Element> el, int in_num ); virtual void addChildOut( std::shared_ptr<Element> el, size_t in_num );
virtual void delChildOut( std::shared_ptr<Element> el ); virtual void delChildOut( std::shared_ptr<Element> el );
inline int outCount() inline size_t outCount() const
{ {
return outs.size(); return outs.size();
} }
virtual void addInput( int num, bool state = false ); virtual void addInput( size_t num, bool state = false );
virtual void delInput( int num ); virtual void delInput( size_t num );
inline int inCount() inline size_t inCount() const
{ {
return ins.size(); return ins.size();
} }
...@@ -103,24 +103,23 @@ class Element ...@@ -103,24 +103,23 @@ class Element
struct ChildInfo struct ChildInfo
{ {
ChildInfo(std::shared_ptr<Element> e, int n): ChildInfo(std::shared_ptr<Element> e, size_t n):
el(e), num(n) {} el(e), num(n) {}
ChildInfo(): el(0), num(0) {} ChildInfo(): el(0), num(0) {}
std::shared_ptr<Element> el; std::shared_ptr<Element> el;
int num; size_t num;
}; };
typedef std::list<ChildInfo> OutputList; typedef std::list<ChildInfo> OutputList;
OutputList outs; OutputList outs;
virtual void setChildOut(); virtual void setChildOut();
struct InputInfo struct InputInfo
{ {
InputInfo(): num(0), state(false), type(unknown) {} InputInfo(): num(0), state(false), type(unknown) {}
InputInfo(int n, bool s): num(n), state(s), type(unknown) {} InputInfo(size_t n, bool s): num(n), state(s), type(unknown) {}
int num; size_t num;
bool state; bool state;
InputType type; InputType type;
}; };
...@@ -140,16 +139,16 @@ class TOR: ...@@ -140,16 +139,16 @@ class TOR:
{ {
public: public:
TOR( ElementID id, unsigned int numbers = 0, bool st = false ); TOR( ElementID id, size_t numbers = 0, bool st = false );
virtual ~TOR(); virtual ~TOR();
virtual void setIn( int num, bool state ) override; virtual void setIn( size_t num, bool state ) override;
virtual bool getOut() override virtual bool getOut() const override
{ {
return myout; return myout;
} }
virtual std::string getType() override virtual std::string getType() const override
{ {
return "OR"; return "OR";
} }
...@@ -167,11 +166,11 @@ class TAND: ...@@ -167,11 +166,11 @@ class TAND:
{ {
public: public:
TAND( ElementID id, int numbers = 0, bool st = false ); TAND(ElementID id, size_t numbers = 0, bool st = false );
virtual ~TAND(); virtual ~TAND();
virtual void setIn( int num, bool state ) override; virtual void setIn( size_t num, bool state ) override;
virtual std::string getType() override virtual std::string getType() const override
{ {
return "AND"; return "AND";
} }
...@@ -192,20 +191,20 @@ class TNOT: ...@@ -192,20 +191,20 @@ class TNOT:
TNOT( ElementID id, bool out_default ); TNOT( ElementID id, bool out_default );
virtual ~TNOT(); virtual ~TNOT();
virtual bool getOut() override virtual bool getOut() const override
{ {
return myout; return myout;
} }
/* num игнорируется, т.к. элемент с одним входом /* num игнорируется, т.к. элемент с одним входом
*/ */
virtual void setIn( int num, bool state ) override ; virtual void setIn( size_t num, bool state ) override ;
virtual std::string getType() override virtual std::string getType() const override
{ {
return "NOT"; return "NOT";
} }
virtual void addInput( int num, bool state = false ) override {} virtual void addInput( size_t num, bool state = false ) override {}
virtual void delInput( int num ) override {} virtual void delInput( size_t num ) override {}
protected: protected:
TNOT(): myout(false) {} TNOT(): myout(false) {}
......
...@@ -116,7 +116,7 @@ class LProcessor ...@@ -116,7 +116,7 @@ class LProcessor
void open( const std::string& lfile ); void open( const std::string& lfile );
inline bool isOpen() inline bool isOpen() const
{ {
return !fSchema.empty(); return !fSchema.empty();
} }
...@@ -133,7 +133,7 @@ class LProcessor ...@@ -133,7 +133,7 @@ class LProcessor
return sch; return sch;
} }
inline int getSleepTime() inline int getSleepTime() const
{ {
return sleepTime; return sleepTime;
} }
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
using namespace std; using namespace std;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
TAND::TAND(ElementID id, int num, bool st): TAND::TAND(ElementID id, size_t num, bool st):
TOR(id, num, st) TOR(id, num, st)
{ {
} }
...@@ -30,7 +30,7 @@ TAND::~TAND() ...@@ -30,7 +30,7 @@ TAND::~TAND()
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void TAND::setIn( int num, bool state ) void TAND::setIn(size_t num, bool state )
{ {
// cout << this << ": input " << num << " set " << state << endl; // cout << this << ": input " << num << " set " << state << endl;
for( auto& it : ins ) for( auto& it : ins )
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
using namespace std; using namespace std;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
TDelay::TDelay( Element::ElementID id, timeout_t delayMS, unsigned int inCount): TDelay::TDelay(Element::ElementID id, timeout_t delayMS, size_t inCount):
Element(id), Element(id),
myout(false), myout(false),
delay(delayMS) delay(delayMS)
...@@ -38,7 +38,7 @@ TDelay::~TDelay() ...@@ -38,7 +38,7 @@ TDelay::~TDelay()
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void TDelay::setIn( int num, bool state ) void TDelay::setIn( size_t num, bool state )
{ {
bool prev = myout; bool prev = myout;
...@@ -89,7 +89,7 @@ void TDelay::tick() ...@@ -89,7 +89,7 @@ void TDelay::tick()
} }
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool TDelay::getOut() bool TDelay::getOut() const
{ {
return myout; return myout;
} }
......
...@@ -27,14 +27,13 @@ class TDelay: ...@@ -27,14 +27,13 @@ class TDelay:
{ {
public: public:
TDelay( Element::ElementID id, timeout_t delayMS = 0, unsigned int inCount = 0 ); TDelay( Element::ElementID id, timeout_t delayMS = 0, size_t inCount = 0 );
virtual ~TDelay(); virtual ~TDelay();
virtual void tick() override; virtual void tick() override;
virtual void setIn( int num, bool state ) override; virtual void setIn( size_t num, bool state ) override;
virtual bool getOut() override; virtual bool getOut() const override;
virtual std::string getType() override virtual std::string getType() const override
{ {
return "Delay"; return "Delay";
} }
......
...@@ -33,7 +33,7 @@ TNOT::~TNOT() ...@@ -33,7 +33,7 @@ TNOT::~TNOT()
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void TNOT::setIn( int num, bool state ) void TNOT::setIn( size_t num, bool state )
{ {
bool prev = myout; bool prev = myout;
myout = !state; myout = !state;
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
using namespace std; using namespace std;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
TOR::TOR(ElementID id, unsigned int num, bool st): TOR::TOR(ElementID id, size_t num, bool st):
Element(id), Element(id),
myout(false) myout(false)
{ {
...@@ -43,7 +43,7 @@ TOR::~TOR() ...@@ -43,7 +43,7 @@ TOR::~TOR()
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void TOR::setIn( int num, bool state ) void TOR::setIn( size_t num, bool state )
{ {
// cout << getType() << "(" << myid << "): input " << num << " set " << state << endl; // cout << getType() << "(" << myid << "): input " << num << " set " << state << endl;
......
...@@ -327,7 +327,7 @@ void MBExchange::step() ...@@ -327,7 +327,7 @@ void MBExchange::step()
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBExchange::checkProcActive() bool MBExchange::checkProcActive() const
{ {
return activated; return activated;
} }
...@@ -509,7 +509,7 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev ) ...@@ -509,7 +509,7 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev )
return true; return true;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBExchange::checkPoll( bool wrFunc ) bool MBExchange::checkPoll( bool wrFunc ) const
{ {
if( exchangeMode == emWriteOnly && !wrFunc ) if( exchangeMode == emWriteOnly && !wrFunc )
{ {
...@@ -1463,14 +1463,14 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1463,14 +1463,14 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
VTypes::F2 f2(f); VTypes::F2 f2(f);
for( int k = 0; k < VTypes::F2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F2::wsize(); k++, i++ )
i->second->mbval = f2.raw.v[k]; i->second->mbval = f2.raw.v[k];
} }
else if( p->vType == VTypes::vtF2r ) else if( p->vType == VTypes::vtF2r )
{ {
VTypes::F2r f2(f); VTypes::F2r f2(f);
for( int k = 0; k < VTypes::F2r::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F2r::wsize(); k++, i++ )
i->second->mbval = f2.raw.v[k]; i->second->mbval = f2.raw.v[k];
} }
...@@ -1481,7 +1481,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1481,7 +1481,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F2::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F2::wsize()];
for( int k = 0; k < VTypes::F2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F2::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
float f = 0; float f = 0;
...@@ -1513,7 +1513,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1513,7 +1513,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
float f = IOBase::processingFasAO( p, shm, force_out ); float f = IOBase::processingFasAO( p, shm, force_out );
VTypes::F4 f4(f); VTypes::F4 f4(f);
for( int k = 0; k < VTypes::F4::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F4::wsize(); k++, i++ )
i->second->mbval = f4.raw.v[k]; i->second->mbval = f4.raw.v[k];
r->sm_initOK = true; r->sm_initOK = true;
...@@ -1523,7 +1523,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1523,7 +1523,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F4::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F4::wsize()];
for( int k = 0; k < VTypes::F4::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F4::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
VTypes::F4 f(data, VTypes::F4::wsize()); VTypes::F4 f(data, VTypes::F4::wsize());
...@@ -1546,14 +1546,14 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1546,14 +1546,14 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
VTypes::I2 i2(v); VTypes::I2 i2(v);
for( int k = 0; k < VTypes::I2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::I2::wsize(); k++, i++ )
i->second->mbval = i2.raw.v[k]; i->second->mbval = i2.raw.v[k];
} }
else if( p->vType == VTypes::vtI2r ) else if( p->vType == VTypes::vtI2r )
{ {
VTypes::I2r i2(v); VTypes::I2r i2(v);
for( int k = 0; k < VTypes::I2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::I2::wsize(); k++, i++ )
i->second->mbval = i2.raw.v[k]; i->second->mbval = i2.raw.v[k];
} }
...@@ -1564,7 +1564,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1564,7 +1564,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::I2::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::I2::wsize()];
for( int k = 0; k < VTypes::I2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::I2::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
int v = 0; int v = 0;
...@@ -1598,14 +1598,14 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1598,14 +1598,14 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
VTypes::U2 u2(v); VTypes::U2 u2(v);
for( int k = 0; k < VTypes::U2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::U2::wsize(); k++, i++ )
i->second->mbval = u2.raw.v[k]; i->second->mbval = u2.raw.v[k];
} }
else if( p->vType == VTypes::vtU2r ) else if( p->vType == VTypes::vtU2r )
{ {
VTypes::U2r u2(v); VTypes::U2r u2(v);
for( int k = 0; k < VTypes::U2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::U2::wsize(); k++, i++ )
i->second->mbval = u2.raw.v[k]; i->second->mbval = u2.raw.v[k];
} }
...@@ -1616,7 +1616,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1616,7 +1616,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::U2::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::U2::wsize()];
for( int k = 0; k < VTypes::U2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::U2::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
unsigned int v = 0; unsigned int v = 0;
......
...@@ -301,9 +301,9 @@ class MBExchange: ...@@ -301,9 +301,9 @@ class MBExchange:
virtual void updateRespondSensors(); virtual void updateRespondSensors();
bool checkUpdateSM( bool wrFunc, long devMode ); bool checkUpdateSM( bool wrFunc, long devMode );
bool checkPoll( bool wrFunc ); bool checkPoll( bool wrFunc ) const;
bool checkProcActive(); bool checkProcActive() const;
void setProcActive( bool st ); void setProcActive( bool st );
void waitSMReady(); void waitSMReady();
......
...@@ -316,7 +316,7 @@ void MBTCPMultiMaster::final_thread() ...@@ -316,7 +316,7 @@ void MBTCPMultiMaster::final_thread()
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBTCPMultiMaster::MBSlaveInfo::check() bool MBTCPMultiMaster::MBSlaveInfo::check() const
{ {
return mbtcp->checkConnection(ip, port, recv_timeout); return mbtcp->checkConnection(ip, port, recv_timeout);
} }
......
...@@ -302,7 +302,7 @@ class MBTCPMultiMaster: ...@@ -302,7 +302,7 @@ class MBTCPMultiMaster:
} }
bool init( std::shared_ptr<DebugStream>& mblog ); bool init( std::shared_ptr<DebugStream>& mblog );
bool check(); bool check() const;
inline void setUse( bool st ) inline void setUse( bool st )
{ {
respond_init = !( st && !use ); respond_init = !( st && !use );
......
...@@ -1771,7 +1771,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1771,7 +1771,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::I2::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::I2::wsize()];
for( int k = 0; k < VTypes::I2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::I2::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::I2 i2(d, VTypes::I2::wsize()); VTypes::I2 i2(d, VTypes::I2::wsize());
...@@ -1788,7 +1788,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1788,7 +1788,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::I2r::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::I2r::wsize()];
for( int k = 0; k < VTypes::I2r::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::I2r::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::I2r i2r(d, VTypes::I2r::wsize()); VTypes::I2r i2r(d, VTypes::I2r::wsize());
...@@ -1805,7 +1805,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1805,7 +1805,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::U2::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::U2::wsize()];
for( int k = 0; k < VTypes::U2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::U2::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::U2 u2(d, VTypes::U2::wsize()); VTypes::U2 u2(d, VTypes::U2::wsize());
...@@ -1822,7 +1822,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1822,7 +1822,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::U2r::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::U2r::wsize()];
for( int k = 0; k < VTypes::U2r::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::U2r::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::U2r u2r(d, VTypes::U2r::wsize()); VTypes::U2r u2r(d, VTypes::U2r::wsize());
...@@ -1839,7 +1839,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1839,7 +1839,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::F2::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::F2::wsize()];
for( int k = 0; k < VTypes::F2::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F2::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::F2 f2(d, VTypes::F2::wsize()); VTypes::F2 f2(d, VTypes::F2::wsize());
...@@ -1857,7 +1857,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1857,7 +1857,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::F2r::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::F2r::wsize()];
for( int k = 0; k < VTypes::F2r::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F2r::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::F2r f2r(d, VTypes::F2r::wsize()); VTypes::F2r f2r(d, VTypes::F2r::wsize());
...@@ -1874,7 +1874,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1874,7 +1874,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::F4::wsize()]; ModbusRTU::ModbusData* d = new ModbusRTU::ModbusData[VTypes::F4::wsize()];
for( int k = 0; k < VTypes::F4::wsize(); k++, i++ ) for( size_t k = 0; k < VTypes::F4::wsize(); k++, i++ )
d[k] = dat[i]; d[k] = dat[i];
VTypes::F4 f4(d, VTypes::F4::wsize()); VTypes::F4 f4(d, VTypes::F4::wsize());
......
...@@ -984,6 +984,7 @@ UniSetTypes::SimpleInfo* SharedMemory::getInfo( CORBA::Long userparam ) ...@@ -984,6 +984,7 @@ UniSetTypes::SimpleInfo* SharedMemory::getInfo( CORBA::Long userparam )
inf << i->info << endl; inf << i->info << endl;
inf << vmon.pretty_str() << endl; inf << vmon.pretty_str() << endl;
if( logserv ) if( logserv )
inf << logserv->getShortInfo() << endl; inf << logserv->getShortInfo() << endl;
else else
......
...@@ -317,7 +317,7 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p ) ...@@ -317,7 +317,7 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p )
return i + sz; return i + sz;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
uint16_t UDPMessage::getDataCRC() uint16_t UDPMessage::getDataCRC() const
{ {
uint16_t crc[3]; uint16_t crc[3];
crc[0] = makeCRC( (unsigned char*)(a_dat), sizeof(a_dat) ); crc[0] = makeCRC( (unsigned char*)(a_dat), sizeof(a_dat) );
......
...@@ -37,17 +37,16 @@ namespace UniSetUDP ...@@ -37,17 +37,16 @@ namespace UniSetUDP
т.к. это не сильно актуально, пока не переделываю. т.к. это не сильно актуально, пока не переделываю.
*/ */
const unsigned int UNETUDP_MAGICNUM = 0x1337A1D; // идентификатор протокола const uint32_t UNETUDP_MAGICNUM = 0x1337A1D; // идентификатор протокола
struct UDPHeader struct UDPHeader
{ {
UDPHeader(): magic(UNETUDP_MAGICNUM), num(0), nodeID(0), procID(0), dcount(0), acount(0) {} UDPHeader(): magic(UNETUDP_MAGICNUM), num(0), nodeID(0), procID(0), dcount(0), acount(0) {}
unsigned int magic; uint32_t magic;
size_t num; size_t num;
long nodeID; long nodeID;
long procID; long procID;
//!\todo может лучше использовать системно-независимый unsigned long, чем size_t?
size_t dcount; /*!< количество булевых величин */ size_t dcount; /*!< количество булевых величин */
size_t acount; /*!< количество аналоговых величин */ size_t acount; /*!< количество аналоговых величин */
...@@ -129,7 +128,7 @@ namespace UniSetUDP ...@@ -129,7 +128,7 @@ namespace UniSetUDP
return acount; return acount;
} }
uint16_t getDataCRC(); uint16_t getDataCRC() const;
// количество байт в пакете с булевыми переменными... // количество байт в пакете с булевыми переменными...
size_t d_byte() const size_t d_byte() const
......
...@@ -54,7 +54,7 @@ namespace MTR ...@@ -54,7 +54,7 @@ namespace MTR
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::string type2str( MTRType t ); /*!< преоразование строки в тип */ std::string type2str( MTRType t ); /*!< преоразование строки в тип */
MTRType str2type( const std::string& s ); /*!< преобразование названия в строку */ MTRType str2type( const std::string& s ); /*!< преобразование названия в строку */
int wsize( MTRType t ); /*!< длина данных в словах */ size_t wsize( MTRType t ); /*!< длина данных в словах */
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Информация // Информация
const ModbusRTU::ModbusData regModelNumber = 0x01; const ModbusRTU::ModbusData regModelNumber = 0x01;
...@@ -129,7 +129,7 @@ namespace MTR ...@@ -129,7 +129,7 @@ namespace MTR
void update_communication_params( ModbusRTU::ModbusAddr reg, ModbusRTU::ModbusData data, void update_communication_params( ModbusRTU::ModbusAddr reg, ModbusRTU::ModbusData data,
ModbusRTUMaster* mb, ModbusRTU::ModbusAddr& addr, int verb ); ModbusRTUMaster* mb, ModbusRTU::ModbusAddr& addr, int verb );
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
static const int u2size = 2; static const size_t u2size = 2;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
class T1 class T1
{ {
...@@ -140,7 +140,7 @@ namespace MTR ...@@ -140,7 +140,7 @@ namespace MTR
~T1() {} ~T1() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -163,7 +163,7 @@ namespace MTR ...@@ -163,7 +163,7 @@ namespace MTR
~T2() {} ~T2() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -205,7 +205,7 @@ namespace MTR ...@@ -205,7 +205,7 @@ namespace MTR
raw.v[1] = v2; raw.v[1] = v2;
} }
T3( const ModbusRTU::ModbusData* data, int size ) T3( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -218,7 +218,7 @@ namespace MTR ...@@ -218,7 +218,7 @@ namespace MTR
~T3() {} ~T3() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -262,7 +262,7 @@ namespace MTR ...@@ -262,7 +262,7 @@ namespace MTR
~T4() {} ~T4() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -311,7 +311,7 @@ namespace MTR ...@@ -311,7 +311,7 @@ namespace MTR
val = raw.u2.val * pow( (long)10, (long)raw.u2.exp ); val = raw.u2.val * pow( (long)10, (long)raw.u2.exp );
} }
T5( const ModbusRTU::ModbusData* data, int size ): val(0) T5( const ModbusRTU::ModbusData* data, size_t size ): val(0)
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -325,7 +325,7 @@ namespace MTR ...@@ -325,7 +325,7 @@ namespace MTR
~T5() {} ~T5() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -374,7 +374,7 @@ namespace MTR ...@@ -374,7 +374,7 @@ namespace MTR
val = raw.u2.val * pow( (long)10, (long)raw.u2.exp ); val = raw.u2.val * pow( (long)10, (long)raw.u2.exp );
} }
T6( const ModbusRTU::ModbusData* data, int size ) T6( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -388,7 +388,7 @@ namespace MTR ...@@ -388,7 +388,7 @@ namespace MTR
~T6() {} ~T6() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -437,7 +437,7 @@ namespace MTR ...@@ -437,7 +437,7 @@ namespace MTR
val = raw.u2.val * pow( (long)10, (long) - 4 ); val = raw.u2.val * pow( (long)10, (long) - 4 );
} }
T7( const ModbusRTU::ModbusData* data, int size ) T7( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -451,7 +451,7 @@ namespace MTR ...@@ -451,7 +451,7 @@ namespace MTR
~T7() {} ~T7() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -494,7 +494,7 @@ namespace MTR ...@@ -494,7 +494,7 @@ namespace MTR
raw.v[1] = v2; raw.v[1] = v2;
} }
T8( const ModbusRTU::ModbusData* data, int size ) T8( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -524,7 +524,7 @@ namespace MTR ...@@ -524,7 +524,7 @@ namespace MTR
~T8() {} ~T8() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -566,7 +566,7 @@ namespace MTR ...@@ -566,7 +566,7 @@ namespace MTR
raw.v[1] = v2; raw.v[1] = v2;
} }
T9( const ModbusRTU::ModbusData* data, int size ) T9( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -596,7 +596,7 @@ namespace MTR ...@@ -596,7 +596,7 @@ namespace MTR
~T9() {} ~T9() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -637,7 +637,7 @@ namespace MTR ...@@ -637,7 +637,7 @@ namespace MTR
raw.v[1] = v2; raw.v[1] = v2;
} }
T10( const ModbusRTU::ModbusData* data, int size ) T10( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -663,7 +663,7 @@ namespace MTR ...@@ -663,7 +663,7 @@ namespace MTR
~T10() {} ~T10() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -698,7 +698,7 @@ namespace MTR ...@@ -698,7 +698,7 @@ namespace MTR
~T16() {} ~T16() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -746,7 +746,7 @@ namespace MTR ...@@ -746,7 +746,7 @@ namespace MTR
~T17() {} ~T17() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -797,7 +797,7 @@ namespace MTR ...@@ -797,7 +797,7 @@ namespace MTR
raw.val = f; raw.val = f;
} }
F1( const ModbusRTU::ModbusData* data, int size ) F1( const ModbusRTU::ModbusData* data, size_t size )
{ {
if( size >= u2size ) if( size >= u2size )
{ {
...@@ -810,7 +810,7 @@ namespace MTR ...@@ -810,7 +810,7 @@ namespace MTR
~F1() {} ~F1() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return u2size; return u2size;
} }
...@@ -855,7 +855,7 @@ namespace MTR ...@@ -855,7 +855,7 @@ namespace MTR
~T_Str16() {} ~T_Str16() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 8; return 8;
} }
...@@ -892,7 +892,7 @@ namespace MTR ...@@ -892,7 +892,7 @@ namespace MTR
~T_Str8() {} ~T_Str8() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static unsigned int wsize() static size_t wsize()
{ {
return 4; return 4;
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2016-07-26+03:00 // generate timestamp: 2016-08-01+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
...@@ -29,7 +29,7 @@ class UObject_SK: ...@@ -29,7 +29,7 @@ class UObject_SK:
public UniSetObject public UniSetObject
{ {
public: public:
UObject_SK( UniSetTypes::ObjectId id, xmlNode* node=UniSetTypes::uniset_conf()->getNode("UObject"), const std::string& argprefix="" ); UObject_SK( UniSetTypes::ObjectId id, xmlNode* node = UniSetTypes::uniset_conf()->getNode("UObject"), const std::string& argprefix = "" );
UObject_SK(); UObject_SK();
virtual ~UObject_SK(); virtual ~UObject_SK();
...@@ -43,54 +43,60 @@ class UObject_SK: ...@@ -43,54 +43,60 @@ class UObject_SK:
virtual bool setMsg( UniSetTypes::ObjectId code, bool state = true ); virtual bool setMsg( UniSetTypes::ObjectId code, bool state = true );
inline std::shared_ptr<DebugStream> log(){ return mylog; } inline std::shared_ptr<DebugStream> log()
inline std::shared_ptr<LogAgregator> logAgregator(){ return loga; } {
return mylog;
}
inline std::shared_ptr<LogAgregator> logAgregator()
{
return loga;
}
void init_dlog( std::shared_ptr<DebugStream> d ); void init_dlog( std::shared_ptr<DebugStream> d );
// "синтаксический сахар"..для логов // "синтаксический сахар"..для логов
#ifndef myinfo #ifndef myinfo
#define myinfo if( log()->debugging(Debug::INFO) ) log()->info() #define myinfo if( log()->debugging(Debug::INFO) ) log()->info()
#endif #endif
#ifndef mywarn #ifndef mywarn
#define mywarn if( log()->debugging(Debug::WARN) ) log()->warn() #define mywarn if( log()->debugging(Debug::WARN) ) log()->warn()
#endif #endif
#ifndef mycrit #ifndef mycrit
#define mycrit if( log()->debugging(Debug::CRIT) ) log()->crit() #define mycrit if( log()->debugging(Debug::CRIT) ) log()->crit()
#endif #endif
#ifndef mylog1 #ifndef mylog1
#define mylog1 if( log()->debugging(Debug::LEVEL1) ) log()->level1() #define mylog1 if( log()->debugging(Debug::LEVEL1) ) log()->level1()
#endif #endif
#ifndef mylog2 #ifndef mylog2
#define mylog2 if( log()->debugging(Debug::LEVEL2) ) log()->level2() #define mylog2 if( log()->debugging(Debug::LEVEL2) ) log()->level2()
#endif #endif
#ifndef mylog3 #ifndef mylog3
#define mylog3 if( log()->debugging(Debug::LEVEL3) ) log()->level3() #define mylog3 if( log()->debugging(Debug::LEVEL3) ) log()->level3()
#endif #endif
#ifndef mylog4 #ifndef mylog4
#define mylog4 if( log()->debugging(Debug::LEVEL4) ) log()->level4() #define mylog4 if( log()->debugging(Debug::LEVEL4) ) log()->level4()
#endif #endif
#ifndef mylog5 #ifndef mylog5
#define mylog5 if( log()->debugging(Debug::LEVEL5) ) log()->level5() #define mylog5 if( log()->debugging(Debug::LEVEL5) ) log()->level5()
#endif #endif
#ifndef mylog6 #ifndef mylog6
#define mylog6 if( log()->debugging(Debug::LEVEL6) ) log()->level6() #define mylog6 if( log()->debugging(Debug::LEVEL6) ) log()->level6()
#endif #endif
#ifndef mylog7 #ifndef mylog7
#define mylog7 if( log()->debugging(Debug::LEVEL7) ) log()->level7() #define mylog7 if( log()->debugging(Debug::LEVEL7) ) log()->level7()
#endif #endif
#ifndef mylog8 #ifndef mylog8
#define mylog8 if( log()->debugging(Debug::LEVEL8) ) log()->level8() #define mylog8 if( log()->debugging(Debug::LEVEL8) ) log()->level8()
#endif #endif
#ifndef mylog9 #ifndef mylog9
#define mylog9 if( log()->debugging(Debug::LEVEL9) ) log()->level9() #define mylog9 if( log()->debugging(Debug::LEVEL9) ) log()->level9()
#endif #endif
#ifndef mylogany #ifndef mylogany
#define mylogany log()->any() #define mylogany log()->any()
#endif #endif
#ifndef vmonit #ifndef vmonit
#define vmonit( var ) vmon.add( #var, var ) #define vmonit( var ) vmon.add( #var, var )
#endif #endif
// Вспомогательные функции для удобства логирования // Вспомогательные функции для удобства логирования
// ------------------------------------------------------------ // ------------------------------------------------------------
...@@ -107,16 +113,19 @@ class UObject_SK: ...@@ -107,16 +113,19 @@ class UObject_SK:
\param id - идентификатор датчика \param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить \param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/ */
std::string str( UniSetTypes::ObjectId id, bool showLinkName=true ); std::string str( UniSetTypes::ObjectId id, bool showLinkName = true ) const;
/*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val /*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val
\param id - идентификатор датчика \param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить \param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/ */
std::string strval( UniSetTypes::ObjectId id, bool showLinkName=true ); std::string strval( UniSetTypes::ObjectId id, bool showLinkName = true ) const;
/*! Вывод состояния внутренних переменных */ /*! Вывод состояния внутренних переменных */
inline std::string dumpVars(){ return std::move(vmon.pretty_str()); } inline std::string dumpVars()
{
return std::move(vmon.pretty_str());
}
// ------------------------------------------------------------ // ------------------------------------------------------------
std::string help(); std::string help();
...@@ -145,13 +154,16 @@ class UObject_SK: ...@@ -145,13 +154,16 @@ class UObject_SK:
virtual void callback() override; virtual void callback() override;
virtual void processingMessage( const UniSetTypes::VoidMessage* msg ) override; virtual void processingMessage( const UniSetTypes::VoidMessage* msg ) override;
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ){}; virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) {};
virtual void askSensors( UniversalIO::UIOCommand cmd ){} virtual void askSensors( UniversalIO::UIOCommand cmd ) {}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override{} virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override {}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override{} virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override {}
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */ virtual std::string getMonitInfo()
{
return ""; /*!< пользовательская информация выводимая в getInfo() */
}
virtual void testMode( bool state ); virtual void testMode( bool state );
void updatePreviousValues(); void updatePreviousValues();
...@@ -172,7 +184,7 @@ class UObject_SK: ...@@ -172,7 +184,7 @@ class UObject_SK:
int resetMsgTime; int resetMsgTime;
// Выполнение очередного шага программы // Выполнение очередного шага программы
virtual void step(){} virtual void step() {}
int sleep_msec; /*!< пауза между итерациями */ int sleep_msec; /*!< пауза между итерациями */
bool active; bool active;
...@@ -187,9 +199,15 @@ class UObject_SK: ...@@ -187,9 +199,15 @@ class UObject_SK:
xmlNode* confnode; xmlNode* confnode;
/*! получить числовое свойство из конф. файла по привязанной confnode */ /*! получить числовое свойство из конф. файла по привязанной confnode */
int getIntProp(const std::string& name) { return UniSetTypes::uniset_conf()->getIntProp(confnode, name); } int getIntProp(const std::string& name)
{
return UniSetTypes::uniset_conf()->getIntProp(confnode, name);
}
/*! получить текстовое свойство из конф. файла по привязанной confnode */ /*! получить текстовое свойство из конф. файла по привязанной confnode */
inline const std::string getProp(const std::string& name) { return UniSetTypes::uniset_conf()->getProp(confnode, name); } inline const std::string getProp(const std::string& name)
{
return UniSetTypes::uniset_conf()->getProp(confnode, name);
}
timeout_t smReadyTimeout; /*!< время ожидания готовности SM */ timeout_t smReadyTimeout; /*!< время ожидания готовности SM */
std::atomic_bool activated; std::atomic_bool activated;
......
...@@ -54,7 +54,7 @@ namespace VTypes ...@@ -54,7 +54,7 @@ namespace VTypes
public: public:
// ------------------------------------------ // ------------------------------------------
static const int f2Size = 2; static const size_t f2Size = 2;
/*! тип хранения в памяти */ /*! тип хранения в памяти */
typedef union typedef union
{ {
...@@ -72,16 +72,16 @@ namespace VTypes ...@@ -72,16 +72,16 @@ namespace VTypes
{ {
raw.val = f; raw.val = f;
} }
F2( const ModbusRTU::ModbusData* data, int size ) F2( const ModbusRTU::ModbusData* data, size_t size )
{ {
for( int i = 0; i < wsize() && i < size; i++ ) for( size_t i = 0; i < wsize() && i < size; i++ )
raw.v[i] = data[i]; raw.v[i] = data[i];
} }
~F2() {} ~F2() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return f2Size; return f2Size;
} }
...@@ -121,7 +121,7 @@ namespace VTypes ...@@ -121,7 +121,7 @@ namespace VTypes
raw_backorder = raw; raw_backorder = raw;
std::swap(raw_backorder.v[0], raw_backorder.v[1]); std::swap(raw_backorder.v[0], raw_backorder.v[1]);
} }
F2r( const ModbusRTU::ModbusData* data, int size ): F2(data, size) F2r( const ModbusRTU::ModbusData* data, size_t size ): F2(data, size)
{ {
// принимаем в обратном порядке.. поэтому переворачиваем raw // принимаем в обратном порядке.. поэтому переворачиваем raw
raw_backorder = raw; raw_backorder = raw;
...@@ -137,7 +137,7 @@ namespace VTypes ...@@ -137,7 +137,7 @@ namespace VTypes
{ {
public: public:
// ------------------------------------------ // ------------------------------------------
static const int f4Size = 4; static const size_t f4Size = 4;
/*! тип хранения в памяти */ /*! тип хранения в памяти */
typedef union typedef union
{ {
...@@ -155,16 +155,16 @@ namespace VTypes ...@@ -155,16 +155,16 @@ namespace VTypes
{ {
raw.val = f; raw.val = f;
} }
F4( const ModbusRTU::ModbusData* data, int size ) F4( const ModbusRTU::ModbusData* data, size_t size )
{ {
for( int i = 0; i < wsize() && i < size; i++ ) for( size_t i = 0; i < wsize() && i < size; i++ )
raw.v[i] = data[i]; raw.v[i] = data[i];
} }
~F4() {} ~F4() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return f4Size; return f4Size;
} }
...@@ -190,7 +190,7 @@ namespace VTypes ...@@ -190,7 +190,7 @@ namespace VTypes
{ {
public: public:
static const int bsize = 2; static const size_t bsize = 2;
// ------------------------------------------ // ------------------------------------------
/*! тип хранения в памяти */ /*! тип хранения в памяти */
...@@ -224,7 +224,7 @@ namespace VTypes ...@@ -224,7 +224,7 @@ namespace VTypes
~Byte() {} ~Byte() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -272,7 +272,7 @@ namespace VTypes ...@@ -272,7 +272,7 @@ namespace VTypes
~Unsigned() {} ~Unsigned() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -311,7 +311,7 @@ namespace VTypes ...@@ -311,7 +311,7 @@ namespace VTypes
~Signed() {} ~Signed() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return 1; return 1;
} }
...@@ -334,7 +334,7 @@ namespace VTypes ...@@ -334,7 +334,7 @@ namespace VTypes
public: public:
// ------------------------------------------ // ------------------------------------------
static const int i2Size = 2; static const size_t i2Size = 2;
/*! тип хранения в памяти */ /*! тип хранения в памяти */
typedef union typedef union
{ {
...@@ -352,16 +352,16 @@ namespace VTypes ...@@ -352,16 +352,16 @@ namespace VTypes
{ {
raw.val = v; raw.val = v;
} }
I2( const ModbusRTU::ModbusData* data, int size ) I2( const ModbusRTU::ModbusData* data, size_t size )
{ {
for( int i = 0; i < wsize() && i < size; i++ ) for( size_t i = 0; i < wsize() && i < size; i++ )
raw.v[i] = data[i]; raw.v[i] = data[i];
} }
~I2() {} ~I2() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return i2Size; return i2Size;
} }
...@@ -390,7 +390,7 @@ namespace VTypes ...@@ -390,7 +390,7 @@ namespace VTypes
raw_backorder = raw; raw_backorder = raw;
std::swap(raw_backorder.v[0], raw_backorder.v[1]); std::swap(raw_backorder.v[0], raw_backorder.v[1]);
} }
I2r( const ModbusRTU::ModbusData* data, int size ): I2(data, size) I2r( const ModbusRTU::ModbusData* data, size_t size ): I2(data, size)
{ {
// принимаем в обратном порядке.. поэтому переворачиваем raw // принимаем в обратном порядке.. поэтому переворачиваем raw
raw_backorder = raw; raw_backorder = raw;
...@@ -407,7 +407,7 @@ namespace VTypes ...@@ -407,7 +407,7 @@ namespace VTypes
public: public:
// ------------------------------------------ // ------------------------------------------
static const int u2Size = 2; static const size_t u2Size = 2;
/*! тип хранения в памяти */ /*! тип хранения в памяти */
typedef union typedef union
{ {
...@@ -425,16 +425,16 @@ namespace VTypes ...@@ -425,16 +425,16 @@ namespace VTypes
{ {
raw.val = v; raw.val = v;
} }
U2( const ModbusRTU::ModbusData* data, int size ) U2( const ModbusRTU::ModbusData* data, size_t size )
{ {
for( int i = 0; i < wsize() && i < size; i++ ) for( size_t i = 0; i < wsize() && i < size; i++ )
raw.v[i] = data[i]; raw.v[i] = data[i];
} }
~U2() {} ~U2() {}
// ------------------------------------------ // ------------------------------------------
/*! размер в словах */ /*! размер в словах */
static int wsize() static size_t wsize()
{ {
return u2Size; return u2Size;
} }
...@@ -463,7 +463,7 @@ namespace VTypes ...@@ -463,7 +463,7 @@ namespace VTypes
raw_backorder = raw; raw_backorder = raw;
std::swap(raw_backorder.v[0], raw_backorder.v[1]); std::swap(raw_backorder.v[0], raw_backorder.v[1]);
} }
U2r( const ModbusRTU::ModbusData* data, int size ): U2(data, size) U2r( const ModbusRTU::ModbusData* data, size_t size ): U2(data, size)
{ {
// принимаем в обратном порядке.. поэтому переворачиваем raw // принимаем в обратном порядке.. поэтому переворачиваем raw
raw_backorder = raw; raw_backorder = raw;
......
...@@ -128,7 +128,7 @@ namespace MTR ...@@ -128,7 +128,7 @@ namespace MTR
return "Unknown"; return "Unknown";
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int wsize( MTRType t ) size_t wsize( MTRType t )
{ {
if( t == mtT1 ) if( t == mtT1 )
return T1::wsize(); return T1::wsize();
......
...@@ -23,20 +23,22 @@ int main(int argc, const char** argv) ...@@ -23,20 +23,22 @@ int main(int argc, const char** argv)
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
act->run(true); act->run(true);
SensorMessage smsg(100,2); SensorMessage smsg(100, 2);
TransportMessage tm( std::move(smsg.transport_msg()) ); TransportMessage tm( std::move(smsg.transport_msg()) );
size_t num = 0; size_t num = 0;
const size_t max = 100000; const size_t max = 100000;
std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now(); start = std::chrono::system_clock::now();
for( num=0; num<max; num++ )
for( num = 0; num < max; num++ )
{ {
tp->push(tm); tp->push(tm);
if( tp->isFullQueue() ) if( tp->isFullQueue() )
break; break;
if( num%100 == 0 ) if( num % 100 == 0 )
msleep(50); msleep(50);
} }
......
...@@ -51,6 +51,14 @@ void TestProc::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -51,6 +51,14 @@ void TestProc::sysCommand( const UniSetTypes::SystemMessage* sm )
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
string TestProc::getMonitInfo()
{
int* p = 0;
(*p) = 10;
return "";
}
// -----------------------------------------------------------------------------
void TestProc::sensorInfo( const SensorMessage* sm ) void TestProc::sensorInfo( const SensorMessage* sm )
{ {
/* /*
......
...@@ -25,9 +25,10 @@ class TestProc: ...@@ -25,9 +25,10 @@ class TestProc:
}; };
virtual void step(); virtual void step();
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ); virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override;
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ); virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override;
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ); virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override;
virtual std::string getMonitInfo() override;
void test_depend(); void test_depend();
void test_undefined_state(); void test_undefined_state();
......
#!/bin/sh #!/bin/sh
gdb --batch -n -ex "thread apply all bt" $1 $2 exec gdb --batch -n -ex "thread apply all bt" $1 $2
# | ssh xxxxxx # | ssh xxxxxx
# gcore $2 # gcore $2
...@@ -18,7 +18,7 @@ class EventLoopServer ...@@ -18,7 +18,7 @@ class EventLoopServer
EventLoopServer(); EventLoopServer();
virtual ~EventLoopServer(); virtual ~EventLoopServer();
bool evIsActive(); bool evIsActive() const;
protected: protected:
// действия при завершении // действия при завершении
......
...@@ -123,19 +123,19 @@ class HourGlass ...@@ -123,19 +123,19 @@ class HourGlass
} }
// получить прошедшее время // получить прошедшее время
inline timeout_t current() inline timeout_t current() const
{ {
return t.getCurrent(); return t.getCurrent();
} }
// получить заданное время // получить заданное время
inline timeout_t interval() inline timeout_t interval() const
{ {
return t.getInterval(); return t.getInterval();
} }
// проверить наступление // проверить наступление
inline bool check() inline bool check() const
{ {
// пока часы не "стоят" // пока часы не "стоят"
// всегда false // всегда false
...@@ -145,7 +145,7 @@ class HourGlass ...@@ -145,7 +145,7 @@ class HourGlass
return t.checkTime(); return t.checkTime();
} }
inline bool enabled() inline bool enabled() const
{ {
return _state; return _state;
} }
......
...@@ -160,7 +160,7 @@ class LogServer: ...@@ -160,7 +160,7 @@ class LogServer:
// (они необходимы для восстановления настроек после завершения всех (!) сессий) // (они необходимы для восстановления настроек после завершения всех (!) сессий)
// т.к. shared_ptr-ов может быть много, то в качестве ключа используем указатель на "реальный объект"(внутри shared_ptr) // т.к. shared_ptr-ов может быть много, то в качестве ключа используем указатель на "реальный объект"(внутри shared_ptr)
// но только для этого(!), пользоваться этим указателем ни в коем случае нельзя (и нужно проверять shared_ptr на существование) // но только для этого(!), пользоваться этим указателем ни в коем случае нельзя (и нужно проверять shared_ptr на существование)
std::unordered_map< DebugStream*,Debug::type > defaultLogLevels; std::unordered_map< DebugStream*, Debug::type > defaultLogLevels;
std::string myname = { "LogServer" }; std::string myname = { "LogServer" };
std::string addr = { "" }; std::string addr = { "" };
......
...@@ -41,14 +41,13 @@ class LogSession ...@@ -41,14 +41,13 @@ class LogSession
// сигнал о приходе команды: std::string func( LogSession*, command, logname ); // сигнал о приходе команды: std::string func( LogSession*, command, logname );
// \return какую-то информацию, которая будет послана client-у. Если return.empty(), то ничего послано не будет. // \return какую-то информацию, которая будет послана client-у. Если return.empty(), то ничего послано не будет.
typedef sigc::signal<std::string,LogSession*,LogServerTypes::Command, const std::string& > LogSessionCommand_Signal; typedef sigc::signal<std::string, LogSession*, LogServerTypes::Command, const std::string& > LogSessionCommand_Signal;
LogSessionCommand_Signal signal_logsession_command(); LogSessionCommand_Signal signal_logsession_command();
inline void cancel() // прервать работу
{ void cancel();
cancelled = true;
} inline std::string getClientAddress() const
inline std::string getClientAddress()
{ {
return caddr; return caddr;
} }
...@@ -68,17 +67,13 @@ class LogSession ...@@ -68,17 +67,13 @@ class LogSession
//! Установить размер буфера для сообщений (количество записей. Не размер в байтах!!) //! Установить размер буфера для сообщений (количество записей. Не размер в байтах!!)
void setMaxBufSize( size_t num ); void setMaxBufSize( size_t num );
size_t getMaxBufSize() const;
inline size_t getMaxBufSize()
{
return maxRecordsNum;
}
// запуск обработки входящих запросов // запуск обработки входящих запросов
void run( const ev::loop_ref& loop ); void run( const ev::loop_ref& loop );
void terminate(); void terminate();
bool isAcive(); bool isAcive() const;
std::string getShortInfo(); std::string getShortInfo();
......
...@@ -70,14 +70,14 @@ class MQAtomic ...@@ -70,14 +70,14 @@ class MQAtomic
*/ */
VoidMessagePtr top(); VoidMessagePtr top();
size_t size(); size_t size() const;
bool empty(); bool empty() const;
// ----- Настройки ----- // ----- Настройки -----
// неявно подразумевается, что всё настривается до первого использования // неявно подразумевается, что всё настривается до первого использования
// ---------------------- // ----------------------
void setMaxSizeOfMessageQueue( size_t s ); void setMaxSizeOfMessageQueue( size_t s );
size_t getMaxSizeOfMessageQueue(); size_t getMaxSizeOfMessageQueue() const;
/*! Стратегия при переполнении */ /*! Стратегия при переполнении */
enum LostStrategy enum LostStrategy
......
...@@ -56,7 +56,7 @@ class MQMutex ...@@ -56,7 +56,7 @@ class MQMutex
// неявно подразумевается, что всё настраивается до первого использования // неявно подразумевается, что всё настраивается до первого использования
// ---------------------- // ----------------------
void setMaxSizeOfMessageQueue( size_t s ); void setMaxSizeOfMessageQueue( size_t s );
size_t getMaxSizeOfMessageQueue(); size_t getMaxSizeOfMessageQueue() const;
/*! Стратегия при переполнении */ /*! Стратегия при переполнении */
enum LostStrategy enum LostStrategy
......
...@@ -34,32 +34,32 @@ namespace UniSetTypes ...@@ -34,32 +34,32 @@ namespace UniSetTypes
virtual ~ObjectIndex() {}; virtual ~ObjectIndex() {};
// info // info
virtual const ObjectInfo* getObjectInfo( const UniSetTypes::ObjectId ) = 0; virtual const ObjectInfo* getObjectInfo( const UniSetTypes::ObjectId ) const = 0;
virtual const ObjectInfo* getObjectInfo( const std::string& name ) = 0; virtual const ObjectInfo* getObjectInfo( const std::string& name ) const = 0;
static std::string getBaseName( const std::string& fname ); static std::string getBaseName( const std::string& fname );
// object id // object id
virtual ObjectId getIdByName(const std::string& name) = 0; virtual ObjectId getIdByName(const std::string& name) const = 0;
virtual std::string getNameById( const UniSetTypes::ObjectId id ); virtual std::string getNameById( const UniSetTypes::ObjectId id ) const;
// node // node
inline std::string getNodeName( const UniSetTypes::ObjectId id ) inline std::string getNodeName( const UniSetTypes::ObjectId id ) const
{ {
return getNameById(id); return getNameById(id);
} }
inline ObjectId getNodeId( const std::string& name ) inline ObjectId getNodeId( const std::string& name ) const
{ {
return getIdByName(name); return getIdByName(name);
} }
// src name // src name
virtual std::string getMapName( const UniSetTypes::ObjectId id ) = 0; virtual std::string getMapName( const UniSetTypes::ObjectId id ) const = 0;
virtual std::string getTextName( const UniSetTypes::ObjectId id ) = 0; virtual std::string getTextName( const UniSetTypes::ObjectId id ) const = 0;
// //
virtual std::ostream& printMap(std::ostream& os) = 0; virtual std::ostream& printMap(std::ostream& os) const = 0;
void initLocalNode( const UniSetTypes::ObjectId nodeid ); void initLocalNode( const UniSetTypes::ObjectId nodeid );
......
...@@ -42,23 +42,23 @@ namespace UniSetTypes ...@@ -42,23 +42,23 @@ namespace UniSetTypes
ObjectIndex_Array(const ObjectInfo* objectInfo); ObjectIndex_Array(const ObjectInfo* objectInfo);
virtual ~ObjectIndex_Array(); virtual ~ObjectIndex_Array();
virtual const ObjectInfo* getObjectInfo( const ObjectId ) override; virtual const ObjectInfo* getObjectInfo( const ObjectId ) const override;
virtual const ObjectInfo* getObjectInfo( const std::string& name ) override; virtual const ObjectInfo* getObjectInfo( const std::string& name ) const override;
virtual ObjectId getIdByName( const std::string& name ) override; virtual ObjectId getIdByName( const std::string& name ) const override;
virtual std::string getMapName( const ObjectId id ) override; virtual std::string getMapName( const ObjectId id ) const override;
virtual std::string getTextName( const ObjectId id ) override; virtual std::string getTextName( const ObjectId id ) const override;
virtual std::ostream& printMap(std::ostream& os) override; virtual std::ostream& printMap(std::ostream& os) const override;
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_Array& oi ); friend std::ostream& operator<<(std::ostream& os, ObjectIndex_Array& oi );
private: private:
int numOfObject; size_t numOfObject;
typedef std::unordered_map<std::string, ObjectId> MapObjectKey; typedef std::unordered_map<std::string, ObjectId> MapObjectKey;
MapObjectKey::iterator MapObjectKeyIterator; MapObjectKey::iterator MapObjectKeyIterator;
MapObjectKey mok; MapObjectKey mok;
const ObjectInfo* objectInfo; const ObjectInfo* objectInfo;
int maxId; size_t maxId;
}; };
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
} // end of namespace } // end of namespace
......
...@@ -36,17 +36,17 @@ namespace UniSetTypes ...@@ -36,17 +36,17 @@ namespace UniSetTypes
public ObjectIndex public ObjectIndex
{ {
public: public:
ObjectIndex_XML(const std::string& xmlfile, int minSize = 1000 ); ObjectIndex_XML(const std::string& xmlfile, size_t minSize = 1000 );
ObjectIndex_XML( const std::shared_ptr<UniXML>& xml, int minSize = 1000 ); ObjectIndex_XML( const std::shared_ptr<UniXML>& xml, size_t minSize = 1000 );
virtual ~ObjectIndex_XML(); virtual ~ObjectIndex_XML();
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const ObjectId ) override; virtual const UniSetTypes::ObjectInfo* getObjectInfo( const ObjectId ) const override;
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name ) override; virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name ) const override;
virtual ObjectId getIdByName( const std::string& name ) override; virtual ObjectId getIdByName( const std::string& name ) const override;
virtual std::string getMapName( const ObjectId id ) override; virtual std::string getMapName( const ObjectId id ) const override;
virtual std::string getTextName( const ObjectId id ) override; virtual std::string getTextName( const ObjectId id ) const override;
virtual std::ostream& printMap(std::ostream& os) override; virtual std::ostream& printMap(std::ostream& os) const override;
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi ); friend std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi );
protected: protected:
......
...@@ -30,13 +30,13 @@ class ObjectIndex_idXML: ...@@ -30,13 +30,13 @@ class ObjectIndex_idXML:
ObjectIndex_idXML( const std::shared_ptr<UniXML>& xml ); ObjectIndex_idXML( const std::shared_ptr<UniXML>& xml );
virtual ~ObjectIndex_idXML(); virtual ~ObjectIndex_idXML();
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const UniSetTypes::ObjectId ) override; virtual const UniSetTypes::ObjectInfo* getObjectInfo( const UniSetTypes::ObjectId ) const override;
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name ) override; virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name ) const override;
virtual UniSetTypes::ObjectId getIdByName( const std::string& name ) override; virtual UniSetTypes::ObjectId getIdByName( const std::string& name ) const override;
virtual std::string getMapName( const UniSetTypes::ObjectId id ) override; virtual std::string getMapName( const UniSetTypes::ObjectId id ) const override;
virtual std::string getTextName( const UniSetTypes::ObjectId id ) override; virtual std::string getTextName( const UniSetTypes::ObjectId id ) const override;
virtual std::ostream& printMap( std::ostream& os ) override; virtual std::ostream& printMap( std::ostream& os ) const override;
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi ); friend std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi );
protected: protected:
......
...@@ -105,7 +105,7 @@ class OmniThreadCreator: ...@@ -105,7 +105,7 @@ class OmniThreadCreator:
{ {
exit(0); exit(0);
} }
inline pid_t getTID() inline int getTID()
{ {
return id(); return id();
} }
......
...@@ -73,7 +73,6 @@ class Restorer_XML ...@@ -73,7 +73,6 @@ class Restorer_XML
it - интератор(указатель) на текущий считываемый xml-узел (<consumer>) it - интератор(указатель) на текущий считываемый xml-узел (<consumer>)
sec - указатель на текущий узел сообщения (<item>) sec - указатель на текущий узел сообщения (<item>)
*/ */
void setReadConsumerItem( ReaderSlot sl ); void setReadConsumerItem( ReaderSlot sl );
......
...@@ -69,7 +69,7 @@ class Trigger ...@@ -69,7 +69,7 @@ class Trigger
return false; return false;
} }
inline bool get() inline bool get() const
{ {
return oldstate; return oldstate;
} }
......
...@@ -82,13 +82,13 @@ class TriggerAND ...@@ -82,13 +82,13 @@ class TriggerAND
TriggerAND(Caller* r, Action a); TriggerAND(Caller* r, Action a);
~TriggerAND(); ~TriggerAND();
inline bool state() inline bool state() const
{ {
return out; return out;
} }
bool getState(InputType in); bool getState(InputType in) const;
bool commit(InputType in, bool state); bool commit(InputType in, bool state);
void add(InputType in, bool state); void add(InputType in, bool state);
......
...@@ -69,9 +69,9 @@ void TriggerAND<Caller,InputType>::remove(InputType num) ...@@ -69,9 +69,9 @@ void TriggerAND<Caller,InputType>::remove(InputType num)
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
template<class Caller, typename InputType> template<class Caller, typename InputType>
bool TriggerAND<Caller,InputType>::getState(InputType num) bool TriggerAND<Caller,InputType>::getState(InputType num) const
{ {
typename InputMap::iterator it=inputs.find(num); auto it=inputs.find(num);
if( it!=inputs.end() ) if( it!=inputs.end() )
return it->second; return it->second;
......
...@@ -81,12 +81,12 @@ class TriggerOR ...@@ -81,12 +81,12 @@ class TriggerOR
TriggerOR(Caller* r, Action a); TriggerOR(Caller* r, Action a);
~TriggerOR(); ~TriggerOR();
inline bool state() inline bool state() const
{ {
return out; return out;
} }
bool getState(InputType in); bool getState(InputType in) const;
bool commit(InputType in, bool state); bool commit(InputType in, bool state);
void add(InputType in, bool state); void add(InputType in, bool state);
......
...@@ -60,7 +60,7 @@ void TriggerOR<Caller,InputType>::add(InputType num, bool state) ...@@ -60,7 +60,7 @@ void TriggerOR<Caller,InputType>::add(InputType num, bool state)
template<class Caller, typename InputType> template<class Caller, typename InputType>
void TriggerOR<Caller,InputType>::remove(InputType num) void TriggerOR<Caller,InputType>::remove(InputType num)
{ {
typename InputMap::iterator it=inputs.find(num); auto it=inputs.find(num);
if( it!=inputs.end() ) if( it!=inputs.end() )
inputs.erase(it); inputs.erase(it);
...@@ -69,9 +69,9 @@ void TriggerOR<Caller,InputType>::remove(InputType num) ...@@ -69,9 +69,9 @@ void TriggerOR<Caller,InputType>::remove(InputType num)
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
template<class Caller, typename InputType> template<class Caller, typename InputType>
bool TriggerOR<Caller,InputType>::getState(InputType num) bool TriggerOR<Caller,InputType>::getState(InputType num) const
{ {
typename InputMap::iterator it=inputs.find(num); auto it=inputs.find(num);
if( it!=inputs.end() ) if( it!=inputs.end() )
return it->second; return it->second;
......
...@@ -94,7 +94,7 @@ class TriggerOUT ...@@ -94,7 +94,7 @@ class TriggerOUT
/*! получить текущее значение указанного 'выхода' */ /*! получить текущее значение указанного 'выхода' */
bool getState(OutIdType out); bool getState(OutIdType out) const;
/*! установить значение одного из 'выходов' /*! установить значение одного из 'выходов'
\param out - идентификатор 'выхода' \param out - идентификатор 'выхода'
......
...@@ -57,7 +57,7 @@ void TriggerOUT<Caller,OutIdType,ValueType>::remove(OutIdType num) ...@@ -57,7 +57,7 @@ void TriggerOUT<Caller,OutIdType,ValueType>::remove(OutIdType num)
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
template <class Caller, typename OutIdType, typename ValueType> template <class Caller, typename OutIdType, typename ValueType>
bool TriggerOUT<Caller,OutIdType,ValueType>::getState(OutIdType out) bool TriggerOUT<Caller,OutIdType,ValueType>::getState(OutIdType out) const
{ {
auto it=outs.find(out); auto it=outs.find(out);
if( it!=outs.end() ) if( it!=outs.end() )
......
...@@ -18,7 +18,7 @@ class UDPSocketU: ...@@ -18,7 +18,7 @@ class UDPSocketU:
virtual ~UDPSocketU() {} virtual ~UDPSocketU() {}
inline SOCKET getSocket() inline SOCKET getSocket() const
{ {
return ost::UDPSocket::so; return ost::UDPSocket::so;
} }
......
...@@ -22,18 +22,18 @@ ...@@ -22,18 +22,18 @@
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
namespace UniSetTypes namespace UniSetTypes
{ {
// Шаблон для "универсальной инициализации объекта(процесса)". // Шаблон для "универсальной инициализации объекта(процесса)".
// Использование: // Использование:
// auto m = make_object<MyClass>("ObjectId","secname"); // auto m = make_object<MyClass>("ObjectId","secname");
// -- // --
// Где MyClass должен содержать конструктор MyClass( const ObjetctId id, xmlNode* cnode, ...any args.. ); // Где MyClass должен содержать конструктор MyClass( const ObjetctId id, xmlNode* cnode, ...any args.. );
// --------------- // ---------------
// Если secname задан, то ищется: <secname name="ObjectId" ....> // Если secname задан, то ищется: <secname name="ObjectId" ....>
// Если secname не задан, то: <idname name="idname" ...> // Если secname не задан, то: <idname name="idname" ...>
//---------------- //----------------
template<typename T, typename... _Args> template<typename T, typename... _Args>
std::shared_ptr<T> make_object( const std::string& idname, const std::string& secname, _Args&&... __args ) std::shared_ptr<T> make_object( const std::string& idname, const std::string& secname, _Args&& ... __args )
{ {
auto conf = UniSetTypes::uniset_conf(); auto conf = UniSetTypes::uniset_conf();
UniSetTypes::ObjectId id = conf->getObjectID(idname); UniSetTypes::ObjectId id = conf->getObjectID(idname);
...@@ -42,50 +42,52 @@ std::shared_ptr<T> make_object( const std::string& idname, const std::string& se ...@@ -42,50 +42,52 @@ std::shared_ptr<T> make_object( const std::string& idname, const std::string& se
auto xml = conf->getConfXML(); auto xml = conf->getConfXML();
std::string s( (secname.empty() ? idname : secname) ); std::string s( (secname.empty() ? idname : secname) );
xmlNode* cnode = conf->findNode(xml->getFirstNode(),s,idname); xmlNode* cnode = conf->findNode(xml->getFirstNode(), s, idname);
if( cnode == 0 ) if( cnode == 0 )
throw UniSetTypes::SystemError("(make_object<" + string(typeid(T).name()) + ">): Not found xmlnode <" + s + " name='" + idname + "' ... >"); throw UniSetTypes::SystemError("(make_object<" + string(typeid(T).name()) + ">): Not found xmlnode <" + s + " name='" + idname + "' ... >");
std::shared_ptr<T> obj =std::make_shared<T>(id,cnode,std::forward<_Args>(__args)...); std::shared_ptr<T> obj = std::make_shared<T>(id, cnode, std::forward<_Args>(__args)...);
if (obj == nullptr) if (obj == nullptr)
throw UniSetTypes::SystemError("(make_object<T> == nullptr" + string(typeid(T).name())); throw UniSetTypes::SystemError("(make_object<T> == nullptr" + string(typeid(T).name()));
return obj; return obj;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// версия с указанием начального xml-узла, с которого ведётся поиск xmlNode // версия с указанием начального xml-узла, с которого ведётся поиск xmlNode
// а ID берётся из поля name="" у найденного xmlnode. // а ID берётся из поля name="" у найденного xmlnode.
template<typename T, typename... _Args> template<typename T, typename... _Args>
std::shared_ptr<T> make_object_x( xmlNode* root, const std::string& secname, _Args&&... __args ) std::shared_ptr<T> make_object_x( xmlNode* root, const std::string& secname, _Args&& ... __args )
{ {
auto conf = UniSetTypes::uniset_conf(); auto conf = UniSetTypes::uniset_conf();
auto xml = conf->getConfXML(); auto xml = conf->getConfXML();
xmlNode* cnode = conf->findNode(root,secname,""); xmlNode* cnode = conf->findNode(root, secname, "");
if( cnode == 0 ) if( cnode == 0 )
throw UniSetTypes::SystemError("(make_object_x<" + string(typeid(T).name()) + ">): Not found xmlnode <" + secname + " ... >"); throw UniSetTypes::SystemError("(make_object_x<" + string(typeid(T).name()) + ">): Not found xmlnode <" + secname + " ... >");
string idname = conf->getProp(cnode,"name"); string idname = conf->getProp(cnode, "name");
UniSetTypes::ObjectId id = conf->getObjectID(idname); UniSetTypes::ObjectId id = conf->getObjectID(idname);
if( id == UniSetTypes::DefaultObjectId ) if( id == UniSetTypes::DefaultObjectId )
throw UniSetTypes::SystemError("(make_object_x<" + string(typeid(T).name()) + ">): Not found ID for '" + idname + "'"); throw UniSetTypes::SystemError("(make_object_x<" + string(typeid(T).name()) + ">): Not found ID for '" + idname + "'");
return std::make_shared<T>(id,cnode,std::forward<_Args>(__args)...); return std::make_shared<T>(id, cnode, std::forward<_Args>(__args)...);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Просто обёртка для удобства вывода сообщений об ошибке в лог "объекта".. // Просто обёртка для удобства вывода сообщений об ошибке в лог "объекта"..
// "по задумке" позволяет не загромаждать код.. // "по задумке" позволяет не загромаждать код..
// T - тип создаваемого объекта // T - тип создаваемого объекта
// M - (master) - класс который создаёт объект (подразумевается, что он UniSetManager) // M - (master) - класс который создаёт объект (подразумевается, что он UniSetManager)
template<typename T, typename M, typename... _Args> template<typename T, typename M, typename... _Args>
std::shared_ptr<T> make_child_object( M* m, const std::string& idname, const std::string& secname, _Args&&... __args ) std::shared_ptr<T> make_child_object( M* m, const std::string& idname, const std::string& secname, _Args&& ... __args )
{ {
try try
{ {
m->log()->info() << m->getName() << "(" << __FUNCTION__ << "): " << "create " << idname << "..." << std::endl; m->log()->info() << m->getName() << "(" << __FUNCTION__ << "): " << "create " << idname << "..." << std::endl;
auto o = UniSetTypes::make_object<T>(idname,secname,std::forward<_Args>(__args)...); auto o = UniSetTypes::make_object<T>(idname, secname, std::forward<_Args>(__args)...);
m->add(o); m->add(o);
m->logAgregator()->add(o->logAgregator()); m->logAgregator()->add(o->logAgregator());
return std::move(o); return std::move(o);
...@@ -95,15 +97,15 @@ std::shared_ptr<T> make_child_object( M* m, const std::string& idname, const std ...@@ -95,15 +97,15 @@ std::shared_ptr<T> make_child_object( M* m, const std::string& idname, const std
m->log()->crit() << m->getName() << "(" << __FUNCTION__ << "): " << "(create " << idname << "): " << ex << std::endl; m->log()->crit() << m->getName() << "(" << __FUNCTION__ << "): " << "(create " << idname << "): " << ex << std::endl;
throw; throw;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Версия использующая make_object_x<> // Версия использующая make_object_x<>
template<typename T, typename M, typename... _Args> template<typename T, typename M, typename... _Args>
std::shared_ptr<T> make_child_object_x( M* m, xmlNode* root, const std::string& secname, _Args&&... __args ) std::shared_ptr<T> make_child_object_x( M* m, xmlNode* root, const std::string& secname, _Args&& ... __args )
{ {
try try
{ {
auto o = UniSetTypes::make_object_x<T>(root,secname,std::forward<_Args>(__args)...); auto o = UniSetTypes::make_object_x<T>(root, secname, std::forward<_Args>(__args)...);
m->add(o); m->add(o);
m->logAgregator()->add(o->logAgregator()); m->logAgregator()->add(o->logAgregator());
return std::move(o); return std::move(o);
...@@ -113,8 +115,8 @@ std::shared_ptr<T> make_child_object_x( M* m, xmlNode* root, const std::string& ...@@ -113,8 +115,8 @@ std::shared_ptr<T> make_child_object_x( M* m, xmlNode* root, const std::string&
m->log()->crit() << m->getName() << "(" << __FUNCTION__ << "): " << "(create " << string(typeid(T).name()) << "): " << ex << std::endl; m->log()->crit() << m->getName() << "(" << __FUNCTION__ << "): " << "(create " << string(typeid(T).name()) << "): " << ex << std::endl;
throw; throw;
} }
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
} // endof namespace UniSetTypes } // endof namespace UniSetTypes
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
#endif // UHelpers_H_ #endif // UHelpers_H_
...@@ -76,7 +76,7 @@ class UniSetActivator: ...@@ -76,7 +76,7 @@ class UniSetActivator:
typedef sigc::signal<void, int> TerminateEvent_Signal; typedef sigc::signal<void, int> TerminateEvent_Signal;
TerminateEvent_Signal signal_terminate_event(); TerminateEvent_Signal signal_terminate_event();
inline bool noUseGdbForStackTrace() inline bool noUseGdbForStackTrace() const
{ {
return _noUseGdbForStackTrace; return _noUseGdbForStackTrace;
} }
...@@ -120,7 +120,7 @@ class UniSetActivator: ...@@ -120,7 +120,7 @@ class UniSetActivator:
TerminateEvent_Signal s_term; TerminateEvent_Signal s_term;
std::atomic_bool omDestroy; std::atomic_bool omDestroy;
pid_t thpid; // pid orb потока pid_t thid; // id orb потока
bool _noUseGdbForStackTrace = { false }; bool _noUseGdbForStackTrace = { false };
......
...@@ -187,7 +187,7 @@ class UniXML ...@@ -187,7 +187,7 @@ class UniXML
void open(const std::string& filename); void open(const std::string& filename);
void close(); void close();
inline bool isOpen() inline bool isOpen() const
{ {
return doc != 0; return doc != 0;
} }
...@@ -198,7 +198,7 @@ class UniXML ...@@ -198,7 +198,7 @@ class UniXML
~UniXML(); ~UniXML();
xmlDoc* doc; xmlDoc* doc;
inline std::string getFileName() inline std::string getFileName() const
{ {
return filename; return filename;
} }
......
...@@ -150,12 +150,11 @@ class ModbusClient ...@@ -150,12 +150,11 @@ class ModbusClient
void initLog( std::shared_ptr<UniSetTypes::Configuration> conf, const std::string& name, const std::string& logfile = "" ); void initLog( std::shared_ptr<UniSetTypes::Configuration> conf, const std::string& name, const std::string& logfile = "" );
void setLog( std::shared_ptr<DebugStream> dlog ); void setLog( std::shared_ptr<DebugStream> dlog );
inline void setCRCNoCheckit( bool set ) inline void setCRCNoCheckit( bool set )
{ {
crcNoCheckit = set; crcNoCheckit = set;
} }
inline bool isCRCNoCheckit() inline bool isCRCNoCheckit() const
{ {
return crcNoCheckit; return crcNoCheckit;
} }
......
...@@ -39,7 +39,7 @@ class ModbusRTUSlave: ...@@ -39,7 +39,7 @@ class ModbusRTUSlave:
} }
virtual void terminate() override; virtual void terminate() override;
virtual bool isActive() override; virtual bool isActive() const override;
protected: protected:
......
...@@ -21,7 +21,7 @@ namespace std ...@@ -21,7 +21,7 @@ namespace std
public: public:
size_t operator()(const ModbusRTU::mbErrCode& e) const size_t operator()(const ModbusRTU::mbErrCode& e) const
{ {
return std::hash<int>()(e); return std::hash<size_t>()(e);
} }
}; };
} }
...@@ -98,7 +98,7 @@ class ModbusServer ...@@ -98,7 +98,7 @@ class ModbusServer
{ {
crcNoCheckit = set; crcNoCheckit = set;
} }
inline bool isCRCNoCheckit() inline bool isCRCNoCheckit() const
{ {
return crcNoCheckit; return crcNoCheckit;
} }
...@@ -107,7 +107,7 @@ class ModbusServer ...@@ -107,7 +107,7 @@ class ModbusServer
{ {
onBroadcast = set; onBroadcast = set;
} }
inline bool getBroadcastMode() inline bool getBroadcastMode() const
{ {
return onBroadcast; return onBroadcast;
} }
...@@ -142,7 +142,7 @@ class ModbusServer ...@@ -142,7 +142,7 @@ class ModbusServer
virtual void cleanupChannel() {} virtual void cleanupChannel() {}
virtual void terminate() {} virtual void terminate() {}
virtual bool isActive() = 0; virtual bool isActive() const = 0;
// ------------ Статистика --------------- // ------------ Статистика ---------------
typedef std::unordered_map<ModbusRTU::mbErrCode, size_t> ExchangeErrorMap; typedef std::unordered_map<ModbusRTU::mbErrCode, size_t> ExchangeErrorMap;
...@@ -151,7 +151,7 @@ class ModbusServer ...@@ -151,7 +151,7 @@ class ModbusServer
size_t getErrCount( ModbusRTU::mbErrCode e ); size_t getErrCount( ModbusRTU::mbErrCode e );
size_t resetErrCount( ModbusRTU::mbErrCode e, size_t set = 0 ); size_t resetErrCount( ModbusRTU::mbErrCode e, size_t set = 0 );
inline size_t getAskCount() inline size_t getAskCount() const
{ {
return askCount; return askCount;
} }
......
...@@ -22,7 +22,7 @@ class ModbusTCPMaster: ...@@ -22,7 +22,7 @@ class ModbusTCPMaster:
void connect( ost::InetAddress addr, int port ); void connect( ost::InetAddress addr, int port );
void disconnect(); void disconnect();
void forceDisconnect(); void forceDisconnect();
bool isConnection(); bool isConnection() const;
static bool checkConnection( const std::string& ip, int port, int timeout_msec = 100 ); static bool checkConnection( const std::string& ip, int port, int timeout_msec = 100 );
...@@ -39,11 +39,11 @@ class ModbusTCPMaster: ...@@ -39,11 +39,11 @@ class ModbusTCPMaster:
cleanInputStream(); cleanInputStream();
} }
inline std::string getAddress() inline std::string getAddress() const
{ {
return iaddr; return iaddr;
} }
inline int getPort() inline int getPort() const
{ {
return port; return port;
} }
......
...@@ -37,7 +37,7 @@ class ModbusTCPServer: ...@@ -37,7 +37,7 @@ class ModbusTCPServer:
*/ */
void run( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, bool thread = false ); void run( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, bool thread = false );
virtual bool isActive() override; virtual bool isActive() const override;
void setMaxSessions( size_t num ); void setMaxSessions( size_t num );
inline size_t getMaxSessions() inline size_t getMaxSessions()
......
...@@ -45,7 +45,7 @@ class ModbusTCPSession: ...@@ -45,7 +45,7 @@ class ModbusTCPSession:
void connectFinalSession( FinalSlot sl ); void connectFinalSession( FinalSlot sl );
inline std::string getClientAddress() inline std::string getClientAddress() const
{ {
return caddr; return caddr;
} }
...@@ -55,7 +55,7 @@ class ModbusTCPSession: ...@@ -55,7 +55,7 @@ class ModbusTCPSession:
// запуск обработки входящих запросов // запуск обработки входящих запросов
void run( ev::loop_ref& loop ); void run( ev::loop_ref& loop );
virtual bool isActive() override; virtual bool isActive() const override;
void iowait( timeout_t msec ); void iowait( timeout_t msec );
......
...@@ -843,7 +843,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -843,7 +843,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc =rbuf.pduCRC(bcnt - szCRC); ModbusData tcrc = rbuf.pduCRC(bcnt - szCRC);
if( tcrc != mWrite.crc ) if( tcrc != mWrite.crc )
{ {
...@@ -1335,6 +1335,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg ) ...@@ -1335,6 +1335,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
if( dlog->is_warn() ) if( dlog->is_warn() )
dlog->warn() << "(ModbusClient::send): message len=" << msg.len() dlog->warn() << "(ModbusClient::send): message len=" << msg.len()
<< " > MAXLEN=" << msg.maxSizeOfMessage() << endl; << " > MAXLEN=" << msg.maxSizeOfMessage() << endl;
return erPacketTooLong; return erPacketTooLong;
} }
...@@ -1345,7 +1346,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg ) ...@@ -1345,7 +1346,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
{ {
size_t len = msg.len(); // т.к. swapHead() поменяет size_t len = msg.len(); // т.к. swapHead() поменяет
msg.swapHead(); msg.swapHead();
sendData(msg.buf(),len); sendData(msg.buf(), len);
msg.swapHead(); msg.swapHead();
} }
catch( mbException& ex ) catch( mbException& ex )
......
...@@ -139,7 +139,7 @@ void ModbusRTUSlave::terminate() ...@@ -139,7 +139,7 @@ void ModbusRTUSlave::terminate()
catch(...) {} catch(...) {}
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusRTUSlave::isActive() bool ModbusRTUSlave::isActive() const
{ {
return false; return false;
} }
...@@ -154,7 +154,7 @@ mbErrCode ModbusRTUSlave::realReceive(const std::unordered_set<ModbusAddr>& vmba ...@@ -154,7 +154,7 @@ mbErrCode ModbusRTUSlave::realReceive(const std::unordered_set<ModbusAddr>& vmba
return erTimeOut; return erTimeOut;
} }
std::lock_guard<std::timed_mutex> lk(recvMutex,std::adopt_lock); std::lock_guard<std::timed_mutex> lk(recvMutex, std::adopt_lock);
ModbusMessage buf; ModbusMessage buf;
mbErrCode res = erBadReplyNodeAddress; mbErrCode res = erBadReplyNodeAddress;
......
...@@ -1767,7 +1767,7 @@ mbErrCode ModbusServer::send( ModbusMessage& msg ) ...@@ -1767,7 +1767,7 @@ mbErrCode ModbusServer::send( ModbusMessage& msg )
{ {
size_t len = msg.len(); // т.к. swapHead() поменяет size_t len = msg.len(); // т.к. swapHead() поменяет
msg.swapHead(); msg.swapHead();
sendData(msg.buf(),len); sendData(msg.buf(), len);
msg.swapHead(); // обратно, т.к. потом ещё будет post_send_request msg.swapHead(); // обратно, т.к. потом ещё будет post_send_request
} }
catch( const Exception& ex ) // SystemError catch( const Exception& ex ) // SystemError
......
...@@ -32,16 +32,17 @@ size_t ModbusTCPCore::readNextData(UTCPStream* tcp, ...@@ -32,16 +32,17 @@ size_t ModbusTCPCore::readNextData(UTCPStream* tcp,
#ifdef USE_BUFFER_FOR_READ #ifdef USE_BUFFER_FOR_READ
char* buf = new char[max]; char* buf = new char[max];
if( buf == 0 ) if( buf == 0 )
return 0; return 0;
try try
{ {
ssize_t l = tcp->readData(buf,max, 0, t); ssize_t l = tcp->readData(buf, max, 0, t);
if( l > 0 ) if( l > 0 )
{ {
for( ssize_t k=0; k<l; k++ ) for( ssize_t k = 0; k < l; k++ )
qrecv.push(buf[k]); qrecv.push(buf[k]);
i = l; i = l;
...@@ -53,6 +54,7 @@ size_t ModbusTCPCore::readNextData(UTCPStream* tcp, ...@@ -53,6 +54,7 @@ size_t ModbusTCPCore::readNextData(UTCPStream* tcp,
delete [] buf; delete [] buf;
#else #else
try try
{ {
for( ; i < max; i++ ) for( ; i < max; i++ )
...@@ -70,6 +72,7 @@ size_t ModbusTCPCore::readNextData(UTCPStream* tcp, ...@@ -70,6 +72,7 @@ size_t ModbusTCPCore::readNextData(UTCPStream* tcp,
catch( ost::SockException& e ) catch( ost::SockException& e )
{ {
} }
#endif #endif
...@@ -128,6 +131,7 @@ size_t ModbusTCPCore::readDataFD( int fd, std::queue<unsigned char>& qrecv, size ...@@ -128,6 +131,7 @@ size_t ModbusTCPCore::readDataFD( int fd, std::queue<unsigned char>& qrecv, size
qrecv.push(buf[k]); qrecv.push(buf[k]);
cnt += l; cnt += l;
if( cnt >= max ) if( cnt >= max )
break; break;
} }
...@@ -137,6 +141,7 @@ size_t ModbusTCPCore::readDataFD( int fd, std::queue<unsigned char>& qrecv, size ...@@ -137,6 +141,7 @@ size_t ModbusTCPCore::readDataFD( int fd, std::queue<unsigned char>& qrecv, size
#else #else
size_t i = 0; size_t i = 0;
for( size_t a = 0; a < attempts; a++ ) for( size_t a = 0; a < attempts; a++ )
{ {
for( ; i < max; i++ ) for( ; i < max; i++ )
...@@ -151,6 +156,7 @@ size_t ModbusTCPCore::readDataFD( int fd, std::queue<unsigned char>& qrecv, size ...@@ -151,6 +156,7 @@ size_t ModbusTCPCore::readDataFD( int fd, std::queue<unsigned char>& qrecv, size
qrecv.push(c); qrecv.push(c);
} }
} }
#endif #endif
return ( qrecv.size() >= max ? max : qrecv.size() ); return ( qrecv.size() >= max ? max : qrecv.size() );
......
...@@ -102,7 +102,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, ...@@ -102,7 +102,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
tcp->setTimeout(timeout); tcp->setTimeout(timeout);
msg.makeHead(++nTransaction,crcNoCheckit); msg.makeHead(++nTransaction, crcNoCheckit);
for( unsigned int i = 0; i < 2; i++ ) for( unsigned int i = 0; i < 2; i++ )
{ {
...@@ -157,6 +157,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, ...@@ -157,6 +157,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
if( tcp->isPending(ost::Socket::pendingInput, timeout) ) if( tcp->isPending(ost::Socket::pendingInput, timeout) )
{ {
size_t ret = 0; size_t ret = 0;
while( !ptTimeout.checkTime() ) while( !ptTimeout.checkTime() )
{ {
ret = getNextData((unsigned char*)(&reply.aduhead), sizeof(reply.aduhead)); ret = getNextData((unsigned char*)(&reply.aduhead), sizeof(reply.aduhead));
...@@ -459,7 +460,7 @@ void ModbusTCPMaster::forceDisconnect() ...@@ -459,7 +460,7 @@ void ModbusTCPMaster::forceDisconnect()
tcp.reset(); tcp.reset();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusTCPMaster::isConnection() bool ModbusTCPMaster::isConnection() const
{ {
return tcp && tcp->isConnected(); return tcp && tcp->isConnected();
} }
......
...@@ -83,7 +83,7 @@ void ModbusTCPServer::run( const std::unordered_set<ModbusAddr>& _vmbaddr, bool ...@@ -83,7 +83,7 @@ void ModbusTCPServer::run( const std::unordered_set<ModbusAddr>& _vmbaddr, bool
evrun(thread); evrun(thread);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusTCPServer::isActive() bool ModbusTCPServer::isActive() const
{ {
return evIsActive(); return evIsActive();
} }
......
...@@ -61,8 +61,10 @@ ModbusTCPSession::ModbusTCPSession( int sfd, const std::unordered_set<ModbusAddr ...@@ -61,8 +61,10 @@ ModbusTCPSession::ModbusTCPSession( int sfd, const std::unordered_set<ModbusAddr
{ {
ostringstream err; ostringstream err;
err << "(ModbusTCPSession): unknonwn ip(0.0.0.0) client disconnected?!"; err << "(ModbusTCPSession): unknonwn ip(0.0.0.0) client disconnected?!";
if( dlog->is_crit() ) if( dlog->is_crit() )
dlog->crit() << err.str() << endl; dlog->crit() << err.str() << endl;
sock.reset(); sock.reset();
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -76,6 +78,7 @@ ModbusTCPSession::ModbusTCPSession( int sfd, const std::unordered_set<ModbusAddr ...@@ -76,6 +78,7 @@ ModbusTCPSession::ModbusTCPSession( int sfd, const std::unordered_set<ModbusAddr
{ {
ostringstream err; ostringstream err;
err << ex.what(); err << ex.what();
if( dlog->is_crit() ) if( dlog->is_crit() )
dlog->crit() << "(ModbusTCPSession): err: " << err.str() << endl; dlog->crit() << "(ModbusTCPSession): err: " << err.str() << endl;
...@@ -123,7 +126,7 @@ void ModbusTCPSession::run( ev::loop_ref& loop ) ...@@ -123,7 +126,7 @@ void ModbusTCPSession::run( ev::loop_ref& loop )
ioTimeout.start(sessTimeout); ioTimeout.start(sessTimeout);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusTCPSession::isActive() bool ModbusTCPSession::isActive() const
{ {
return io.is_active(); return io.is_active();
} }
...@@ -381,7 +384,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::post_send_request( ModbusRTU::ModbusMessa ...@@ -381,7 +384,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::post_send_request( ModbusRTU::ModbusMessa
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::make_adu_header( ModbusMessage& req ) mbErrCode ModbusTCPSession::make_adu_header( ModbusMessage& req )
{ {
req.makeHead(curQueryHeader.tID,isCRCNoCheckit(),curQueryHeader.pID); req.makeHead(curQueryHeader.tID, isCRCNoCheckit(), curQueryHeader.pID);
return erNoError; return erNoError;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -196,6 +196,7 @@ void LogServer::ioAccept( ev::io& watcher, int revents ) ...@@ -196,6 +196,7 @@ void LogServer::ioAccept( ev::io& watcher, int revents )
{ {
uniset_rwmutex_wrlock l(mutSList); uniset_rwmutex_wrlock l(mutSList);
scount++; scount++;
// на первой сессии запоминаем состояние логов // на первой сессии запоминаем состояние логов
if( scount == 1 ) if( scount == 1 )
saveDefaultLogLevels("ALL"); saveDefaultLogLevels("ALL");
...@@ -258,7 +259,8 @@ string LogServer::getShortInfo() ...@@ -258,7 +259,8 @@ string LogServer::getShortInfo()
inf << "LogServer: " << myname << endl; inf << "LogServer: " << myname << endl;
{ {
uniset_rwmutex_wrlock l(mutSList); uniset_rwmutex_wrlock l(mutSList);
for( const auto& s: slist )
for( const auto& s : slist )
inf << " " << s->getShortInfo() << endl; inf << " " << s->getShortInfo() << endl;
} }
...@@ -271,15 +273,17 @@ void LogServer::saveDefaultLogLevels( const std::string& logname ) ...@@ -271,15 +273,17 @@ void LogServer::saveDefaultLogLevels( const std::string& logname )
mylog.info() << myname << "(saveDefaultLogLevels): SAVE DEFAULT LOG LEVELS.." << endl; mylog.info() << myname << "(saveDefaultLogLevels): SAVE DEFAULT LOG LEVELS.." << endl;
auto alog = dynamic_pointer_cast<LogAgregator>(elog); auto alog = dynamic_pointer_cast<LogAgregator>(elog);
if( alog ) if( alog )
{ {
std::list<LogAgregator::iLog> lst; std::list<LogAgregator::iLog> lst;
if( logname.empty() || logname == "ALL" ) if( logname.empty() || logname == "ALL" )
lst = alog->getLogList(); lst = alog->getLogList();
else else
lst = alog->getLogList(logname); lst = alog->getLogList(logname);
for( auto&& l: lst ) for( auto && l : lst )
defaultLogLevels[l.log.get()] = l.log->level(); defaultLogLevels[l.log.get()] = l.log->level();
} }
else if( elog ) else if( elog )
...@@ -292,17 +296,20 @@ void LogServer::restoreDefaultLogLevels( const std::string& logname ) ...@@ -292,17 +296,20 @@ void LogServer::restoreDefaultLogLevels( const std::string& logname )
mylog.info() << myname << "(restoreDefaultLogLevels): RESTORE DEFAULT LOG LEVELS.." << endl; mylog.info() << myname << "(restoreDefaultLogLevels): RESTORE DEFAULT LOG LEVELS.." << endl;
auto alog = dynamic_pointer_cast<LogAgregator>(elog); auto alog = dynamic_pointer_cast<LogAgregator>(elog);
if( alog ) if( alog )
{ {
std::list<LogAgregator::iLog> lst; std::list<LogAgregator::iLog> lst;
if( logname.empty() || logname == "ALL" ) if( logname.empty() || logname == "ALL" )
lst = alog->getLogList(); lst = alog->getLogList();
else else
lst = alog->getLogList(logname); lst = alog->getLogList(logname);
for( auto&& l: lst ) for( auto && l : lst )
{ {
auto d = defaultLogLevels.find(l.log.get()); auto d = defaultLogLevels.find(l.log.get());
if( d != defaultLogLevels.end() ) if( d != defaultLogLevels.end() )
l.log->level(d->second); l.log->level(d->second);
} }
...@@ -310,6 +317,7 @@ void LogServer::restoreDefaultLogLevels( const std::string& logname ) ...@@ -310,6 +317,7 @@ void LogServer::restoreDefaultLogLevels( const std::string& logname )
else if( elog ) else if( elog )
{ {
auto d = defaultLogLevels.find(elog.get()); auto d = defaultLogLevels.find(elog.get());
if( d != defaultLogLevels.end() ) if( d != defaultLogLevels.end() )
elog->level(d->second); elog->level(d->second);
} }
...@@ -331,9 +339,11 @@ std::string LogServer::onCommand( LogSession* s, LogServerTypes::Command cmd, co ...@@ -331,9 +339,11 @@ std::string LogServer::onCommand( LogSession* s, LogServerTypes::Command cmd, co
s << "List of saved default log levels (filter='" << logname << "')[" << defaultLogLevels.size() << "]: " << endl; s << "List of saved default log levels (filter='" << logname << "')[" << defaultLogLevels.size() << "]: " << endl;
s << "=================================" << endl; s << "=================================" << endl;
auto alog = dynamic_pointer_cast<LogAgregator>(elog); auto alog = dynamic_pointer_cast<LogAgregator>(elog);
if( alog ) // если у нас "агрегатор", то работаем с его списком потоков if( alog ) // если у нас "агрегатор", то работаем с его списком потоков
{ {
std::list<LogAgregator::iLog> lst; std::list<LogAgregator::iLog> lst;
if( logname.empty() || logname == "ALL" ) if( logname.empty() || logname == "ALL" )
lst = alog->getLogList(); lst = alog->getLogList();
else else
...@@ -349,6 +359,7 @@ std::string LogServer::onCommand( LogSession* s, LogServerTypes::Command cmd, co ...@@ -349,6 +359,7 @@ std::string LogServer::onCommand( LogSession* s, LogServerTypes::Command cmd, co
{ {
Debug::type deflevel = Debug::NONE; Debug::type deflevel = Debug::NONE;
auto i = defaultLogLevels.find(l.log.get()); auto i = defaultLogLevels.find(l.log.get());
if( i != defaultLogLevels.end() ) if( i != defaultLogLevels.end() )
deflevel = i->second; deflevel = i->second;
...@@ -359,8 +370,10 @@ std::string LogServer::onCommand( LogSession* s, LogServerTypes::Command cmd, co ...@@ -359,8 +370,10 @@ std::string LogServer::onCommand( LogSession* s, LogServerTypes::Command cmd, co
{ {
Debug::type deflevel = Debug::NONE; Debug::type deflevel = Debug::NONE;
auto i = defaultLogLevels.find(elog.get()); auto i = defaultLogLevels.find(elog.get());
if( i != defaultLogLevels.end() ) if( i != defaultLogLevels.end() )
deflevel = i->second; deflevel = i->second;
s << elog->getLogName() << " [" << Debug::str(deflevel) << " ]" << endl; s << elog->getLogName() << " [" << Debug::str(deflevel) << " ]" << endl;
} }
......
...@@ -54,7 +54,7 @@ LogSession::~LogSession() ...@@ -54,7 +54,7 @@ LogSession::~LogSession()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
LogSession::LogSession( int sfd, std::shared_ptr<DebugStream>& _log, timeout_t _cmdTimeout, timeout_t _checkConnectionTime ): LogSession::LogSession( int sfd, std::shared_ptr<DebugStream>& _log, timeout_t _cmdTimeout, timeout_t _checkConnectionTime ):
cmdTimeout(_cmdTimeout), cmdTimeout(_cmdTimeout),
checkConnectionTime(_checkConnectionTime/1000.), checkConnectionTime(_checkConnectionTime / 1000.),
peername(""), peername(""),
caddr(""), caddr(""),
log(_log) log(_log)
...@@ -103,24 +103,28 @@ void LogSession::logOnEvent( const std::string& s ) ...@@ -103,24 +103,28 @@ void LogSession::logOnEvent( const std::string& s )
if( cancelled || s.empty() ) if( cancelled || s.empty() )
return; return;
{ // чтобы поменьше удерживать mutex {
// чтобы поменьше удерживать mutex
std::unique_lock<std::mutex> lk(logbuf_mutex); std::unique_lock<std::mutex> lk(logbuf_mutex);
// собираем статистику.. // собираем статистику..
// -------------------------- // --------------------------
if( s.size() < minSizeMsg || minSizeMsg==0 ) if( s.size() < minSizeMsg || minSizeMsg == 0 )
minSizeMsg = s.size(); minSizeMsg = s.size();
if( s.size() > maxSizeMsg ) if( s.size() > maxSizeMsg )
maxSizeMsg = s.size(); maxSizeMsg = s.size();
if( logbuf.size() > maxCount ) if( logbuf.size() > maxCount )
maxCount = logbuf.size(); maxCount = logbuf.size();
// -------------------------- // --------------------------
// проверяем на переполнение.. // проверяем на переполнение..
if( logbuf.size() >= maxRecordsNum ) if( logbuf.size() >= maxRecordsNum )
{ {
numLostMsg++; numLostMsg++;
if( !lostMsg ) if( !lostMsg )
{ {
ostringstream err; ostringstream err;
...@@ -173,6 +177,7 @@ void LogSession::terminate() ...@@ -173,6 +177,7 @@ void LogSession::terminate()
{ {
std::unique_lock<std::mutex> lk(logbuf_mutex); std::unique_lock<std::mutex> lk(logbuf_mutex);
while( !logbuf.empty() ) while( !logbuf.empty() )
logbuf.pop(); logbuf.pop();
} }
...@@ -282,6 +287,7 @@ void LogSession::writeEvent( ev::io& watcher ) ...@@ -282,6 +287,7 @@ void LogSession::writeEvent( ev::io& watcher )
{ {
std::unique_lock<std::mutex> lk(logbuf_mutex); std::unique_lock<std::mutex> lk(logbuf_mutex);
if( logbuf.empty() ) if( logbuf.empty() )
{ {
io.set(EV_NONE); io.set(EV_NONE);
...@@ -479,7 +485,8 @@ void LogSession::cmdProcessing( const string& cmdLogName, const LogServerTypes:: ...@@ -479,7 +485,8 @@ void LogSession::cmdProcessing( const string& cmdLogName, const LogServerTypes::
try try
{ {
std::string ret( std::move(m_command_sig.emit(this,msg.cmd,cmdLogName)) ); std::string ret( std::move(m_command_sig.emit(this, msg.cmd, cmdLogName)) );
if( !ret.empty() ) if( !ret.empty() )
{ {
{ {
...@@ -522,6 +529,7 @@ void LogSession::onCheckConnectionTimer( ev::timer& watcher, int revents ) ...@@ -522,6 +529,7 @@ void LogSession::onCheckConnectionTimer( ev::timer& watcher, int revents )
} }
std::unique_lock<std::mutex> lk(logbuf_mutex); std::unique_lock<std::mutex> lk(logbuf_mutex);
if( !logbuf.empty() ) if( !logbuf.empty() )
{ {
checkConnectionTimer.start( checkConnectionTime ); // restart timer checkConnectionTimer.start( checkConnectionTime ); // restart timer
...@@ -551,13 +559,23 @@ LogSession::LogSessionCommand_Signal LogSession::signal_logsession_command() ...@@ -551,13 +559,23 @@ LogSession::LogSessionCommand_Signal LogSession::signal_logsession_command()
return m_command_sig; return m_command_sig;
} }
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
void LogSession::cancel()
{
cancelled = true;
}
// ---------------------------------------------------------------------
void LogSession::setMaxBufSize( size_t num ) void LogSession::setMaxBufSize( size_t num )
{ {
std::unique_lock<std::mutex> lk(logbuf_mutex); std::unique_lock<std::mutex> lk(logbuf_mutex);
maxRecordsNum = num; maxRecordsNum = num;
} }
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
bool LogSession::isAcive() size_t LogSession::getMaxBufSize() const
{
return maxRecordsNum;
}
// ---------------------------------------------------------------------
bool LogSession::isAcive() const
{ {
return io.is_active(); return io.is_active();
} }
......
...@@ -29,7 +29,7 @@ using namespace UniSetTypes; ...@@ -29,7 +29,7 @@ using namespace UniSetTypes;
//const std::string ObjectIndex::sepNode = ":"; //const std::string ObjectIndex::sepNode = ":";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex::getNameById( const ObjectId id ) string ObjectIndex::getNameById( const ObjectId id ) const
{ {
return getMapName(id); return getMapName(id);
} }
......
...@@ -47,7 +47,7 @@ ObjectIndex_Array::ObjectIndex_Array( const ObjectInfo* objectInfo ): ...@@ -47,7 +47,7 @@ ObjectIndex_Array::ObjectIndex_Array( const ObjectInfo* objectInfo ):
} }
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectId ObjectIndex_Array::getIdByName( const string& name ) ObjectId ObjectIndex_Array::getIdByName( const string& name ) const
{ {
auto it = mok.find(name); auto it = mok.find(name);
...@@ -58,7 +58,7 @@ ObjectId ObjectIndex_Array::getIdByName( const string& name ) ...@@ -58,7 +58,7 @@ ObjectId ObjectIndex_Array::getIdByName( const string& name )
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_Array::getMapName( const ObjectId id ) string ObjectIndex_Array::getMapName( const ObjectId id ) const
{ {
if( id != UniSetTypes::DefaultObjectId && id >= 0 && id < maxId ) if( id != UniSetTypes::DefaultObjectId && id >= 0 && id < maxId )
return objectInfo[id].repName; return objectInfo[id].repName;
...@@ -67,7 +67,7 @@ string ObjectIndex_Array::getMapName( const ObjectId id ) ...@@ -67,7 +67,7 @@ string ObjectIndex_Array::getMapName( const ObjectId id )
// throw OutOfRange("ObjectIndex_Array::getMapName OutOfRange"); // throw OutOfRange("ObjectIndex_Array::getMapName OutOfRange");
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_Array::getTextName( const ObjectId id ) string ObjectIndex_Array::getTextName( const ObjectId id ) const
{ {
if( id != UniSetTypes::DefaultObjectId && id >= 0 && id < maxId ) if( id != UniSetTypes::DefaultObjectId && id >= 0 && id < maxId )
return objectInfo[id].textName; return objectInfo[id].textName;
...@@ -82,7 +82,7 @@ std::ostream& operator<<(std::ostream& os, ObjectIndex_Array& oi ) ...@@ -82,7 +82,7 @@ std::ostream& operator<<(std::ostream& os, ObjectIndex_Array& oi )
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
std::ostream& ObjectIndex_Array::printMap( std::ostream& os ) std::ostream& ObjectIndex_Array::printMap( std::ostream& os ) const
{ {
auto oind = uniset_conf()->oind; auto oind = uniset_conf()->oind;
...@@ -101,7 +101,7 @@ std::ostream& ObjectIndex_Array::printMap( std::ostream& os ) ...@@ -101,7 +101,7 @@ std::ostream& ObjectIndex_Array::printMap( std::ostream& os )
return os; return os;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
const ObjectInfo* ObjectIndex_Array::getObjectInfo( const ObjectId id ) const ObjectInfo* ObjectIndex_Array::getObjectInfo( const ObjectId id ) const
{ {
if( id != UniSetTypes::DefaultObjectId && id >= 0 && id < maxId ) if( id != UniSetTypes::DefaultObjectId && id >= 0 && id < maxId )
return &(objectInfo[id]); return &(objectInfo[id]);
...@@ -109,7 +109,7 @@ const ObjectInfo* ObjectIndex_Array::getObjectInfo( const ObjectId id ) ...@@ -109,7 +109,7 @@ const ObjectInfo* ObjectIndex_Array::getObjectInfo( const ObjectId id )
return NULL; return NULL;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
const ObjectInfo* ObjectIndex_Array::getObjectInfo( const std::string& name ) const ObjectInfo* ObjectIndex_Array::getObjectInfo( const std::string& name ) const
{ {
auto it = mok.find(name); auto it = mok.find(name);
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace std; using namespace std;
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectIndex_XML::ObjectIndex_XML( const string& xmlfile, int minSize ): ObjectIndex_XML::ObjectIndex_XML(const string& xmlfile, size_t minSize ):
omap(minSize) omap(minSize)
{ {
shared_ptr<UniXML> xml = make_shared<UniXML>(); shared_ptr<UniXML> xml = make_shared<UniXML>();
...@@ -36,7 +36,7 @@ ObjectIndex_XML::ObjectIndex_XML( const string& xmlfile, int minSize ): ...@@ -36,7 +36,7 @@ ObjectIndex_XML::ObjectIndex_XML( const string& xmlfile, int minSize ):
// catch(...){} // catch(...){}
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectIndex_XML::ObjectIndex_XML( const std::shared_ptr<UniXML>& xml, int minSize ): ObjectIndex_XML::ObjectIndex_XML(const std::shared_ptr<UniXML>& xml, size_t minSize ):
omap(minSize) omap(minSize)
{ {
build(xml); build(xml);
...@@ -46,7 +46,7 @@ ObjectIndex_XML::~ObjectIndex_XML() ...@@ -46,7 +46,7 @@ ObjectIndex_XML::~ObjectIndex_XML()
{ {
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectId ObjectIndex_XML::getIdByName( const string& name ) ObjectId ObjectIndex_XML::getIdByName( const string& name ) const
{ {
auto it = mok.find(name); auto it = mok.find(name);
...@@ -56,7 +56,7 @@ ObjectId ObjectIndex_XML::getIdByName( const string& name ) ...@@ -56,7 +56,7 @@ ObjectId ObjectIndex_XML::getIdByName( const string& name )
return DefaultObjectId; return DefaultObjectId;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_XML::getMapName( const ObjectId id ) string ObjectIndex_XML::getMapName( const ObjectId id ) const
{ {
if( (unsigned)id < omap.size() && (unsigned)id > 0 ) if( (unsigned)id < omap.size() && (unsigned)id > 0 )
return omap[id].repName; return omap[id].repName;
...@@ -64,7 +64,7 @@ string ObjectIndex_XML::getMapName( const ObjectId id ) ...@@ -64,7 +64,7 @@ string ObjectIndex_XML::getMapName( const ObjectId id )
return ""; return "";
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_XML::getTextName( const ObjectId id ) string ObjectIndex_XML::getTextName( const ObjectId id ) const
{ {
if( (unsigned)id < omap.size() && (unsigned)id > 0 ) if( (unsigned)id < omap.size() && (unsigned)id > 0 )
return omap[id].textName; return omap[id].textName;
...@@ -77,9 +77,9 @@ std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi ) ...@@ -77,9 +77,9 @@ std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi )
return oi.printMap(os); return oi.printMap(os);
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
std::ostream& ObjectIndex_XML::printMap( std::ostream& os ) std::ostream& ObjectIndex_XML::printMap( std::ostream& os ) const
{ {
cout << "size: " << omap.size() << endl; os << "size: " << omap.size() << endl;
for( auto it = omap.begin(); it != omap.end(); ++it ) for( auto it = omap.begin(); it != omap.end(); ++it )
{ {
...@@ -272,7 +272,7 @@ unsigned int ObjectIndex_XML::read_nodes( const std::shared_ptr<UniXML>& xml, co ...@@ -272,7 +272,7 @@ unsigned int ObjectIndex_XML::read_nodes( const std::shared_ptr<UniXML>& xml, co
return ind; return ind;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
const ObjectInfo* ObjectIndex_XML::getObjectInfo( const ObjectId id ) const ObjectInfo* ObjectIndex_XML::getObjectInfo( const ObjectId id ) const
{ {
if( (unsigned)id < omap.size() && (unsigned)id > 0 ) if( (unsigned)id < omap.size() && (unsigned)id > 0 )
return &omap[id]; return &omap[id];
...@@ -280,7 +280,7 @@ const ObjectInfo* ObjectIndex_XML::getObjectInfo( const ObjectId id ) ...@@ -280,7 +280,7 @@ const ObjectInfo* ObjectIndex_XML::getObjectInfo( const ObjectId id )
return NULL; return NULL;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
const ObjectInfo* ObjectIndex_XML::getObjectInfo( const std::string& name ) const ObjectInfo* ObjectIndex_XML::getObjectInfo( const std::string& name ) const
{ {
auto it = mok.find(name); auto it = mok.find(name);
......
...@@ -43,7 +43,7 @@ ObjectIndex_idXML::~ObjectIndex_idXML() ...@@ -43,7 +43,7 @@ ObjectIndex_idXML::~ObjectIndex_idXML()
{ {
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectId ObjectIndex_idXML::getIdByName( const string& name ) ObjectId ObjectIndex_idXML::getIdByName( const string& name ) const
{ {
auto it = mok.find(name); auto it = mok.find(name);
...@@ -53,7 +53,7 @@ ObjectId ObjectIndex_idXML::getIdByName( const string& name ) ...@@ -53,7 +53,7 @@ ObjectId ObjectIndex_idXML::getIdByName( const string& name )
return DefaultObjectId; return DefaultObjectId;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_idXML::getMapName( const ObjectId id ) string ObjectIndex_idXML::getMapName( const ObjectId id ) const
{ {
auto it = omap.find(id); auto it = omap.find(id);
...@@ -63,7 +63,7 @@ string ObjectIndex_idXML::getMapName( const ObjectId id ) ...@@ -63,7 +63,7 @@ string ObjectIndex_idXML::getMapName( const ObjectId id )
return ""; return "";
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_idXML::getTextName( const ObjectId id ) string ObjectIndex_idXML::getTextName( const ObjectId id ) const
{ {
auto it = omap.find(id); auto it = omap.find(id);
...@@ -78,7 +78,7 @@ std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi ) ...@@ -78,7 +78,7 @@ std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi )
return oi.printMap(os); return oi.printMap(os);
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
std::ostream& ObjectIndex_idXML::printMap( std::ostream& os ) std::ostream& ObjectIndex_idXML::printMap( std::ostream& os ) const
{ {
os << "size: " << omap.size() << endl; os << "size: " << omap.size() << endl;
...@@ -235,7 +235,7 @@ void ObjectIndex_idXML::read_nodes( const std::shared_ptr<UniXML>& xml, const st ...@@ -235,7 +235,7 @@ void ObjectIndex_idXML::read_nodes( const std::shared_ptr<UniXML>& xml, const st
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
const ObjectInfo* ObjectIndex_idXML::getObjectInfo( const ObjectId id ) const ObjectInfo* ObjectIndex_idXML::getObjectInfo( const ObjectId id ) const
{ {
auto it = omap.find(id); auto it = omap.find(id);
...@@ -245,7 +245,7 @@ const ObjectInfo* ObjectIndex_idXML::getObjectInfo( const ObjectId id ) ...@@ -245,7 +245,7 @@ const ObjectInfo* ObjectIndex_idXML::getObjectInfo( const ObjectId id )
return NULL; return NULL;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
const ObjectInfo* ObjectIndex_idXML::getObjectInfo( const std::string& name ) const ObjectInfo* ObjectIndex_idXML::getObjectInfo( const std::string& name ) const
{ {
auto it = mok.find(name); auto it = mok.find(name);
......
...@@ -130,6 +130,7 @@ void UniSetObject::initObject() ...@@ -130,6 +130,7 @@ void UniSetObject::initObject()
auto conf = uniset_conf(); auto conf = uniset_conf();
int sz = conf->getArgPInt("--uniset-object-size-message-queue", conf->getField("SizeOfMessageQueue"), 1000); int sz = conf->getArgPInt("--uniset-object-size-message-queue", conf->getField("SizeOfMessageQueue"), 1000);
if( sz > 0 ) if( sz > 0 )
setMaxSizeOfMessageQueue(sz); setMaxSizeOfMessageQueue(sz);
...@@ -187,6 +188,7 @@ VoidMessagePtr UniSetObject::receiveMessage() ...@@ -187,6 +188,7 @@ VoidMessagePtr UniSetObject::receiveMessage()
VoidMessagePtr UniSetObject::waitMessage( timeout_t timeMS ) VoidMessagePtr UniSetObject::waitMessage( timeout_t timeMS )
{ {
auto m = receiveMessage(); auto m = receiveMessage();
if( m ) if( m )
return m; return m;
...@@ -323,6 +325,7 @@ void UniSetObject::setThreadPriority( int p ) ...@@ -323,6 +325,7 @@ void UniSetObject::setThreadPriority( int p )
void UniSetObject::push( const TransportMessage& tm ) void UniSetObject::push( const TransportMessage& tm )
{ {
auto vm = make_shared<VoidMessage>(tm); auto vm = make_shared<VoidMessage>(tm);
if( vm->priority == Message::Medium ) if( vm->priority == Message::Medium )
mqueueMedium.push(vm); mqueueMedium.push(vm);
else if( vm->priority == Message::High ) else if( vm->priority == Message::High )
...@@ -556,6 +559,7 @@ void UniSetObject::callback() ...@@ -556,6 +559,7 @@ void UniSetObject::callback()
try try
{ {
auto m = waitMessage(sleepTime); auto m = waitMessage(sleepTime);
if( m ) if( m )
processingMessage(m.get()); processingMessage(m.get());
......
...@@ -32,7 +32,7 @@ void EventLoopServer::evrun( bool thread ) ...@@ -32,7 +32,7 @@ void EventLoopServer::evrun( bool thread )
thr = make_shared<std::thread>( [ = ] { defaultLoop(); } ); thr = make_shared<std::thread>( [ = ] { defaultLoop(); } );
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
bool EventLoopServer::evIsActive() bool EventLoopServer::evIsActive() const
{ {
return isrunning; return isrunning;
} }
......
...@@ -137,7 +137,7 @@ timeout_t LT_Object::getTimeInterval( TimerId timerid ) ...@@ -137,7 +137,7 @@ timeout_t LT_Object::getTimeInterval( TimerId timerid )
return 0; return 0;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
timeout_t LT_Object::getTimeLeft(TimerId timerid) timeout_t LT_Object::getTimeLeft( TimerId timerid )
{ {
// lock // lock
uniset_rwmutex_rlock lock(lstMutex); uniset_rwmutex_rlock lock(lstMutex);
......
...@@ -44,26 +44,28 @@ void MQAtomic::push( const VoidMessagePtr& vm ) ...@@ -44,26 +44,28 @@ void MQAtomic::push( const VoidMessagePtr& vm )
if( wpos < rpos ) if( wpos < rpos )
{ {
// только надо привести к одному масштабу // только надо привести к одному масштабу
unsigned long w = wpos%SizeOfMessageQueue; unsigned long w = wpos % SizeOfMessageQueue;
unsigned long r = rpos%SizeOfMessageQueue; unsigned long r = rpos % SizeOfMessageQueue;
if( lostStrategy == lostNewData && (r-w) >= SizeOfMessageQueue ) if( lostStrategy == lostNewData && (r - w) >= SizeOfMessageQueue )
{ {
stCountOfLostMessages++; stCountOfLostMessages++;
return; return;
} }
} }
// ----------------------------------------------- // -----------------------------------------------
// сперва надо сдвинуть счётчик (чтобы следующий поток уже писал в новое место) // сперва надо сдвинуть счётчик (чтобы следующий поток уже писал в новое место)
unsigned long w = wpos.fetch_add(1); unsigned long w = wpos.fetch_add(1);
// а потом уже добавлять новое сообщение в "зарезервированное" место // а потом уже добавлять новое сообщение в "зарезервированное" место
mqueue[w%SizeOfMessageQueue] = vm; mqueue[w % SizeOfMessageQueue] = vm;
qpos.fetch_add(1); // теперь увеличиваем реальное количество элементов в очереди qpos.fetch_add(1); // теперь увеличиваем реальное количество элементов в очереди
// ведём статистику // ведём статистику
size_t sz = qpos - rpos; size_t sz = qpos - rpos;
if( sz > stMaxQueueMessages ) if( sz > stMaxQueueMessages )
stMaxQueueMessages = sz; stMaxQueueMessages = sz;
} }
...@@ -90,7 +92,7 @@ VoidMessagePtr MQAtomic::top() ...@@ -90,7 +92,7 @@ VoidMessagePtr MQAtomic::top()
{ {
// сперва надо сдвинуть счётчик (чтобы следующий поток уже работал с следующим значением) // сперва надо сдвинуть счётчик (чтобы следующий поток уже работал с следующим значением)
unsigned long r = rpos.fetch_add(1); unsigned long r = rpos.fetch_add(1);
return mqueue[r%SizeOfMessageQueue]; return mqueue[r % SizeOfMessageQueue];
} }
// Если rpos > qpos, значит qpos уже перешёл через максимум // Если rpos > qpos, значит qpos уже перешёл через максимум
...@@ -98,8 +100,8 @@ VoidMessagePtr MQAtomic::top() ...@@ -98,8 +100,8 @@ VoidMessagePtr MQAtomic::top()
if( rpos > qpos ) // делаем if каждый раз, т.к. qpos может уже поменяться в параллельном потоке if( rpos > qpos ) // делаем if каждый раз, т.к. qpos может уже поменяться в параллельном потоке
{ {
// приводим к одному масштабу // приводим к одному масштабу
unsigned long w = qpos%SizeOfMessageQueue; unsigned long w = qpos % SizeOfMessageQueue;
unsigned long r = rpos%SizeOfMessageQueue; unsigned long r = rpos % SizeOfMessageQueue;
if( lostStrategy == lostOldData && (r - w) >= SizeOfMessageQueue ) if( lostStrategy == lostOldData && (r - w) >= SizeOfMessageQueue )
{ {
...@@ -109,13 +111,13 @@ VoidMessagePtr MQAtomic::top() ...@@ -109,13 +111,13 @@ VoidMessagePtr MQAtomic::top()
// продолжаем читать как обычно // продолжаем читать как обычно
r = rpos.fetch_add(1); r = rpos.fetch_add(1);
return mqueue[r%SizeOfMessageQueue]; return mqueue[r % SizeOfMessageQueue];
} }
return nullptr; return nullptr;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
size_t MQAtomic::size() size_t MQAtomic::size() const
{ {
// т.к. rpos корректируется только при фактическом вызое top() // т.к. rpos корректируется только при фактическом вызое top()
// то тут приходиться смотреть если у нас переполнение // то тут приходиться смотреть если у нас переполнение
...@@ -127,7 +129,7 @@ size_t MQAtomic::size() ...@@ -127,7 +129,7 @@ size_t MQAtomic::size()
return (qpos - rpos); return (qpos - rpos);
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
bool MQAtomic::empty() bool MQAtomic::empty() const
{ {
return (qpos == rpos); return (qpos == rpos);
} }
...@@ -141,7 +143,7 @@ void MQAtomic::setMaxSizeOfMessageQueue( size_t s ) ...@@ -141,7 +143,7 @@ void MQAtomic::setMaxSizeOfMessageQueue( size_t s )
} }
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
size_t MQAtomic::getMaxSizeOfMessageQueue() size_t MQAtomic::getMaxSizeOfMessageQueue() const
{ {
return SizeOfMessageQueue; return SizeOfMessageQueue;
} }
...@@ -155,7 +157,8 @@ void MQAtomic::mqFill( const VoidMessagePtr& v ) ...@@ -155,7 +157,8 @@ void MQAtomic::mqFill( const VoidMessagePtr& v )
{ {
mqueue.reserve(SizeOfMessageQueue); mqueue.reserve(SizeOfMessageQueue);
mqueue.clear(); mqueue.clear();
for( size_t i=0; i<SizeOfMessageQueue; i++ )
for( size_t i = 0; i < SizeOfMessageQueue; i++ )
mqueue.push_back(v); mqueue.push_back(v);
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
...@@ -36,9 +36,10 @@ void MQMutex::push( const VoidMessagePtr& vm ) ...@@ -36,9 +36,10 @@ void MQMutex::push( const VoidMessagePtr& vm )
// проверяем переполнение, только если стратегия "терять новые данные" // проверяем переполнение, только если стратегия "терять новые данные"
// иначе нет смысла проверять, а можно просто писать новые данные затирая старые // иначе нет смысла проверять, а можно просто писать новые данные затирая старые
// (sz+1) - т.к мы смотрим есть ли место для новых данных // (sz+1) - т.к мы смотрим есть ли место для новых данных
if( (sz+1) > SizeOfMessageQueue ) if( (sz + 1) > SizeOfMessageQueue )
{ {
stCountOfLostMessages++; stCountOfLostMessages++;
if( lostStrategy == lostNewData ) if( lostStrategy == lostNewData )
return; return;
...@@ -49,6 +50,7 @@ void MQMutex::push( const VoidMessagePtr& vm ) ...@@ -49,6 +50,7 @@ void MQMutex::push( const VoidMessagePtr& vm )
mqueue.push_back(vm); mqueue.push_back(vm);
sz++; sz++;
if( sz > stMaxQueueMessages ) if( sz > stMaxQueueMessages )
stMaxQueueMessages = sz; stMaxQueueMessages = sz;
} }
...@@ -82,7 +84,7 @@ void MQMutex::setMaxSizeOfMessageQueue( size_t s ) ...@@ -82,7 +84,7 @@ void MQMutex::setMaxSizeOfMessageQueue( size_t s )
SizeOfMessageQueue = s; SizeOfMessageQueue = s;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
size_t MQMutex::getMaxSizeOfMessageQueue() size_t MQMutex::getMaxSizeOfMessageQueue() const
{ {
return SizeOfMessageQueue; return SizeOfMessageQueue;
} }
......
...@@ -16,13 +16,13 @@ const size_t COUNT = 1000000; // сколько сообщений помест ...@@ -16,13 +16,13 @@ const size_t COUNT = 1000000; // сколько сообщений помест
// поток записи // поток записи
void mq_write_thread() void mq_write_thread()
{ {
SensorMessage smsg(100,2); SensorMessage smsg(100, 2);
TransportMessage tm( std::move(smsg.transport_msg()) ); TransportMessage tm( std::move(smsg.transport_msg()) );
auto vm = make_shared<VoidMessage>(tm); auto vm = make_shared<VoidMessage>(tm);
msleep(100); msleep(100);
for( size_t i=0; i<COUNT; i++ ) for( size_t i = 0; i < COUNT; i++ )
{ {
mq.push(vm); mq.push(vm);
} }
...@@ -40,6 +40,7 @@ int one_test() ...@@ -40,6 +40,7 @@ int one_test()
while( rnum < COUNT ) while( rnum < COUNT )
{ {
auto m = mq.top(); auto m = mq.top();
if( m ) if( m )
rnum++; rnum++;
} }
...@@ -59,16 +60,16 @@ int main(int argc, const char** argv) ...@@ -59,16 +60,16 @@ int main(int argc, const char** argv)
int tnum = 10; int tnum = 10;
// чтобы не происходило переполнение // чтобы не происходило переполнение
mq.setMaxSizeOfMessageQueue(COUNT+1); mq.setMaxSizeOfMessageQueue(COUNT + 1);
// сперва просто проверка что очередь работает. // сперва просто проверка что очередь работает.
{ {
SensorMessage sm(100,2); SensorMessage sm(100, 2);
TransportMessage tm( std::move(sm.transport_msg()) ); TransportMessage tm( std::move(sm.transport_msg()) );
auto vm = make_shared<VoidMessage>(tm); auto vm = make_shared<VoidMessage>(tm);
mq.push(vm); mq.push(vm);
auto msg = mq.top(); auto msg = mq.top();
assert( msg!=nullptr ); assert( msg != nullptr );
SensorMessage sm2( msg.get() ); SensorMessage sm2( msg.get() );
assert( sm.id == sm2.id ); assert( sm.id == sm2.id );
} }
...@@ -76,14 +77,15 @@ int main(int argc, const char** argv) ...@@ -76,14 +77,15 @@ int main(int argc, const char** argv)
vector<int> res; vector<int> res;
res.reserve(tnum); res.reserve(tnum);
for( int i=0; i<tnum; i++ ) for( int i = 0; i < tnum; i++ )
{ {
res.push_back(one_test()); res.push_back(one_test());
} }
// вычисляем среднее // вычисляем среднее
int sum = 0; int sum = 0;
for( auto&& r: res )
for( auto && r : res )
sum += r; sum += r;
float avg = (float)sum / tnum; float avg = (float)sum / tnum;
......
...@@ -12,9 +12,9 @@ class TestUObject: ...@@ -12,9 +12,9 @@ class TestUObject:
public: public:
TestUObject( UniSetTypes::ObjectId id, xmlNode* cnode ): TestUObject( UniSetTypes::ObjectId id, xmlNode* cnode ):
UniSetObject(id){} UniSetObject(id) {}
virtual ~TestUObject(){}; virtual ~TestUObject() {};
// специальные функции для проведения тестирования // специальные функции для проведения тестирования
inline VoidMessagePtr getOneMessage() inline VoidMessagePtr getOneMessage()
...@@ -28,7 +28,7 @@ class TestUObject: ...@@ -28,7 +28,7 @@ class TestUObject:
} }
protected: protected:
TestUObject(){}; TestUObject() {};
}; };
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
#endif // TestUObject_H_ #endif // TestUObject_H_
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
#define TEST_MQ_ATOMIC 1 #define TEST_MQ_ATOMIC 1
#ifdef TEST_MQ_ATOMIC #ifdef TEST_MQ_ATOMIC
typedef MQAtomic UMessageQueue; typedef MQAtomic UMessageQueue;
#else #else
typedef MQMutex UMessageQueue; typedef MQMutex UMessageQueue;
#endif #endif
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -44,7 +44,7 @@ using namespace UniSetTypes; ...@@ -44,7 +44,7 @@ using namespace UniSetTypes;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static void pushMessage( UMessageQueue& mq, long id ) static void pushMessage( UMessageQueue& mq, long id )
{ {
SensorMessage sm(id,id); SensorMessage sm(id, id);
sm.consumer = id; // чтобы хоть как-то идентифицировать сообщений, используем поле consumer sm.consumer = id; // чтобы хоть как-то идентифицировать сообщений, используем поле consumer
TransportMessage tm( std::move(sm.transport_msg()) ); TransportMessage tm( std::move(sm.transport_msg()) );
auto vm = make_shared<VoidMessage>(tm); auto vm = make_shared<VoidMessage>(tm);
...@@ -66,10 +66,10 @@ TEST_CASE( "UMessageQueue: simple push/top", "[mqueue]" ) ...@@ -66,10 +66,10 @@ TEST_CASE( "UMessageQueue: simple push/top", "[mqueue]" )
UMessageQueue mq; UMessageQueue mq;
pushMessage(mq,100); pushMessage(mq, 100);
auto msg = mq.top(); auto msg = mq.top();
REQUIRE( msg!=nullptr ); REQUIRE( msg != nullptr );
REQUIRE( msg->consumer == 100 ); REQUIRE( msg->consumer == 100 );
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -82,21 +82,21 @@ TEST_CASE( "UMessageQueue: overflow (lost old data)", "[mqueue]" ) ...@@ -82,21 +82,21 @@ TEST_CASE( "UMessageQueue: overflow (lost old data)", "[mqueue]" )
mq.setLostStrategy( UMessageQueue::lostOldData ); mq.setLostStrategy( UMessageQueue::lostOldData );
pushMessage(mq,100); pushMessage(mq, 100);
REQUIRE( mq.size() == 1 ); REQUIRE( mq.size() == 1 );
pushMessage(mq,110); pushMessage(mq, 110);
REQUIRE( mq.size() == 2 ); REQUIRE( mq.size() == 2 );
pushMessage(mq,120); pushMessage(mq, 120);
REQUIRE( mq.size() == 2 ); REQUIRE( mq.size() == 2 );
auto msg = mq.top(); auto msg = mq.top();
REQUIRE( msg!=nullptr ); REQUIRE( msg != nullptr );
REQUIRE( msg->consumer == 110 ); REQUIRE( msg->consumer == 110 );
msg = mq.top(); msg = mq.top();
REQUIRE( msg!=nullptr ); REQUIRE( msg != nullptr );
REQUIRE( msg->consumer == 120 ); REQUIRE( msg->consumer == 120 );
REQUIRE( mq.getCountOfLostMessages() == 1 ); REQUIRE( mq.getCountOfLostMessages() == 1 );
...@@ -111,31 +111,31 @@ TEST_CASE( "UMessageQueue: overflow (lost new data)", "[mqueue]" ) ...@@ -111,31 +111,31 @@ TEST_CASE( "UMessageQueue: overflow (lost new data)", "[mqueue]" )
mq.setLostStrategy( UMessageQueue::lostNewData ); mq.setLostStrategy( UMessageQueue::lostNewData );
pushMessage(mq,100); pushMessage(mq, 100);
REQUIRE( mq.size() == 1 ); REQUIRE( mq.size() == 1 );
pushMessage(mq,110); pushMessage(mq, 110);
REQUIRE( mq.size() == 2 ); REQUIRE( mq.size() == 2 );
pushMessage(mq,120); pushMessage(mq, 120);
REQUIRE( mq.size() == 2 ); REQUIRE( mq.size() == 2 );
REQUIRE( mq.getCountOfLostMessages() == 1 ); REQUIRE( mq.getCountOfLostMessages() == 1 );
pushMessage(mq,130); pushMessage(mq, 130);
REQUIRE( mq.size() == 2 ); REQUIRE( mq.size() == 2 );
REQUIRE( mq.getCountOfLostMessages() == 2 ); REQUIRE( mq.getCountOfLostMessages() == 2 );
auto msg = mq.top(); auto msg = mq.top();
REQUIRE( msg!=nullptr ); REQUIRE( msg != nullptr );
REQUIRE( msg->consumer == 100 ); REQUIRE( msg->consumer == 100 );
msg = mq.top(); msg = mq.top();
REQUIRE( msg!=nullptr ); REQUIRE( msg != nullptr );
REQUIRE( msg->consumer == 110 ); REQUIRE( msg->consumer == 110 );
msg = mq.top(); msg = mq.top();
REQUIRE( msg==nullptr ); REQUIRE( msg == nullptr );
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
TEST_CASE( "UMessageQueue: many read", "[mqueue]" ) TEST_CASE( "UMessageQueue: many read", "[mqueue]" )
...@@ -146,17 +146,17 @@ TEST_CASE( "UMessageQueue: many read", "[mqueue]" ) ...@@ -146,17 +146,17 @@ TEST_CASE( "UMessageQueue: many read", "[mqueue]" )
mq.setMaxSizeOfMessageQueue(1); mq.setMaxSizeOfMessageQueue(1);
mq.setLostStrategy( UMessageQueue::lostNewData ); mq.setLostStrategy( UMessageQueue::lostNewData );
pushMessage(mq,100); pushMessage(mq, 100);
REQUIRE( mq.size() == 1 ); REQUIRE( mq.size() == 1 );
auto msg = mq.top(); auto msg = mq.top();
REQUIRE( msg!=nullptr ); REQUIRE( msg != nullptr );
REQUIRE( msg->consumer == 100 ); REQUIRE( msg->consumer == 100 );
for( int i=0; i<5; i++ ) for( int i = 0; i < 5; i++ )
{ {
auto msg = mq.top(); auto msg = mq.top();
REQUIRE( msg==nullptr ); REQUIRE( msg == nullptr );
} }
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -171,15 +171,16 @@ TEST_CASE( "UMessageQueue: correct operation", "[mqueue]" ) ...@@ -171,15 +171,16 @@ TEST_CASE( "UMessageQueue: correct operation", "[mqueue]" )
const size_t num = 1000; const size_t num = 1000;
UMessageQueue mq; UMessageQueue mq;
mq.setMaxSizeOfMessageQueue(num+1); mq.setMaxSizeOfMessageQueue(num + 1);
size_t rnum = 0; size_t rnum = 0;
for( size_t i=0; i<num; i++ )
for( size_t i = 0; i < num; i++ )
{ {
pushMessage(mq,i); pushMessage(mq, i);
// каждые 50 читатем, имитируя реальную работу (чтение между записью) // каждые 50 читатем, имитируя реальную работу (чтение между записью)
if( i%50 ) if( i % 50 )
{ {
auto m = mq.top(); auto m = mq.top();
REQUIRE( m->consumer == rnum ); REQUIRE( m->consumer == rnum );
...@@ -215,9 +216,9 @@ TEST_CASE( "UMessageQueue: overflow index (strategy=lostOldData)", "[mqueue]" ) ...@@ -215,9 +216,9 @@ TEST_CASE( "UMessageQueue: overflow index (strategy=lostOldData)", "[mqueue]" )
mq.set_rpos(max); mq.set_rpos(max);
// При переходе через максимум ничего не должны потерять // При переходе через максимум ничего не должны потерять
pushMessage(mq,100); pushMessage(mq, 100);
pushMessage(mq,110); pushMessage(mq, 110);
pushMessage(mq,120); pushMessage(mq, 120);
auto m = mq.top(); auto m = mq.top();
REQUIRE( m != nullptr ); REQUIRE( m != nullptr );
...@@ -241,9 +242,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostOldData)", "[mqueue]" ) ...@@ -241,9 +242,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostOldData)", "[mqueue]" )
mq.setLostStrategy(MQAtomic::lostOldData); mq.setLostStrategy(MQAtomic::lostOldData);
mq.setMaxSizeOfMessageQueue(2); mq.setMaxSizeOfMessageQueue(2);
pushMessage(mq,100); pushMessage(mq, 100);
pushMessage(mq,110); pushMessage(mq, 110);
pushMessage(mq,120); pushMessage(mq, 120);
auto m = mq.top(); auto m = mq.top();
REQUIRE( m != nullptr ); REQUIRE( m != nullptr );
...@@ -261,9 +262,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostOldData)", "[mqueue]" ) ...@@ -261,9 +262,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostOldData)", "[mqueue]" )
mq.set_rpos(max); mq.set_rpos(max);
// При переходе через максимум ничего не должны потерять // При переходе через максимум ничего не должны потерять
pushMessage(mq,140); pushMessage(mq, 140);
pushMessage(mq,150); pushMessage(mq, 150);
pushMessage(mq,160); pushMessage(mq, 160);
m = mq.top(); m = mq.top();
REQUIRE( m != nullptr ); REQUIRE( m != nullptr );
...@@ -289,9 +290,9 @@ TEST_CASE( "UMessageQueue: overflow index (strategy=lostNewData)", "[mqueue]" ) ...@@ -289,9 +290,9 @@ TEST_CASE( "UMessageQueue: overflow index (strategy=lostNewData)", "[mqueue]" )
mq.set_rpos(max); mq.set_rpos(max);
// При переходе через максимум ничего не должны потерять // При переходе через максимум ничего не должны потерять
pushMessage(mq,100); pushMessage(mq, 100);
pushMessage(mq,110); pushMessage(mq, 110);
pushMessage(mq,120); pushMessage(mq, 120);
auto m = mq.top(); auto m = mq.top();
REQUIRE( m != nullptr ); REQUIRE( m != nullptr );
...@@ -315,9 +316,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostNewData)", "[mqueue]" ) ...@@ -315,9 +316,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostNewData)", "[mqueue]" )
mq.setLostStrategy(MQAtomic::lostNewData); mq.setLostStrategy(MQAtomic::lostNewData);
mq.setMaxSizeOfMessageQueue(2); mq.setMaxSizeOfMessageQueue(2);
pushMessage(mq,100); pushMessage(mq, 100);
pushMessage(mq,110); pushMessage(mq, 110);
pushMessage(mq,120); pushMessage(mq, 120);
auto m = mq.top(); auto m = mq.top();
REQUIRE( m != nullptr ); REQUIRE( m != nullptr );
...@@ -335,9 +336,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostNewData)", "[mqueue]" ) ...@@ -335,9 +336,9 @@ TEST_CASE( "UMessageQueue: lost data (strategy=lostNewData)", "[mqueue]" )
mq.set_rpos(max); mq.set_rpos(max);
// При переходе через максимум ничего не должны потерять // При переходе через максимум ничего не должны потерять
pushMessage(mq,140); pushMessage(mq, 140);
pushMessage(mq,150); pushMessage(mq, 150);
pushMessage(mq,160); pushMessage(mq, 160);
m = mq.top(); m = mq.top();
REQUIRE( m != nullptr ); REQUIRE( m != nullptr );
......
...@@ -23,14 +23,14 @@ void initTest() ...@@ -23,14 +23,14 @@ void initTest()
if( !uobj ) if( !uobj )
{ {
uobj = make_object<TestUObject>("TestUObject1","TestUObject"); uobj = make_object<TestUObject>("TestUObject1", "TestUObject");
REQUIRE( uobj != nullptr ); REQUIRE( uobj != nullptr );
} }
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static void pushMessage( long id, Message::Priority p ) static void pushMessage( long id, Message::Priority p )
{ {
SensorMessage sm(id,id); SensorMessage sm(id, id);
sm.priority = p; sm.priority = p;
sm.consumer = id; // чтобы хоть как-то идентифицировать сообщений, используем поле consumer sm.consumer = id; // чтобы хоть как-то идентифицировать сообщений, используем поле consumer
TransportMessage tm( std::move(sm.transport_msg()) ); TransportMessage tm( std::move(sm.transport_msg()) );
...@@ -46,11 +46,11 @@ TEST_CASE( "UObject: priority messages", "[uobject]" ) ...@@ -46,11 +46,11 @@ TEST_CASE( "UObject: priority messages", "[uobject]" )
* Хотя в реальности, оно должно совпадать с id объекта получателя. * Хотя в реальности, оно должно совпадать с id объекта получателя.
*/ */
pushMessage(100,Message::Low); pushMessage(100, Message::Low);
pushMessage(101,Message::Low); pushMessage(101, Message::Low);
pushMessage(200,Message::Medium); pushMessage(200, Message::Medium);
pushMessage(300,Message::High); pushMessage(300, Message::High);
pushMessage(301,Message::High); pushMessage(301, Message::High);
// теперь проверяем что сперва вынули Hi // теперь проверяем что сперва вынули Hi
// но так же контролируем что порядок извлечения правильный // но так же контролируем что порядок извлечения правильный
...@@ -70,7 +70,7 @@ TEST_CASE( "UObject: priority messages", "[uobject]" ) ...@@ -70,7 +70,7 @@ TEST_CASE( "UObject: priority messages", "[uobject]" )
REQUIRE( m->priority == Message::Low ); REQUIRE( m->priority == Message::Low );
REQUIRE( m->consumer == 100 ); REQUIRE( m->consumer == 100 );
pushMessage(201,Message::Medium); pushMessage(201, Message::Medium);
m = uobj->getOneMessage(); m = uobj->getOneMessage();
REQUIRE( m->priority == Message::Medium ); REQUIRE( m->priority == Message::Medium );
REQUIRE( m->consumer == 201 ); REQUIRE( m->consumer == 201 );
......
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