Commit 51f45a5c authored by Pavel Vainerman's avatar Pavel Vainerman

(UNetUDP): мелкие правки

parent aed9494f
...@@ -541,10 +541,10 @@ bool UNetReceiver::recv() ...@@ -541,10 +541,10 @@ bool UNetReceiver::recv()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UNetReceiver::initIterators() void UNetReceiver::initIterators()
{ {
for( auto& it : d_icache ) for( auto&& it : d_icache )
shm->initIterator(it.ioit); shm->initIterator(it.ioit);
for( auto& it : a_icache ) for( auto&& it : a_icache )
shm->initIterator(it.ioit); shm->initIterator(it.ioit);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -558,6 +558,8 @@ void UNetReceiver::initDCache( UniSetUDP::UDPMessage& pack, bool force ) ...@@ -558,6 +558,8 @@ void UNetReceiver::initDCache( UniSetUDP::UDPMessage& pack, bool force )
d_icache.resize(pack.dcount); d_icache.resize(pack.dcount);
auto conf = uniset_conf();
for( size_t i = 0; i < d_icache.size(); i++ ) for( size_t i = 0; i < d_icache.size(); i++ )
{ {
ItemInfo& d(d_icache[i]); ItemInfo& d(d_icache[i]);
...@@ -565,7 +567,7 @@ void UNetReceiver::initDCache( UniSetUDP::UDPMessage& pack, bool force ) ...@@ -565,7 +567,7 @@ void UNetReceiver::initDCache( UniSetUDP::UDPMessage& pack, bool force )
if( d.id != pack.d_id[i] ) if( d.id != pack.d_id[i] )
{ {
d.id = pack.d_id[i]; d.id = pack.d_id[i];
d.iotype = uniset_conf()->getIOType(d.id); d.iotype = conf->getIOType(d.id);
shm->initIterator(d.ioit); shm->initIterator(d.ioit);
} }
} }
...@@ -581,6 +583,8 @@ void UNetReceiver::initACache( UniSetUDP::UDPMessage& pack, bool force ) ...@@ -581,6 +583,8 @@ void UNetReceiver::initACache( UniSetUDP::UDPMessage& pack, bool force )
a_icache.resize(pack.acount); a_icache.resize(pack.acount);
auto conf = uniset_conf();
for( size_t i = 0; i < a_icache.size(); i++ ) for( size_t i = 0; i < a_icache.size(); i++ )
{ {
ItemInfo& d(a_icache[i]); ItemInfo& d(a_icache[i]);
...@@ -588,7 +592,7 @@ void UNetReceiver::initACache( UniSetUDP::UDPMessage& pack, bool force ) ...@@ -588,7 +592,7 @@ void UNetReceiver::initACache( UniSetUDP::UDPMessage& pack, bool force )
if( d.id != pack.a_dat[i].id ) if( d.id != pack.a_dat[i].id )
{ {
d.id = pack.a_dat[i].id; d.id = pack.a_dat[i].id;
d.iotype = uniset_conf()->getIOType(d.id); d.iotype = conf->getIOType(d.id);
shm->initIterator(d.ioit); shm->initIterator(d.ioit);
} }
} }
......
...@@ -28,10 +28,9 @@ ...@@ -28,10 +28,9 @@
* КЭШ * КЭШ
* === * ===
* Для оптимизации работы с SM, т.к. в пакетах приходят только пары [id,value] сделан кэш итераторов. * Для оптимизации работы с SM, т.к. в пакетах приходят только пары [id,value] сделан кэш итераторов.
* Кэш расчитан на то, что принимаемые пакеты всегда имеют одну и ту же длину и последовательность.
* Идея проста: сделан вектор размером с количество принимаемых данных. В векторе хранятся итераторы (и всё что необходимо). * Идея проста: сделан вектор размером с количество принимаемых данных. В векторе хранятся итераторы (и всё что необходимо).
* Порядковый номер данных в пакете является индексом в кэше. * Порядковый номер данных в пакете является индексом в кэше.
* Для защиты от изменения поседовательности внутри пакета, в кэше хранится ID сохраняемого датчика, и если он не совпадёт с тем, * Для защиты от изменения последовательности внутри пакета, в кэше хранится ID сохраняемого датчика, и если он не совпадёт с тем,
* ID который пришёл в пакете - элемент кэша обновляется. * ID который пришёл в пакете - элемент кэша обновляется.
* Если количество пришедших данных не совпадают с размером кэша.. кэш обновляется. * Если количество пришедших данных не совпадают с размером кэша.. кэш обновляется.
* *
......
...@@ -357,17 +357,13 @@ std::ostream& operator<<( std::ostream& os, UNetSender::UItem& p ) ...@@ -357,17 +357,13 @@ std::ostream& operator<<( std::ostream& os, UNetSender::UItem& p )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UNetSender::initIterators() void UNetSender::initIterators()
{ {
auto it = dlist.begin(); for( auto&& it: dlist )
shm->initIterator(it.ioit);
for( ; it != dlist.end(); ++it )
shm->initIterator(it->ioit);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UNetSender::askSensors( UniversalIO::UIOCommand cmd ) void UNetSender::askSensors( UniversalIO::UIOCommand cmd )
{ {
auto it = dlist.begin(); for( auto&& it: dlist )
shm->askSensor(it.id, cmd);
for( ; it != dlist.end(); ++it )
shm->askSensor(it->id, cmd);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
/* /*
* ОПТИМИЗАЦИЯ N1: Для оптимизации обработки посылаемых пакетов (на стороне UNetReceiver) следана следующая логика: * ОПТИМИЗАЦИЯ N1: Для оптимизации обработки посылаемых пакетов (на стороне UNetReceiver) следана следующая логика:
* Номер очередного посылаемого пакета меняется (увеличивается) только, если изменились данные с момента * Номер очередного посылаемого пакета меняется (увеличивается) только, если изменились данные с момента
последней посылки. Для по данным каждый раз производится расчёт UNetUDP::makeCRC() и сравнивается с последним.. последней посылки. Для этого по данным каждый раз производится расчёт UNetUDP::makeCRC() и сравнивается с последним..
*/ */
class UNetSender class UNetSender
{ {
......
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