Commit 702c5ece authored by Pavel Vainerman's avatar Pavel Vainerman

(ModusMultiMaster): ещё немного переписана логика переключения на другой канал

parent 4299a71b
...@@ -200,12 +200,9 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen ) ...@@ -200,12 +200,9 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
// сперва надо обновить все ignore // сперва надо обновить все ignore
// т.к. фактически флаги выставляются и сбрасываются только здесь // т.к. фактически флаги выставляются и сбрасываются только здесь
for( auto it = mblist.rbegin(); it != mblist.rend(); ++it ) for( auto it = mblist.rbegin(); it != mblist.rend(); ++it )
{ it->ignore = !it->ptIgnoreTimeout.checkTime();
if( it->ignore && it->ptIgnoreTimeout.checkTime() )
it->ignore = false;
}
// если reopen=true - значит почему текущему каналу нет (хотя соединение есть) // если reopen=true - значит почему-то по текущему каналу связи нет (хотя соединение есть)
// тогда выставляем ему признак игнорирования // тогда выставляем ему признак игнорирования
if( mbi != mblist.rend() && reopen ) if( mbi != mblist.rend() && reopen )
{ {
...@@ -215,31 +212,22 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen ) ...@@ -215,31 +212,22 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
mbwarn << myname << "(initMB): set ignore=true for " << mbi->ip << ":" << mbi->port << endl; mbwarn << myname << "(initMB): set ignore=true for " << mbi->ip << ":" << mbi->port << endl;
} }
// Если по текущему каналу связь есть, то возвращаем его // Если по текущему каналу связь есть (и мы его не игнорируем), то возвращаем его
if( mbi != mblist.rend() && !mbi->ignore && mbi->respond ) if( mbi != mblist.rend() && !mbi->ignore && mbi->respond )
{ {
if( mbi->mbtcp->isConnection() || mbi->init(mblog) ) // ещё раз проверим соединение (в неблокирующем режиме)
{ mbi->respond = mbi->check();
if( !mbi->ignore )
if( mbi->respond && (mbi->mbtcp->isConnection() || mbi->init(mblog)) )
{ {
mblog4 << myname << "(initMB): SELECT CHANNEL " << mbi->ip << ":" << mbi->port << endl; mblog4 << myname << "(initMB): SELECT CHANNEL " << mbi->ip << ":" << mbi->port << endl;
mb = mbi->mbtcp; mb = mbi->mbtcp;
mbi->setUse(true); mbi->setUse(true);
return mbi->mbtcp; return mbi->mbtcp;
} }
if( mbi->ptIgnoreTimeout.checkTime() )
{
mbi->ignore = false;
mbi->setUse(true);
mb = mbi->mbtcp;
return mbi->mbtcp;
}
mbi->setUse(false); mbi->setUse(false);
} }
}
if( mbi != mblist.rend() ) if( mbi != mblist.rend() )
mbi->mbtcp->disconnect(); mbi->mbtcp->disconnect();
......
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
#include <string> #include <string>
#include <cc++/socket.h> #include <cc++/socket.h>
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/*! Специальная "обёртка" над ost::TCPStream, устанавливающая ещё и параметры KeepAlive,
* для открытого сокета.
* \note Правда это linux-only
*/
class UTCPStream: class UTCPStream:
public ost::TCPStream public ost::TCPStream
{ {
......
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