Commit 1ab76485 authored by Pavel Vainerman's avatar Pavel Vainerman

В целях оптимизации: ОТКАЗАЛСЯ от (так и не ставшей необходимой) идеи "alias"…

В целях оптимизации: ОТКАЗАЛСЯ от (так и не ставшей необходимой) идеи "alias" для "node", и соответственно избавился от необходимости передавать и работать в IOContoller(IONotifyController,ShraredMemory) с ПАРОЙ id,node НО nеперь стало НЕЛЬЗЯ на одном узле запустить "ДВА НАБОРА ОДИНАКОВЫХ ДАТЧИКОВ ОТЛИЧАЮЩИХСЯ ТОЛЬКО УЗЛОМ(node)".
parent b11ac98e
......@@ -62,24 +62,24 @@ interface IOController_i : UniSetManager_i
UniSetTypes::ObjectId node; /*!< узел на котором он находится */
};
long getValue(in SensorInfo si) raises(NameNotFound,Undefined);
void setValue(in SensorInfo si, in long value,
long getValue(in UniSetTypes::ObjectId sid) raises(NameNotFound,Undefined);
void setValue(in UniSetTypes::ObjectId sid, in long value,
in UniSetTypes::ObjectId sup_id) raises(NameNotFound);
// установка неопределённого состояния
// (пока работает только для аналоговых датчиков)
void setUndefinedState(in SensorInfo si, in boolean undefined, in UniSetTypes::ObjectId sup_id )
void setUndefinedState(in UniSetTypes::ObjectId sid, in boolean undefined, in UniSetTypes::ObjectId sup_id )
raises(NameNotFound);
// fast version (не вырабатывает исключения)
oneway void fastSetValue(in SensorInfo si, in long value, in UniSetTypes::ObjectId sup_id);
oneway void fastSetValue(in UniSetTypes::ObjectId sid, in long value, in UniSetTypes::ObjectId sup_id);
UniversalIO::IOType getIOType(in SensorInfo si) raises(NameNotFound);
UniversalIO::IOType getIOType(in UniSetTypes::ObjectId sid) raises(NameNotFound);
// --- Интерфейс для конфигурирования ---
/*! Получение неколиброванного значения */
long getRawValue( in SensorInfo si ) raises(NameNotFound);
long getRawValue( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
struct CalibrateInfo
{
......@@ -90,8 +90,8 @@ interface IOController_i : UniSetManager_i
short precision; /*!< точность */
};
void calibrate( in SensorInfo si, in CalibrateInfo ci, in UniSetTypes::ObjectId adminId ) raises(NameNotFound);
CalibrateInfo getCalibrateInfo( in SensorInfo si ) raises(NameNotFound);
void calibrate( in UniSetTypes::ObjectId sid, in CalibrateInfo ci, in UniSetTypes::ObjectId adminId ) raises(NameNotFound);
CalibrateInfo getCalibrateInfo( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
// --- Интерфес получения информации о всех датчиках ---
/*! Информация об аналоговом датчике */
......@@ -114,7 +114,7 @@ interface IOController_i : UniSetManager_i
typedef sequence<SensorIOInfo> SensorInfoSeq;
SensorInfoSeq getSensorsMap();
SensorIOInfo getSensorIOInfo( in SensorInfo si ) raises(NameNotFound);
SensorIOInfo getSensorIOInfo( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
// -- Функции работы со списком датчиков --
......@@ -146,7 +146,7 @@ interface IOController_i : UniSetManager_i
long tv_usec; /*!< время последнего изменения датчика, мксек (gettimeofday) */
};
ShortIOInfo getChangedTime(in SensorInfo si) raises(NameNotFound);
ShortIOInfo getChangedTime( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
/*! Информация о дискретном датчике */
......@@ -183,7 +183,7 @@ interface IONotifyController_i : IOController_i
* Позволяет заказывать как дискретные так и аналоговые датчики
* \sa UniversalIO::UniversalIOController::askSensor()
*/
void askSensor(in SensorInfo si, in UniSetTypes::ConsumerInfo ci, in UniversalIO::UIOCommand cmd ) raises(NameNotFound,IOBadParam);
void askSensor(in UniSetTypes::ObjectId sid, in UniSetTypes::ConsumerInfo ci, in UniversalIO::UIOCommand cmd ) raises(NameNotFound,IOBadParam);
/*!
Заказ сразу списка объектов.
......@@ -225,7 +225,7 @@ interface IONotifyController_i : IOController_i
* Если invert=false, порог срабатывает при условии >= hilimit и отпускается при <= lowlimit
* Если invert=true, порог срабатывает при условии <= lowlimit и отпускается при <= hilimit
*/
void askThreshold(in SensorInfo si, in UniSetTypes::ConsumerInfo ci, in UniSetTypes::ThresholdId tid,
void askThreshold(in UniSetTypes::ObjectId sid, in UniSetTypes::ConsumerInfo ci, in UniSetTypes::ThresholdId tid,
in long lowLimit, in long hiLimit, in boolean invert,
in UniversalIO::UIOCommand cmd ) raises(NameNotFound, IOBadParam, BadRange);
......@@ -233,7 +233,7 @@ interface IONotifyController_i : IOController_i
/*! Получение информации о пороге
* Т.к. пороги могут иметь одинаковый tid для разных аналоговых датчиков, то передаётся и SensorInfo
*/
ThresholdInfo getThresholdInfo( in SensorInfo si, in UniSetTypes::ThresholdId tid ) raises(NameNotFound);
ThresholdInfo getThresholdInfo( in UniSetTypes::ObjectId sid, in UniSetTypes::ThresholdId tid ) raises(NameNotFound);
struct ThresholdList
{
......@@ -246,7 +246,7 @@ interface IONotifyController_i : IOController_i
typedef sequence<ThresholdList> ThresholdsListSeq;
/*! получить список порогов для датчка "si" */
ThresholdList getThresholds( in SensorInfo si ) raises(NameNotFound);
ThresholdList getThresholds( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
/*! получить список ВСЕХ датчиков по которым созданы пороги */
ThresholdsListSeq getThresholdsList();
......
......@@ -31,7 +31,7 @@ void SharedMemory::help_print( int argc, const char* const* argv )
cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl;
}
// -----------------------------------------------------------------------------
SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ):
SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std::string& confname ):
IONotifyController_LT(id),
heartbeatCheckTime(5000),
histSaveTime(0),
......@@ -101,20 +101,18 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
activateTimeout = conf->getArgPInt("--activate-timeout", 10000);
siPulsar.id = DefaultObjectId;
siPulsar.node = DefaultObjectId;
sidPulsar = DefaultObjectId;
string p = conf->getArgParam("--pulsar-id",it.getProp("pulsar_id"));
if( !p.empty() )
{
siPulsar.id = conf->getSensorID(p);
if( siPulsar.id == DefaultObjectId )
sidPulsar = conf->getSensorID(p);
if( sidPulsar == DefaultObjectId )
{
ostringstream err;
err << myname << ": ID not found ('pulsar') for " << p;
dcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str());
}
siPulsar.node = conf->getLocalNode();
msecPulsar = conf->getArgPInt("--pulsar-msec",it.getProp("pulsar_msec"), 5000);
}
}
......@@ -149,11 +147,11 @@ void SharedMemory::timerInfo( const TimerMessage *tm )
saveHistory();
else if( tm->id == tmPulsar )
{
if( siPulsar.id != DefaultObjectId )
if( sidPulsar != DefaultObjectId )
{
bool st = (bool)localGetValue(itPulsar,siPulsar);
bool st = (bool)localGetValue(itPulsar,sidPulsar);
st ^= true;
localSetValue(itPulsar,siPulsar, (st ? 1:0), getId() );
localSetValue(itPulsar,sidPulsar, (st ? 1:0), getId() );
}
}
}
......@@ -283,24 +281,19 @@ void SharedMemory::checkHeartBeat()
return;
}
IOController_i::SensorInfo si;
si.node = conf->getLocalNode();
bool wdtpingOK = true;
for( HeartBeatList::iterator it=hlist.begin(); it!=hlist.end(); ++it )
{
try
{
si.id = it->a_sid;
long val = localGetValue(it->ioit,si);
long val = localGetValue(it->ioit,it->a_sid);
val --;
if( val < -1 )
val = -1;
localSetValue(it->ioit,si,val,getId());
localSetValue(it->ioit,it->a_sid,val,getId());
si.id = it->d_sid;
localSetValue(it->ioit,si,( val >= 0 ? true:false),getId());
localSetValue(it->ioit,it->d_sid,( val >= 0 ? true:false),getId());
// проверяем нужна ли "перезагрузка" по данному датчику
if( wdt && it->ptReboot.getInterval() )
......@@ -642,16 +635,13 @@ void SharedMemory::saveHistory()
for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit )
{
if( hit->ioit != myioEnd() )
hit->add( localGetValue( hit->ioit, hit->ioit->second.si ), it->size );
hit->add( localGetValue( hit->ioit, hit->ioit->second.si.id ), it->size );
else
{
IOController_i::SensorInfo si;
si.id = hit->id;
si.node = conf->getLocalNode();
try
{
hit->add( localGetValue( hit->ioit, si ), it->size );
hit->add( localGetValue( hit->ioit, hit->id ), it->size );
continue;
}
catch(...){}
......
......@@ -151,7 +151,7 @@
держиться равным "1" (т.е. 1 - процесс "жив"). Если процесс "вылетает" и перестаёт обновлять свой счётчик,
то через некоторое количество тактов его счётчик становится меньше нуля. Как только это происходит, SM фиксирует,
"недоступность" процесса, и выставляет дискретный датчик в ноль (т.е. 0 - процесс вылетел(недоступен)).
При этом, имеется возможность для некоторых процессов (обычно для особо важных, без которых работа невозможна) указать,
время ожидания "перезапуска процесса"(heartbeat_reboot_msec) и в случае если для SM настроена работа с WDT-таймером
и за заданное время процесс не перезапустился (не обновил свой счётчик), происходит
......@@ -163,11 +163,11 @@
<br>\b heartbeat_node="ses" - фильтрующее поле (см. --heartbeat-node)
<br>\b heartbeat_reboot_msec - время ожидания перезапуска процесса. Это необязательный параметр, задаётся только в случае
необходимости перезапуска контроллера.
Пример задания датчиков "сердцебияния":
<br>_31_04_AS - аналоговый (счётчик)
<br>_41_04_S - дискретный ("доступность процесса")
\code
<item default="10" heartbeat="1" heartbeat_ds_name="_41_04_S" heartbeat_node="ses" heartbeat_reboot_msec="10000"
id="103104" iotype="AI" name="_31_04_AS" textname="SES: IO heartbeat"/>
......@@ -177,8 +177,8 @@
<msg mtype="1" text="КСЭС: отключился ввод\вывод" value="0"/>
</MessagesList>
</item>
\endcode
\endcode
\section sec_SM_History Механизм аварийного дампа
"Аварийный дамп" представляет из себя набор циклических буферов
......@@ -216,22 +216,22 @@
size - количество точек в хранимой истории
filter - поле используемое в качестве фильтра, определяющего датчики
входящие в данную группу (историю).
\endcode
\endcode
Каждый датчик может входить в любое количество групп (историй).
Механизм фукнционирует по следующей логике:
При запуске происходит считывание параметров секции <History>
и заполнение соответствующих структур хранения. При этом происходит
проход по секции <sensors> и если встречается "не пустое" поле заданное
в качестве фильтра (\b filter), датчик включается в соответствующую историю.
Далее каждые \b savetime мсек происходит запись очередной точки истории.
При этом в конец буфера добавляется новое (текущее) значение датчика,
а одно устаревшее удаляется, тем самым всегда поддерживается буфер не более
\b size точек.
Помимо этого в фукнциях изменения датчиков (saveXXX, setXXX) отслеживается
изменение состояния "детонаторов". Если срабатывает заданое условие для
"сброса" дампа, инициируется сигнал, в который передаётся идентификатор истории
......@@ -251,13 +251,12 @@
(реализованное в базовом классе IONotifyController).
Параметр командной строки \b --db-logging 1 позволяет включить этот механизм
(в свою очередь работа с БД требует отдельной настройки).
*/
class SharedMemory:
public IONotifyController_LT
{
public:
SharedMemory( UniSetTypes::ObjectId id, std::string datafile, std::string confname="" );
SharedMemory( UniSetTypes::ObjectId id, const std::string& datafile, const std::string& confname="" );
virtual ~SharedMemory();
/*! глобальная функция для инициализации объекта */
......@@ -417,9 +416,9 @@ class SharedMemory:
int evntPause;
int activateTimeout;
virtual void loggingInfo(UniSetTypes::SensorMessage& sm);
virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerList& lst){}
virtual void dumpThresholdList(const IOController_i::SensorInfo& si, const IONotifyController::ThresholdExtList& lst){}
virtual void loggingInfo( UniSetTypes::SensorMessage& sm );
virtual void dumpOrdersList( const UniSetTypes::ObjectId sid, const IONotifyController::ConsumerList& lst ){}
virtual void dumpThresholdList( const UniSetTypes::ObjectId sid, const IONotifyController::ThresholdExtList& lst ){}
bool dblogging;
......@@ -434,7 +433,7 @@ class SharedMemory:
bool isActivated();
IOStateList::iterator itPulsar;
IOController_i::SensorInfo siPulsar;
UniSetTypes::ObjectId sidPulsar;
int msecPulsar;
private:
......
......@@ -18,7 +18,7 @@ class SMInterface
void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
long getValue ( UniSetTypes::ObjectId id );
void askSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
......@@ -38,11 +38,11 @@ class SMInterface
*/
void localSetUndefinedState( IOController::IOStateList::iterator& it,
bool undefined, UniSetTypes::ObjectId sid );
// специальные функции
IOController::IOStateList::iterator ioEnd();
void initIterator( IOController::IOStateList::iterator& it );
bool exist();
bool waitSMready( int msec, int pause=5000 );
bool waitSMworking( UniSetTypes::ObjectId, int msec, int pause=3000 );
......@@ -51,7 +51,7 @@ class SMInterface
inline UniSetTypes::ObjectId ID(){ return myid; }
inline IONotifyController* SM(){ return ic; }
inline UniSetTypes::ObjectId getSMID(){ return shmID; }
protected:
IONotifyController* ic;
UInterface* ui;
......
......@@ -99,63 +99,56 @@ SMInterface::~SMInterface()
}
// --------------------------------------------------------------------------
void SMInterface::setValue ( UniSetTypes::ObjectId id, long value )
void SMInterface::setValue( UniSetTypes::ObjectId id, long value )
{
IOController_i::SensorInfo si;
si.id = id;
si.node = conf->getLocalNode();
if( ic )
{
BEG_FUNC1(SMInterface::setValue)
ic->fastSetValue(si,value,myid);
ic->fastSetValue(id,value,myid);
return;
END_FUNC(SMInterface::setValue)
}
IOController_i::SensorInfo si;
si.id = id;
si.node = conf->getLocalNode();
BEG_FUNC1(SMInterface::setValue)
ui->fastSetValue(si,value,myid);
return;
END_FUNC(SMInterface::setValue)
}
// --------------------------------------------------------------------------
long SMInterface::getValue ( UniSetTypes::ObjectId id )
long SMInterface::getValue( UniSetTypes::ObjectId id )
{
IOController_i::SensorInfo si;
si.id = id;
si.node = conf->getLocalNode();
if( ic )
{
BEG_FUNC1(SMInterface::getValue)
return ic->getValue(si);
return ic->getValue(id);
END_FUNC(SMInterface::getValue)
}
BEG_FUNC1(SMInterface::getValue)
return ui->getValue(si.id,si.node);
return ui->getValue(id);
END_FUNC(SMInterface::getValue)
}
// --------------------------------------------------------------------------
void SMInterface::askSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid )
{
IOController_i::SensorInfo_var si;
si->id = id;
si->node = conf->getLocalNode();
ConsumerInfo_var ci;
ci->id = (backid==DefaultObjectId) ? myid : backid;
ci->node = conf->getLocalNode();
ci->id = (backid==DefaultObjectId) ? myid : backid;
ci->node = conf->getLocalNode();
if( ic )
{
BEG_FUNC1(SMInterface::askSensor)
ic->askSensor(si, ci, cmd );
ic->askSensor(id, ci, cmd);
return;
END_FUNC(SMInterface::askSensor)
}
BEG_FUNC1(SMInterface::askSensor)
ui->askRemoteSensor(si->id,cmd,si->node,ci->id);
ui->askRemoteSensor(id,cmd,conf->getLocalNode(),ci->id);
return;
END_FUNC(SMInterface::askSensor)
}
......@@ -180,7 +173,7 @@ IONotifyController_i::ThresholdsListSeq* SMInterface::getThresholdsList()
{
BEG_FUNC1(SMInterface::getThresholdsList)
return ic->getThresholdsList();
END_FUNC(SMInterface::getThresholdsList)
END_FUNC(SMInterface::getThresholdsList)
}
BEG_FUNC(SMInterface::getThresholdsList)
......@@ -194,12 +187,12 @@ void SMInterface::setUndefinedState( IOController_i::SensorInfo& si, bool undefi
if( ic )
{
BEG_FUNC1(SMInterface::setUndefinedState)
ic->setUndefinedState(si,undefined,sup_id);
ic->setUndefinedState(si.id,undefined,sup_id);
return;
END_FUNC(SMInterface::setUndefinedState)
}
BEG_FUNC(SMInterface::setUndefinedState)
shm->setUndefinedState(si,undefined,sup_id);
shm->setUndefinedState(si.id,undefined,sup_id);
return;
END_FUNC(SMInterface::setUndefinedState)
}
......@@ -232,7 +225,7 @@ void SMInterface::localSetValue( IOController::IOStateList::iterator& it,
IOController_i::SensorInfo si;
si.id = sid;
si.node = conf->getLocalNode();
ic->localSetValue(it,si,value,sup_id);
ic->localSetValue(it,si.id,value,sup_id);
}
// --------------------------------------------------------------------------
long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSetTypes::ObjectId sid )
......@@ -241,10 +234,7 @@ long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSet
return getValue( sid );
// CHECK_IC_PTR(localGetValue)
IOController_i::SensorInfo si;
si.id = sid;
si.node = conf->getLocalNode();
return ic->localGetValue(it,si);
return ic->localGetValue(it,sid);
}
// --------------------------------------------------------------------------
void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& it,
......@@ -257,15 +247,12 @@ void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& i
IOController_i::SensorInfo si;
si.id = sid;
si.node = conf->getLocalNode();
setUndefinedState( si,undefined,myid);
setUndefinedState(si,undefined,myid);
return;
}
IOController_i::SensorInfo si;
si.id = sid;
si.node = conf->getLocalNode();
ic->localSetUndefinedState(it,undefined,si);
}
ic->localSetUndefinedState(it,undefined,sid);
}
// --------------------------------------------------------------------------
void SMInterface::initIterator( IOController::IOStateList::iterator& it )
{
......@@ -286,10 +273,10 @@ bool SMInterface::waitSMready( int ready_timeout, int pmsec )
break;
}
catch(...){}
msleep(pmsec);
}
return sm_ready;
}
// --------------------------------------------------------------------------
......
......@@ -46,7 +46,7 @@ void TestProc::sysCommand( const UniSetTypes::SystemMessage* sm )
askTimer(tmLogControl,checkLogTime);
// В начальный момент времени блокирующий датчик =0, поэтому d2_check_s должен быть равен depend_off_value (-50).
cerr << myname << "(startup): check init depend: " << ( getValue(d2_check_s) == -50 ? "OK" : "FAIL" ) << endl;
cerr << myname << "(startup): check init depend: " << ( getValue(d2_check_s) == -50 ? "ok" : "FAIL" ) << endl;
}
}
// -----------------------------------------------------------------------------
......@@ -73,7 +73,7 @@ void TestProc::sensorInfo( const SensorMessage *sm )
}
else if( sm->id == check_undef_s )
{
cerr << myname << "(sensorInfo): CHECK UNDEFINED STATE ==> " << (sm->undefined==undef ? "OK" : "FAIL") << endl;
cerr << myname << "(sensorInfo): CHECK UNDEFINED STATE ==> " << (sm->undefined==undef ? "ok" : "FAIL") << endl;
}
}
// -----------------------------------------------------------------------------
......@@ -118,13 +118,13 @@ void TestProc::test_depend()
setValue(depend_c,0);
setValue(set_d1_check_s,test_val);
setValue(set_d2_check_s,test_val);
cerr << myname << ": check depend OFF: d1: " << ( getValue(d1_check_s) == 0 ? "OK" : "FAIL" ) << endl;
cerr << myname << ": check depend OFF: d2: " << ( getValue(d2_check_s) == -50 ? "OK" : "FAIL" ) << endl;
cerr << myname << ": check depend OFF: d1: " << ( getValue(d1_check_s) == 0 ? "ok" : "FAIL" ) << endl;
cerr << myname << ": check depend OFF: d2: " << ( getValue(d2_check_s) == -50 ? "ok" : "FAIL" ) << endl;
// set depend 1
setValue(depend_c,1);
cerr << myname << ": check depend ON: d1: " << ( getValue(d1_check_s) == test_val ? "OK" : "FAIL" ) << endl;
cerr << myname << ": check depend ON: d2: " << ( getValue(d2_check_s) == test_val ? "OK" : "FAIL" ) << endl;
cerr << myname << ": check depend ON: d1: " << ( getValue(d1_check_s) == test_val ? "ok" : "FAIL" ) << endl;
cerr << myname << ": check depend ON: d2: " << ( getValue(d2_check_s) == test_val ? "ok" : "FAIL" ) << endl;
}
// -----------------------------------------------------------------------------
void TestProc::test_undefined_state()
......@@ -145,10 +145,10 @@ void TestProc::test_thresholds()
cerr << myname << ": Check thresholds..." << endl;
setValue(t_set_c,0);
cerr << myname << ": check threshold OFF value: " << ( getValue(t_check_s) == 0 ? "OK" : "FAIL" ) << endl;
cerr << myname << ": check threshold OFF value: " << ( getValue(t_check_s) == 0 ? "ok" : "FAIL" ) << endl;
setValue(t_set_c,378);
cerr << myname << ": check threshold ON value: " << ( getValue(t_check_s) == 1 ? "OK" : "FAIL" ) << endl;
cerr << myname << ": check threshold ON value: " << ( getValue(t_check_s) == 1 ? "ok" : "FAIL" ) << endl;
cerr << myname << ": ask threshold and check.. " << endl;
......@@ -159,10 +159,10 @@ void TestProc::test_thresholds()
ui.askThreshold( t_set_c, tid, UniversalIO::UIONotify, 10, 20 );
IONotifyController_i::ThresholdInfo ti = ui.getThresholdInfo(t_set_c,tid);
cerr << myname << ": ask OFF threshold: " << ( ti.state == IONotifyController_i::NormalThreshold ? "OK" : "FAIL" ) << endl;
cerr << myname << ": ask OFF threshold: " << ( ti.state == IONotifyController_i::NormalThreshold ? "ok" : "FAIL" ) << endl;
setValue(t_set_c, 25);
ti = ui.getThresholdInfo(t_set_c,tid);
cerr << myname << ": ask ON threshold: " << ( ti.state == IONotifyController_i::HiThreshold ? "OK" : "FAIL" ) << endl;
cerr << myname << ": ask ON threshold: " << ( ti.state == IONotifyController_i::HiThreshold ? "ok" : "FAIL" ) << endl;
}
catch( Exception& ex )
{
......
......@@ -118,7 +118,7 @@ namespace UniSetTypes
UniSetTypes::ObjectId getControllerID( const std::string& name );
UniSetTypes::ObjectId getObjectID( const std::string& name );
UniSetTypes::ObjectId getServiceID( const std::string& name );
UniSetTypes::ObjectId getNodeID( const std::string& name, const std::string& alias="" );
UniSetTypes::ObjectId getNodeID( const std::string& name );
inline const std::string getConfFileName() const { return fileConfName; }
inline std::string getImagesDir() const { return imagesDir; } // временно
......
......@@ -41,25 +41,25 @@ class IOController:
{
public:
IOController(const std::string& name, const std::string& section);
IOController(UniSetTypes::ObjectId id);
IOController( const std::string& name, const std::string& section );
IOController( const UniSetTypes::ObjectId id );
~IOController();
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::ObjectType("IOController"); }
virtual CORBA::Long getValue( const IOController_i::SensorInfo& si );
virtual CORBA::Long getValue( UniSetTypes::ObjectId sid );
// -------------------- !!!!!!!!! ---------------------------------
// Реализуются конкретным i/o контроллером
// Не забывайте писать реализацию этих функций
virtual void setValue( const IOController_i::SensorInfo& si, CORBA::Long value,
virtual void setValue( UniSetTypes::ObjectId sid, CORBA::Long value,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value,
virtual void fastSetValue( UniSetTypes::ObjectId sid, CORBA::Long value,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
// ----------------------------------------------------------------
virtual void setUndefinedState(const IOController_i::SensorInfo& si,
virtual void setUndefinedState( UniSetTypes::ObjectId sid,
CORBA::Boolean undefined,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
......@@ -68,30 +68,30 @@ class IOController:
virtual UniSetTypes::IDSeq* setOutputSeq( const IOController_i::OutSeq& lst, UniSetTypes::ObjectId sup_id );
// ----------------------------------------------------------------
virtual UniversalIO::IOType getIOType( const IOController_i::SensorInfo& si );
virtual UniversalIO::IOType getIOType( UniSetTypes::ObjectId sid );
virtual IOController_i::SensorInfoSeq* getSensorsMap();
virtual IOController_i::SensorIOInfo getSensorIOInfo( const IOController_i::SensorInfo& si );
virtual IOController_i::SensorIOInfo getSensorIOInfo( UniSetTypes::ObjectId sid );
virtual CORBA::Long getRawValue(const IOController_i::SensorInfo& si);
virtual void calibrate(const IOController_i::SensorInfo& si,
virtual CORBA::Long getRawValue(UniSetTypes::ObjectId sid);
virtual void calibrate(UniSetTypes::ObjectId sid,
const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId );
IOController_i::CalibrateInfo getCalibrateInfo( const IOController_i::SensorInfo& si );
IOController_i::CalibrateInfo getCalibrateInfo( UniSetTypes::ObjectId sid );
inline IOController_i::SensorInfo SensorInfo(UniSetTypes::ObjectId id,
UniSetTypes::ObjectId node=UniSetTypes::conf->getLocalNode())
inline IOController_i::SensorInfo SensorInfo( const UniSetTypes::ObjectId sid,
const UniSetTypes::ObjectId node=UniSetTypes::conf->getLocalNode())
{
IOController_i::SensorInfo si;
si.id = id;
si.id = sid;
si.node = node;
return si;
};
UniSetTypes::Message::Priority getPriority( const IOController_i::SensorInfo& si, UniversalIO::IOType type );
UniSetTypes::Message::Priority getPriority( const UniSetTypes::ObjectId id );
virtual IOController_i::ShortIOInfo getChangedTime( const IOController_i::SensorInfo& si );
virtual IOController_i::ShortIOInfo getChangedTime( const UniSetTypes::ObjectId id );
virtual IOController_i::ShortMapSeq* getSensors();
......@@ -99,7 +99,7 @@ class IOController:
// предварительное объявление, чтобы в структуре объявить итератор..
struct USensorInfo;
typedef std::map<UniSetTypes::KeyType, USensorInfo> IOStateList;
typedef std::map<UniSetTypes::ObjectId, USensorInfo> IOStateList;
// ================== Достпуные сигналы =================
/*!
......@@ -111,14 +111,13 @@ class IOController:
typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeUndefinedStateSignal;
// signal по изменению определённого датчика
ChangeSignal signal_change_value( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node );
ChangeSignal signal_change_value( const IOController_i::SensorInfo& si );
ChangeSignal signal_change_value( UniSetTypes::ObjectId sid );
// signal по изменению любого датчика
ChangeSignal signal_change_value();
// сигналы по изменению флага "неопределённое состояние" (обрыв датчика например)
ChangeUndefinedStateSignal signal_change_undefined_state( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node );
ChangeUndefinedStateSignal signal_change_undefined_state( const IOController_i::SensorInfo& si );
ChangeUndefinedStateSignal signal_change_undefined_state( UniSetTypes::ObjectId sid );
ChangeUndefinedStateSignal signal_change_undefined_state();
// -----------------------------------------------------------------------------------------
......@@ -175,10 +174,10 @@ class IOController:
inline int ioCount(){ return ioList.size(); }
// доступ к элементам через итератор
virtual void localSetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si,
virtual void localSetValue( IOStateList::iterator& it, const UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si );
virtual long localGetValue( IOStateList::iterator& it, const UniSetTypes::ObjectId sid );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
......@@ -186,7 +185,7 @@ class IOController:
// см. логику выставления в функции localSaveState
*/
virtual void localSetUndefinedState( IOStateList::iterator& it, bool undefined,
const IOController_i::SensorInfo& si );
const UniSetTypes::ObjectId sid );
protected:
// переопределяем для добавления вызова регистрации датчиков
......@@ -211,9 +210,7 @@ class IOController:
void ioRegistration( const USensorInfo&, bool force=false );
/*! разрегистрация датчика */
void ioUnRegistration( const IOController_i::SensorInfo& si );
UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type);
void ioUnRegistration( const UniSetTypes::ObjectId sid );
// ------------------------------
inline IOController_i::SensorIOInfo
......@@ -243,7 +240,7 @@ class IOController:
};
//! сохранение информации об изменении состояния датчика
virtual void logging(UniSetTypes::SensorMessage& sm);
virtual void logging( UniSetTypes::SensorMessage& sm );
//! сохранение состояния всех датчиков в БД
virtual void dumpToDB();
......
......@@ -132,20 +132,20 @@ class IONotifyController:
public:
IONotifyController(const std::string& name, const std::string& section, NCRestorer* dumper=0);
IONotifyController(UniSetTypes::ObjectId id, NCRestorer* dumper=0);
IONotifyController(const UniSetTypes::ObjectId id, NCRestorer* dumper=0);
virtual ~IONotifyController();
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::ObjectType("IONotifyController"); }
virtual void askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askSensor(const UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci,
virtual void askThreshold(const UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
UniversalIO::UIOCommand cmd );
virtual IONotifyController_i::ThresholdInfo getThresholdInfo( const IOController_i::SensorInfo& si, UniSetTypes::ThresholdId tid );
virtual IONotifyController_i::ThresholdList* getThresholds(const IOController_i::SensorInfo& si );
virtual IONotifyController_i::ThresholdInfo getThresholdInfo( const UniSetTypes::ObjectId sid, UniSetTypes::ThresholdId tid );
virtual IONotifyController_i::ThresholdList* getThresholds(const UniSetTypes::ObjectId sid );
virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList();
virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst,
......@@ -155,7 +155,7 @@ class IONotifyController:
// функция для работы напрямую черех iterator (оптимизация)
virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si,
UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
// --------------------------------------------
......@@ -263,27 +263,26 @@ class IONotifyController:
bool myIOFilter(const USensorInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
//! посылка информации об изменении состояния датчика
virtual void send(ConsumerListInfo& lst, UniSetTypes::SensorMessage& sm);
virtual void send( ConsumerListInfo& lst, UniSetTypes::SensorMessage& sm );
//! проверка срабатывания пороговых датчиков
virtual void checkThreshold( IOStateList::iterator& li,
const IOController_i::SensorInfo& si, bool send=true );
virtual void checkThreshold( IOStateList::iterator& li, const UniSetTypes::ObjectId sid, bool send=true );
//! поиск информации о пороговом датчике
ThresholdExtList::iterator findThreshold( UniSetTypes::KeyType k, UniSetTypes::ThresholdId tid );
ThresholdExtList::iterator findThreshold( const UniSetTypes::ObjectId sid, const UniSetTypes::ThresholdId tid );
//! сохранение информации об изменении состояния датчика в базу
virtual void loggingInfo(UniSetTypes::SensorMessage& sm);
virtual void loggingInfo( UniSetTypes::SensorMessage& sm );
/*! сохранение списка заказчиков
По умолчанию делает dump, если объявлен dumper.
*/
virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerListInfo& lst);
virtual void dumpOrdersList( const UniSetTypes::ObjectId sid, const IONotifyController::ConsumerListInfo& lst );
/*! сохранение списка заказчиков пороговых датчиков
По умолчанию делает dump, если объявлен dumper.
*/
virtual void dumpThresholdList(const IOController_i::SensorInfo& si, const IONotifyController::ThresholdExtList& lst);
virtual void dumpThresholdList( const UniSetTypes::ObjectId sid, const IONotifyController::ThresholdExtList& lst );
/*! чтение dump-файла */
virtual void readDump();
......@@ -292,9 +291,6 @@ class IONotifyController:
void onChangeUndefinedState( IOStateList::iterator& it, IOController* ic );
// UniSetTypes::uniset_rwmutex sig_mutex;
// ChangeSignal changeSignal;
private:
friend class NCRestorer;
......@@ -303,15 +299,14 @@ class IONotifyController:
bool removeConsumer(ConsumerListInfo& lst, const UniSetTypes::ConsumerInfo& cons ); //!< удалить потребителя сообщения
//! обработка заказа
void ask(AskMap& askLst, const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
void ask(AskMap& askLst, const UniSetTypes::ObjectId sid,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
/*! добавить новый порог для датчика */
bool addThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& cons);
/*! удалить порог для датчика */
bool removeThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci);
AskMap askIOList; /*!< список потребителей по аналоговым датчикам */
AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */
......
......@@ -37,12 +37,12 @@ class IORFile
public:
IORFile();
std::string getIOR( const ObjectId id, const ObjectId node ) const;
void setIOR( const ObjectId id, const ObjectId node, const std::string& sior ) const;
void unlinkIOR( const ObjectId id, const ObjectId node ) const;
std::string getIOR( const ObjectId id ) const;
void setIOR( const ObjectId id, const std::string& sior ) const;
void unlinkIOR( const ObjectId id ) const;
protected:
std::string genFName( const ObjectId id, const ObjectId node ) const;
std::string genFName( const ObjectId id ) const;
private:
};
......
......@@ -35,66 +35,40 @@ class ObjectIndex
ObjectIndex(){};
virtual ~ObjectIndex(){};
static const std::string sepName;
static const std::string sepNode;
// info
virtual const ObjectInfo* getObjectInfo( const ObjectId )=0;
virtual const ObjectInfo* getObjectInfo( const UniSetTypes::ObjectId )=0;
virtual const ObjectInfo* getObjectInfo( const std::string& name )=0;
// создание полного имени в репозитории по паре имя:узел
static std::string mkRepName( const std::string& repname, const std::string& nodename );
// создание имени узла по реальному и виртуальному
static std::string mkFullNodeName( const std::string& realnode, const std::string& virtnode );
// получить имя для регистрации в репозитории (т.е. без секции)
static std::string getBaseName( const std::string& fname );
// object id
virtual ObjectId getIdByName(const std::string& name)=0;
virtual std::string getNameById( const ObjectId id );
virtual std::string getNameById( const ObjectId id, const ObjectId node );
virtual std::string getNameById( const UniSetTypes::ObjectId id );
// node
virtual std::string getFullNodeName(const std::string& fullname);
virtual std::string getVirtualNodeName(const std::string& fullNodeName);
virtual std::string getRealNodeName(const std::string& fullNodeName);
virtual std::string getRealNodeName( const ObjectId id );
virtual std::string getName( const std::string& fullname );
inline std::string getNodeName( const UniSetTypes::ObjectId id )
{
return getNameById(id);
}
inline ObjectId getNodeId( const std::string& name ) { return getIdByName(name); }
// src name
virtual std::string getMapName(const ObjectId id)=0;
virtual std::string getTextName(const ObjectId id)=0;
virtual std::string getMapName( const UniSetTypes::ObjectId id )=0;
virtual std::string getTextName( const UniSetTypes::ObjectId id )=0;
//
virtual std::ostream& printMap(std::ostream& os)=0;
// ext
inline ObjectId getIdByFullName(const std::string& fname)
{
return getIdByName(getName(fname));
}
inline ObjectId getNodeId( const std::string& fullname )
{
return getIdByName( getFullNodeName(fullname) );
}
inline std::string getFullNodeName( const ObjectId nodeid )
{
return getMapName(nodeid);
}
void initLocalNode( const UniSetTypes::ObjectId nodeid );
void initLocalNode( ObjectId nodeid );
protected:
std::string nmLocalNode; // для оптимизации
private:
};
// -----------------------------------------------------------------------------------------
} // end of namespace
......
......@@ -41,25 +41,24 @@ class ObjectIndex_XML:
ObjectIndex_XML(UniXML& xml, int minSize=1000 );
virtual ~ObjectIndex_XML();
virtual const UniSetTypes::ObjectInfo* getObjectInfo(const ObjectId);
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const ObjectId );
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name );
virtual ObjectId getIdByName(const std::string& name);
virtual std::string getMapName(const ObjectId id);
virtual std::string getTextName(const ObjectId id);
virtual ObjectId getIdByName( const std::string& name );
virtual std::string getMapName( const ObjectId id );
virtual std::string getTextName( const ObjectId id );
virtual std::ostream& printMap(std::ostream& os);
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi );
protected:
virtual void build(UniXML& xml);
unsigned int read_section( UniXML& xml, const std::string& sec, unsigned int ind );
unsigned int read_nodes( UniXML& xml, const std::string& sec, unsigned int ind );
private:
typedef std::map<std::string, ObjectId> MapObjectKey;
MapObjectKey mok; // для обратного писка
std::vector<ObjectInfo> omap; // для прямого поиска
};
// -----------------------------------------------------------------------------------------
} // end of namespace
......
......@@ -23,7 +23,7 @@ class ObjectIndex_idXML:
virtual std::ostream& printMap( std::ostream& os );
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi );
protected:
virtual void build( UniXML& xml );
void read_section( UniXML& xml, const std::string& sec );
......
......@@ -83,7 +83,7 @@ class UInterface
// fast - это удалённый вызов "без подтверждения", он быстрее, но менее надёжен
// т.к. вызывающий никогда не узнает об ошибке, если она была (датчик такой не найдён и т.п.)
void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
void fastSetValue( const IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
//! Получение состояния для списка указанных датчиков
IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst );
......@@ -108,7 +108,7 @@ class UInterface
// ------------------------------------------------------
// установка неопределённого состояния
void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
void setUndefinedState( const IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
// ---------------------------------------------------------------
// Калибровка... пороги...
......@@ -160,11 +160,9 @@ class UInterface
// /*! регистрация объекта в репозитории */
void registered(const UniSetTypes::ObjectId id, const UniSetTypes::ObjectPtr oRef, bool force=false)const throw(UniSetTypes::ORepFailed);
void registered(const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node, const UniSetTypes::ObjectPtr oRef, bool force=false)const throw(UniSetTypes::ORepFailed);
// /*! разрегистрация объекта */
void unregister(const UniSetTypes::ObjectId id)throw(UniSetTypes::ORepFailed);
void unregister(const UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) throw(UniSetTypes::ORepFailed);
/*! получение ссылки на объект */
inline UniSetTypes::ObjectPtr resolve( const std::string& name ) const
......@@ -174,7 +172,6 @@ class UInterface
inline UniSetTypes::ObjectPtr resolve( const UniSetTypes::ObjectId id ) const
{
// std::string nm = oind->getNameById(id);
return rep.resolve( oind->getNameById(id) );
}
......@@ -211,30 +208,19 @@ class UInterface
return oind->getNameById(id);
}
inline std::string getNameById( const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node ) const
{
return oind->getNameById(id, node);
}
inline UniSetTypes::ObjectId getNodeId( const std::string& fullname ) const
{
return oind->getNodeId(fullname);
}
inline std::string getName( const std::string& fullname ) const
{
return oind->getName(fullname);
}
inline std::string getTextName( const UniSetTypes::ObjectId id ) const
{
return oind->getTextName(id);
}
// ---------------------------------------------------------------
// Получение указателей на вспомогательные классы.
inline UniSetTypes::ObjectIndex* getObjectIndex() { return oind; }
inline const UniSetTypes::ObjectIndex* getObjectIndex() { return oind; }
inline const UniSetTypes::Configuration* getConf() { return uconf; }
// ---------------------------------------------------------------
......
......@@ -37,9 +37,9 @@ IORFile::IORFile()
}
// -----------------------------------------------------------------------------------------
string IORFile::getIOR( const ObjectId id, const ObjectId node ) const
string IORFile::getIOR( const ObjectId id ) const
{
string fname( genFName(id,node) );
string fname( genFName(id) );
ifstream ior_file(fname.c_str());
string sior;
ior_file >> sior;
......@@ -47,9 +47,9 @@ string IORFile::getIOR( const ObjectId id, const ObjectId node ) const
return sior;
}
// -----------------------------------------------------------------------------------------
void IORFile::setIOR( const ObjectId id, const ObjectId node, const string& sior ) const
void IORFile::setIOR( const ObjectId id, const string& sior ) const
{
string fname( genFName(id,node) );
string fname( genFName(id) );
ofstream ior_file(fname.c_str(), ios::out | ios::trunc);
if( !ior_file )
......@@ -62,16 +62,16 @@ void IORFile::setIOR( const ObjectId id, const ObjectId node, const string& sior
ior_file.close();
}
// -----------------------------------------------------------------------------------------
void IORFile::unlinkIOR( const ObjectId id, const ObjectId node ) const
void IORFile::unlinkIOR( const ObjectId id ) const
{
string fname( genFName(id,node) );
string fname( genFName(id) );
unlink(fname.c_str());
}
// -----------------------------------------------------------------------------------------
string IORFile::genFName( const ObjectId id, const ObjectId node ) const
string IORFile::genFName( const ObjectId id ) const
{
ostringstream fname;
fname << conf->getLockDir() << id << "." << node;
fname << conf->getLockDir() << id;
return fname.str();
}
// -----------------------------------------------------------------------------------------
......@@ -196,26 +196,12 @@ namespace ORepHelpers
*/
const string getShortName( const string& fname, const std::string& brk )
{
/*
string::size_type pos = fname.rfind(brk);
if( pos == string::npos )
return fname;
return fname.substr( pos+1, fname.length() );
*/
string::size_type pos1 = fname.rfind(brk);
string::size_type pos2 = fname.rfind(conf->oind->sepName);
if( pos2 == string::npos && pos1 == string::npos )
return fname;
if( pos1 == string::npos )
return fname.substr( 0, pos2 );
if( pos2 == string::npos )
return fname.substr( pos1+1, fname.length() );
return fname.substr( pos1+1, pos2-pos1-1 );
}
// ---------------------------------------------------------------------------------------------------------------
......@@ -231,17 +217,17 @@ namespace ORepHelpers
return "";
return fullName.substr(0, pos);
}
}
// ---------------------------------------------------------------------------------------------------------------
/*
* Запрещенные символы см. UniSetTypes::BadSymbols[]
* \return Если не найдено запрещенных символов то будет возвращен 0, иначе найденный символ
*/
char checkBadSymbols(const string& str)
char checkBadSymbols( const string& str )
{
using namespace UniSetTypes;
for ( unsigned int i=0;i<str.length();i++)
{
for(unsigned int k=0; k<sizeof(BadSymbols); k++)
......@@ -251,7 +237,7 @@ namespace ORepHelpers
}
}
return 0;
}
}
// ---------------------------------------------------------------------------------------------------------------
string BadSymbolsToStr()
......@@ -269,4 +255,3 @@ namespace ORepHelpers
}
// ---------------------------------------------------------------------------------------------------------------
}
......@@ -30,42 +30,13 @@
// -----------------------------------------------------------------------------------------
using namespace UniSetTypes;
// -----------------------------------------------------------------------------------------
const std::string ObjectIndex::sepName = "@";
const std::string ObjectIndex::sepNode = ":";
//const std::string ObjectIndex::sepName = "@";
//const std::string ObjectIndex::sepNode = ":";
// -----------------------------------------------------------------------------------------
string ObjectIndex::getNameById( const ObjectId id )
{
string n(getMapName(id));
if( n.empty() )
return "";
return mkRepName(n,nmLocalNode);
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getNameById( const ObjectId id, const ObjectId node )
{
const string t(getMapName(id));
if( t.empty() )
return "";
// оптимизация
if( node == conf->getLocalNode() )
return mkRepName(t,nmLocalNode);
return mkRepName(t,getMapName(node));
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::mkRepName( const std::string& repname, const std::string& nodename )
{
return repname + sepName + nodename;
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::mkFullNodeName( const std::string& realnode, const std::string& virtnode )
{
// realnode справа, что поиск и вырезание происходили быстрее
// эта функция часто используется...
return virtnode + sepNode + realnode;
return getMapName(id);
}
// -----------------------------------------------------------------------------------------
std::string ObjectIndex::getBaseName( const std::string& fname )
......@@ -73,82 +44,11 @@ std::string ObjectIndex::getBaseName( const std::string& fname )
string::size_type pos = fname.rfind('/');
if( pos != string::npos )
return fname.substr(pos+1);
return fname;
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getFullNodeName( const string& oname )
{
string::size_type pos = oname.rfind(sepName);
if( pos != string::npos )
return oname.substr(pos+1);
// Если не нашли разделитель name@vnode:rnode
// то пытаемся найти в данной строке сочетание vnode:rnode
string vnode = getVirtualNodeName(oname);
string rnode = getRealNodeName(oname);
if( !rnode.empty() )
{
if( vnode.empty() )
vnode = rnode;
return mkFullNodeName(rnode,vnode);
}
// Если не нашли, то возвращаем, полное имя
// ЛОКАЛЬНОГО узла...(для оптимизации хранимого в классе)
if( !nmLocalNode.empty() )
return mkFullNodeName(nmLocalNode,nmLocalNode);
nmLocalNode = getMapName(UniSetTypes::conf->getLocalNode());
return mkFullNodeName(nmLocalNode,nmLocalNode);
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getVirtualNodeName( const string& fname )
{
string::size_type pos1 = fname.rfind(sepName);
string::size_type pos2 = fname.rfind(sepNode);
if( pos2 == string::npos )
return "";
if( pos1!=string::npos )
return fname.substr( pos1+1, pos2-pos1-1 );
return "";
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getRealNodeName( const string& fname )
{
string::size_type pos = fname.rfind(sepNode);
if( pos != string::npos )
return fname.substr(pos+1);
if( !nmLocalNode.empty() )
return nmLocalNode;
nmLocalNode = getMapName(UniSetTypes::conf->getLocalNode());
return nmLocalNode;
}
// -----------------------------------------------------------------------------------------
std::string ObjectIndex::getRealNodeName( const ObjectId id )
{
string n(getMapName(id));
if( n.empty() )
return "";
return getRealNodeName(n);
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getName( const string& fname )
{
string::size_type pos = fname.rfind(sepName);
if( pos != string::npos )
return fname.substr(0,pos);
return "";
return fname;
}
// -----------------------------------------------------------------------------------------
void ObjectIndex::initLocalNode( ObjectId nodeid )
void ObjectIndex::initLocalNode( const ObjectId nodeid )
{
nmLocalNode = getMapName(nodeid);
}
......
......@@ -239,12 +239,8 @@ unsigned int ObjectIndex_XML::read_nodes( UniXML& xml, const std::string& sec, u
for( ;it.getCurrent(); it.goNext() )
{
omap[ind].id = ind;
string name(xml.getProp(it,"name"));
string alias(xml.getProp(it,"alias"));
if( alias.empty() )
alias = name;
string nodename(xml.getProp(it,"name"));
string nodename = mkFullNodeName(name,alias);
delete[] omap[ind].repName;
omap[ind].repName = new char[nodename.size()+1];
strcpy( omap[ind].repName, nodename.c_str() );
......
......@@ -195,18 +195,14 @@ void ObjectIndex_idXML::read_nodes( UniXML& xml, const std::string& sec )
}
string name(it.getProp("name"));
string alias(it.getProp("alias"));
if( alias.empty() )
alias = name;
string nodename = mkFullNodeName(name,alias);
inf.repName = new char[nodename.size()+1];
strcpy( inf.repName, nodename.c_str() );
inf.repName = new char[name.size()+1];
strcpy( inf.repName, name.c_str() );
// textname
string textname(xml.getProp(it,"textname"));
if( textname.empty() )
textname = nodename;
textname = name;
inf.textName = new char[textname.size()+1];
strcpy( inf.textName, textname.c_str() );
......@@ -214,7 +210,7 @@ void ObjectIndex_idXML::read_nodes( UniXML& xml, const std::string& sec )
inf.data = (void*)(xmlNode*)(it);
omap.insert(MapObjects::value_type(inf.id,inf)); // omap[inf.id] = inf;
mok.insert(MapObjectKey::value_type(nodename,inf.id)); // mok[name] = inf.id;
mok.insert(MapObjectKey::value_type(name,inf.id)); // mok[name] = inf.id;
}
}
// ------------------------------------------------------------------------------------------
......
......@@ -44,13 +44,13 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
{
UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) );
// Проверка зарегистрирован-ли данный датчик
// Проверка зарегистрирован-ли данный датчик
// если такого дискретного датчика нет, то здесь сработает исключение...
if( !force )
{
try
{
ic->getIOType(inf.si);
ic->getIOType(inf.si.id);
}
catch(...)
{
......@@ -66,7 +66,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
default:
ucrit << ic->getName() << "(askDumper::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА! -> "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl;
<< conf->oind->getNameById(inf.si.id) << endl;
return;
break;
......@@ -85,7 +85,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
default:
ucrit << ic->getName() << "(NCRestorer::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА!-> "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl;
<< conf->oind->getNameById(inf.si.id) << endl;
break;
}
}
......@@ -98,7 +98,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
{
try
{
ic->getIOType(inf.si);
ic->getIOType(inf.si.id);
}
catch(...)
{
......@@ -162,7 +162,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
<< " dep_name=(" << it->second.d_si.id << ")'" << conf->oind->getMapName(it->second.d_si.id) << "'"
<< endl;
IOController::ChangeSignal s = ic->signal_change_value(it->second.d_si);
IOController::ChangeSignal s = ic->signal_change_value(it->second.d_si.id);
s.connect( sigc::mem_fun( &it->second, &IOController::USensorInfo::checkDepend) );
}
}
......
......@@ -363,7 +363,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
uwarn << ic->getName()
<< "(read_thresholds): не смог получить информацию о пороге"
<< " для датчика "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl;
<< conf->oind->getNameById(inf.si.id) << endl;
continue;
}
......@@ -384,7 +384,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
uwarn << ic->getName()
<< "(read_thresholds): не смог получить список заказчиков"
<< " для порога " << ti.id
<< " датчика " << conf->oind->getNameById(inf.si.id,inf.si.node) << endl;
<< " датчика " << conf->oind->getNameById(inf.si.id) << endl;
}
}
}
......
......@@ -281,7 +281,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
{
new_argv[i] = "-ORBInitRef";
string name(oind->getRealNodeName(it->id));
string name(oind->getNodeName(it->id));
ostringstream param;
param << this << name;
name = param.str();
......@@ -513,12 +513,7 @@ void Configuration::initParameters()
// -------------------------------------------------------------------------
void Configuration::setLocalNode( const string& nodename )
{
string virtnode = oind->getVirtualNodeName(nodename);
string nn(nodename);
if( virtnode.empty() )
nn = oind->mkFullNodeName(nodename,nodename);
localNode = oind->getIdByName(nn);
localNode = oind->getIdByName(nodename);
if( localNode == DefaultObjectId )
{
......@@ -527,8 +522,8 @@ void Configuration::setLocalNode( const string& nodename )
ucrit << err.str() << endl;
throw Exception(err.str());
}
localNodeName = oind->getRealNodeName(nn);
localNodeName = nodename;
oind->initLocalNode(localNode);
}
// -------------------------------------------------------------------------
......@@ -620,9 +615,9 @@ void Configuration::createNodesList()
}
string nodename(sname);
string virtnode = oind->getVirtualNodeName(nodename);
if( virtnode.empty() )
nodename = oind->mkFullNodeName(nodename,nodename);
// string virtnode = oind->getVirtualNodeName(nodename);
// if( virtnode.empty() )
// nodename = oind->mkFullNodeName(nodename,nodename);
NodeInfo ninf;
ninf.id = oind->getIdByName(nodename);
......@@ -877,14 +872,12 @@ ObjectId Configuration::getServiceID( const std::string& name )
return oind->getIdByName(getServicesSection()+"/"+name);
}
// -------------------------------------------------------------------------
UniSetTypes::ObjectId Configuration::getNodeID( const std::string& name, const std::string& alias )
UniSetTypes::ObjectId Configuration::getNodeID( const std::string& name )
{
if( name.empty() )
return DefaultObjectId;
string a( (alias.empty() ? name : alias ) );
return oind->getIdByName( oind->mkFullNodeName(name,a) );
return oind->getNodeId( name );
}
// -------------------------------------------------------------------------
......
......@@ -94,13 +94,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
string cnodename(it.getProp("node"));
if( !cnodename.empty() )
{
string virtnode = conf->oind->getVirtualNodeName(cnodename);
if( virtnode.empty() )
cnodename = conf->oind->mkFullNodeName(cnodename,cnodename);
cnode = conf->oind->getIdByName(cnodename);
}
else
cnode = conf->getLocalNode();
......
......@@ -129,9 +129,9 @@ void SViewer::readSection( const string& section, const string& secRoot )
cout << "(readSection): catch..." << endl;
return;
}
// cout << " read objectlist ok."<< endl;
if ( !lstObj.empty() )
{
for ( li=lstObj.begin();li!=lstObj.end();++li )
......@@ -140,7 +140,7 @@ void SViewer::readSection( const string& section, const string& secRoot )
{
string ob(*li);
string fname(curSection+ "/"+ ob);
ObjectId id = conf->oind->getIdByFullName( fname );
ObjectId id = conf->oind->getIdByName( fname );
if( id == DefaultObjectId )
cout << "(readSection): ID?! для " << fname << endl;
else
......@@ -150,7 +150,7 @@ void SViewer::readSection( const string& section, const string& secRoot )
{
cout << "(readSection): " << ex << endl;
}
}
}
else
......@@ -219,8 +219,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
{
if( amap[i].type == UniversalIO::AI || amap[i].type == UniversalIO::DI )
{
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node);
string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node));
string name(conf->oind->getNameById(amap[i].si.id));
if( isShort )
name = ORepHelpers::getShortName(name);
string txtname( conf->oind->getTextName(amap[i].si.id) );
......@@ -236,8 +235,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
{
if( amap[i].type == UniversalIO::AO || amap[i].type == UniversalIO::DO )
{
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node);
string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node));
string name(conf->oind->getNameById(amap[i].si.id));
if( isShort )
name = ORepHelpers::getShortName(name);
string txtname( conf->oind->getTextName(amap[i].si.id) );
......@@ -268,16 +266,16 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
case UniversalIO::AO:
cout << "AO";
break;
default:
cout << "??";
break;
}
string sname(conf->oind->getNameById( tlst[i].si.id, tlst[i].si.node ));
string sname(conf->oind->getNameById(tlst[i].si.id));
if( isShort )
sname = ORepHelpers::getShortName(sname);
cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl;
int m = tlst[i].tlist.length();
......@@ -288,7 +286,7 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
cout << " | low: " << setw(5) << ti->lowlimit;
cout << endl;
}
}
}
}
// ---------------------------------------------------------------------------
......
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