Commit d36667c6 authored by Pavel Vainerman's avatar Pavel Vainerman

ГЛОБАЛЬНЫЙ ПЕРЕХОД НА std::shared_ptr в механизме работы

UniSetObject<-->UniSetManager<-->UniSetActivator и в других местах по максимуму.
parent 9e8d9030
...@@ -72,7 +72,7 @@ int main(int argc, char** argv) ...@@ -72,7 +72,7 @@ int main(int argc, char** argv)
NullController nc(ID,askfile,s_field,s_fvalue,c_field,c_fvalue,dbDumping); NullController nc(ID,askfile,s_field,s_fvalue,c_field,c_fvalue,dbDumping);
UniSetActivatorPtr act = UniSetActivator::Instance(); UniSetActivatorPtr act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&nc)); act->addObject( nc.get_ptr() );
act->run(false); act->run(false);
return 0; return 0;
} }
......
...@@ -35,7 +35,7 @@ int main( int argc, const char **argv ) ...@@ -35,7 +35,7 @@ int main( int argc, const char **argv )
UniSetActivatorPtr act = UniSetActivator::Instance(); UniSetActivatorPtr act = UniSetActivator::Instance();
SMonitor tp(ID); SMonitor tp(ID);
act->addObject(&tp); act->addObject(tp.get_ptr());
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -52,8 +52,8 @@ int main(int argc, char** argv) ...@@ -52,8 +52,8 @@ int main(int argc, char** argv)
} }
DBServer_MySQL dbs(ID); DBServer_MySQL dbs(ID);
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&dbs)); act->addObject(dbs.get_ptr());
act->run(false); act->run(false);
} }
catch(Exception& ex) catch(Exception& ex)
......
...@@ -53,8 +53,8 @@ int main(int argc, char** argv) ...@@ -53,8 +53,8 @@ int main(int argc, char** argv)
DBServer_SQLite dbs(ID); DBServer_SQLite dbs(ID);
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&dbs)); act->addObject(dbs.get_ptr());
act->run(false); act->run(false);
} }
catch(Exception& ex) catch(Exception& ex)
......
...@@ -23,7 +23,7 @@ std::ostream& operator<<( std::ostream& os, IOControl::IOInfo& inf ) ...@@ -23,7 +23,7 @@ std::ostream& operator<<( std::ostream& os, IOControl::IOInfo& inf )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOControl::IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID, IOControl::IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
SharedMemory* ic, int numcards, const std::string& prefix_ ): const std::shared_ptr<SharedMemory> ic, int numcards, const std::string& prefix_ ):
UniSetObject(id), UniSetObject(id),
polltime(150), polltime(150),
cards(11), cards(11),
...@@ -1112,8 +1112,8 @@ void IOControl::check_testlamp() ...@@ -1112,8 +1112,8 @@ void IOControl::check_testlamp()
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOControl* IOControl::init_iocontrol( int argc, const char* const* argv, std::shared_ptr<IOControl> IOControl::init_iocontrol( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> ic,
const std::string& prefix ) const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -1135,7 +1135,7 @@ IOControl* IOControl::init_iocontrol( int argc, const char* const* argv, ...@@ -1135,7 +1135,7 @@ IOControl* IOControl::init_iocontrol( int argc, const char* const* argv,
int numcards = conf->getArgPInt("--"+prefix+"-numcards",1); int numcards = conf->getArgPInt("--"+prefix+"-numcards",1);
dinfo << "(iocontrol): name = " << name << "(" << ID << ")" << endl; dinfo << "(iocontrol): name = " << name << "(" << ID << ")" << endl;
return new IOControl(ID,icID,ic,numcards,prefix); return make_shared<IOControl>(ID,icID,ic,numcards,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void IOControl::help_print( int argc, const char* const* argv ) void IOControl::help_print( int argc, const char* const* argv )
......
...@@ -201,12 +201,12 @@ class IOControl: ...@@ -201,12 +201,12 @@ class IOControl:
public UniSetObject public UniSetObject
{ {
public: public:
IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID, SharedMemory* ic=0, int numcards=2, const std::string& prefix="io" ); IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> shm=nullptr, int numcards=2, const std::string& prefix="io" );
virtual ~IOControl(); virtual ~IOControl();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static IOControl* init_iocontrol( int argc, const char* const* argv, static std::shared_ptr<IOControl> init_iocontrol( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic=0, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="io" ); const std::string& prefix="io" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
......
...@@ -44,15 +44,15 @@ int main(int argc, const char **argv) ...@@ -44,15 +44,15 @@ int main(int argc, const char **argv)
} }
IOControl* ic = IOControl::init_iocontrol(argc,argv,shmID); auto ic = IOControl::init_iocontrol(argc,argv,shmID);
if( !ic ) if( !ic )
{ {
dcrit << "(iocontrol): init не прошёл..." << endl; dcrit << "(iocontrol): init не прошёл..." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(ic)); act->addObject(ic);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -7,7 +7,7 @@ using namespace UniSetTypes; ...@@ -7,7 +7,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
PassiveLProcessor::PassiveLProcessor( std::string lfile, UniSetTypes::ObjectId objId, PassiveLProcessor::PassiveLProcessor( std::string lfile, UniSetTypes::ObjectId objId,
UniSetTypes::ObjectId shmID, SharedMemory* ic, const std::string& prefix ): UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic, const std::string& prefix ):
UniSetObject_LT(objId), UniSetObject_LT(objId),
shm(0) shm(0)
{ {
......
...@@ -18,7 +18,7 @@ class PassiveLProcessor: ...@@ -18,7 +18,7 @@ class PassiveLProcessor:
public: public:
PassiveLProcessor( std::string schema, UniSetTypes::ObjectId objId, PassiveLProcessor( std::string schema, UniSetTypes::ObjectId objId,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, const std::string& prefix="lproc" ); UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr, const std::string& prefix="lproc" );
virtual ~PassiveLProcessor(); virtual ~PassiveLProcessor();
enum Timers enum Timers
......
...@@ -69,8 +69,8 @@ int main(int argc, const char **argv) ...@@ -69,8 +69,8 @@ int main(int argc, const char **argv)
PassiveLProcessor plc(schema,ID,shmID); PassiveLProcessor plc(schema,ID,shmID);
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&plc)); act->addObject(plc.get_ptr());
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -12,7 +12,7 @@ using namespace UniSetTypes; ...@@ -12,7 +12,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string& prefix ): const std::shared_ptr<SharedMemory> ic, const std::string& prefix ):
UniSetObject_LT(objId), UniSetObject_LT(objId),
allInitOK(false), allInitOK(false),
shm(0), shm(0),
......
...@@ -28,7 +28,7 @@ class MBExchange: ...@@ -28,7 +28,7 @@ class MBExchange:
public UniSetObject_LT public UniSetObject_LT
{ {
public: public:
MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mb" ); const std::string& prefix="mb" );
virtual ~MBExchange(); virtual ~MBExchange();
......
...@@ -11,7 +11,7 @@ using namespace UniSetTypes; ...@@ -11,7 +11,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string& prefix ): const std::shared_ptr<SharedMemory> ic, const std::string& prefix ):
MBExchange(objId,shmId,ic,prefix), MBExchange(objId,shmId,ic,prefix),
force_disconnect(true), force_disconnect(true),
mbtcp(nullptr), mbtcp(nullptr),
...@@ -217,8 +217,8 @@ void MBTCPMaster::help_print( int argc, const char* const* argv ) ...@@ -217,8 +217,8 @@ void MBTCPMaster::help_print( int argc, const char* const* argv )
cout << "--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса" << endl; cout << "--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv, std::shared_ptr<MBTCPMaster> MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> ic,
const std::string& prefix ) const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -239,6 +239,6 @@ MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv, ...@@ -239,6 +239,6 @@ MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
} }
dinfo << "(MBTCPMaster): name = " << name << "(" << ID << ")" << endl; dinfo << "(MBTCPMaster): name = " << name << "(" << ID << ")" << endl;
return new MBTCPMaster(ID,icID,ic,prefix); return make_shared<MBTCPMaster>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -193,13 +193,13 @@ class MBTCPMaster: ...@@ -193,13 +193,13 @@ class MBTCPMaster:
public MBExchange public MBExchange
{ {
public: public:
MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mbtcp" ); const std::string& prefix="mbtcp" );
virtual ~MBTCPMaster(); virtual ~MBTCPMaster();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static MBTCPMaster* init_mbmaster( int argc, const char* const* argv, static std::shared_ptr<MBTCPMaster> init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mbtcp" ); const std::string& prefix="mbtcp" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -11,7 +11,7 @@ using namespace UniSetTypes; ...@@ -11,7 +11,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string& prefix ): const std::shared_ptr<SharedMemory> ic, const std::string& prefix ):
MBExchange(objId,shmId,ic,prefix), MBExchange(objId,shmId,ic,prefix),
force_disconnect(true), force_disconnect(true),
pollThread(0), pollThread(0),
...@@ -363,8 +363,8 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv ) ...@@ -363,8 +363,8 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
cout << " Переключение на следующий канал зависит от '--prefix-timeout'" << endl; cout << " Переключение на следующий канал зависит от '--prefix-timeout'" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* argv, std::shared_ptr<MBTCPMultiMaster> MBTCPMultiMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> ic,
const std::string& prefix ) const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -386,6 +386,6 @@ MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* ...@@ -386,6 +386,6 @@ MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const*
} }
dinfo << "(MBTCPMultiMaster): name = " << name << "(" << ID << ")" << endl; dinfo << "(MBTCPMultiMaster): name = " << name << "(" << ID << ")" << endl;
return new MBTCPMultiMaster(ID,icID,ic,prefix); return make_shared<MBTCPMultiMaster>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -214,13 +214,13 @@ class MBTCPMultiMaster: ...@@ -214,13 +214,13 @@ class MBTCPMultiMaster:
public MBExchange public MBExchange
{ {
public: public:
MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mbtcp" ); const std::string& prefix="mbtcp" );
virtual ~MBTCPMultiMaster(); virtual ~MBTCPMultiMaster();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static MBTCPMultiMaster* init_mbmaster( int argc, const char* const* argv, static std::shared_ptr<MBTCPMultiMaster> init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mbtcp" ); const std::string& prefix="mbtcp" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -8,7 +8,7 @@ using namespace std; ...@@ -8,7 +8,7 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RTUExchange::RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic, RTUExchange::RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const std::shared_ptr<SharedMemory> ic,
const std::string& prefix_ ): const std::string& prefix_ ):
MBExchange(objId,shmId,ic,prefix_), MBExchange(objId,shmId,ic,prefix_),
mbrtu(0), mbrtu(0),
...@@ -316,8 +316,8 @@ void RTUExchange::poll() ...@@ -316,8 +316,8 @@ void RTUExchange::poll()
// printMap(rmap); // printMap(rmap);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RTUExchange* RTUExchange::init_rtuexchange( int argc, const char* const* argv, UniSetTypes::ObjectId icID, std::shared_ptr<RTUExchange> RTUExchange::init_rtuexchange( int argc, const char* const* argv, UniSetTypes::ObjectId icID,
SharedMemory* ic, const std::string& prefix ) const std::shared_ptr<SharedMemory> ic, const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -338,7 +338,7 @@ RTUExchange* RTUExchange::init_rtuexchange( int argc, const char* const* argv, U ...@@ -338,7 +338,7 @@ RTUExchange* RTUExchange::init_rtuexchange( int argc, const char* const* argv, U
} }
dinfo << "(rtuexchange): name = " << name << "(" << ID << ")" << endl; dinfo << "(rtuexchange): name = " << name << "(" << ID << ")" << endl;
return new RTUExchange(ID,icID,ic,prefix); return make_shared<RTUExchange>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool RTUExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML::iterator& it ) bool RTUExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML::iterator& it )
......
...@@ -14,12 +14,12 @@ class RTUExchange: ...@@ -14,12 +14,12 @@ class RTUExchange:
{ {
public: public:
RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID,
SharedMemory* ic=0, const std::string& prefix="rs" ); const std::shared_ptr<SharedMemory> ic=nullptr, const std::string& prefix="rs" );
virtual ~RTUExchange(); virtual ~RTUExchange();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static RTUExchange* init_rtuexchange( int argc, const char* const* argv, static std::shared_ptr<RTUExchange> init_rtuexchange( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="rs" ); const std::string& prefix="rs" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -50,15 +50,15 @@ int main( int argc, const char** argv ) ...@@ -50,15 +50,15 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
MBTCPMaster* mb = MBTCPMaster::init_mbmaster(argc,argv,shmID); auto mb = MBTCPMaster::init_mbmaster(argc,argv,shmID);
if( !mb ) if( !mb )
{ {
dcrit << "(mbmaster): init MBTCPMaster failed." << endl; dcrit << "(mbmaster): init MBTCPMaster failed." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(mb)); act->addObject(mb);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -50,15 +50,15 @@ int main( int argc, const char** argv ) ...@@ -50,15 +50,15 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
MBTCPMultiMaster* mb = MBTCPMultiMaster::init_mbmaster(argc,argv,shmID); auto mb = MBTCPMultiMaster::init_mbmaster(argc,argv,shmID);
if( !mb ) if( !mb )
{ {
dcrit << "(mbmaster): init MBTCPMaster failed." << endl; dcrit << "(mbmaster): init MBTCPMaster failed." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(mb)); act->addObject(mb);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -48,15 +48,15 @@ int main( int argc, char** argv ) ...@@ -48,15 +48,15 @@ int main( int argc, char** argv )
return 1; return 1;
} }
RTUExchange* rs = RTUExchange::init_rtuexchange(argc,argv,shmID,0,"rs"); auto rs = RTUExchange::init_rtuexchange(argc,argv,shmID,0,"rs");
if( !rs ) if( !rs )
{ {
dcrit << "(rtuexchange): init не прошёл..." << endl; dcrit << "(rtuexchange): init не прошёл..." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(rs)); act->addObject(rs);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -11,7 +11,7 @@ using namespace UniSetTypes; ...@@ -11,7 +11,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
using namespace ModbusRTU; using namespace ModbusRTU;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic, const string& prefix ): MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const std::shared_ptr<SharedMemory> ic, const string& prefix ):
UniSetObject_LT(objId), UniSetObject_LT(objId),
mbslot(0), mbslot(0),
shm(0), shm(0),
...@@ -934,8 +934,8 @@ void MBSlave::help_print( int argc, const char* const* argv ) ...@@ -934,8 +934,8 @@ void MBSlave::help_print( int argc, const char* const* argv )
cout << "--prefix-inet-port num - this modbus server port. Default: 502" << endl; cout << "--prefix-inet-port num - this modbus server port. Default: 502" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBSlave* MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::ObjectId icID, SharedMemory* ic, std::shared_ptr<MBSlave> MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::ObjectId icID,
const string& prefix ) const std::shared_ptr<SharedMemory> ic, const string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
string name = conf->getArgParam("--" + prefix + "-name","MBSlave1"); string name = conf->getArgParam("--" + prefix + "-name","MBSlave1");
...@@ -955,7 +955,7 @@ MBSlave* MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes:: ...@@ -955,7 +955,7 @@ MBSlave* MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::
} }
dinfo << "(mbslave): name = " << name << "(" << ID << ")" << endl; dinfo << "(mbslave): name = " << name << "(" << ID << ")" << endl;
return new MBSlave(ID,icID,ic,prefix); return make_shared<MBSlave>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p ) std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p )
......
...@@ -257,12 +257,12 @@ class MBSlave: ...@@ -257,12 +257,12 @@ class MBSlave:
public UniSetObject_LT public UniSetObject_LT
{ {
public: public:
MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, const std::string& prefix="mbs" ); MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr, const std::string& prefix="mbs" );
virtual ~MBSlave(); virtual ~MBSlave();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static MBSlave* init_mbslave( int argc, const char* const* argv, static std::shared_ptr<MBSlave> init_mbslave(int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mbs" ); const std::string& prefix="mbs" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -11,7 +11,7 @@ using namespace UniSetTypes; ...@@ -11,7 +11,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
using namespace ModbusRTU; using namespace ModbusRTU;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic, const string& prefix ): MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const std::shared_ptr<SharedMemory> ic, const string& prefix ):
MBSlave(objId,shmId,ic,prefix), MBSlave(objId,shmId,ic,prefix),
sesscount_id(DefaultObjectId) sesscount_id(DefaultObjectId)
{ {
...@@ -110,8 +110,8 @@ void MBTCPMultiSlave::help_print( int argc, const char* const* argv ) ...@@ -110,8 +110,8 @@ void MBTCPMultiSlave::help_print( int argc, const char* const* argv )
cout << "--prefix-session-count-id id - Датчик для отслеживания текущего количества соединений." << endl; cout << "--prefix-session-count-id id - Датчик для отслеживания текущего количества соединений." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMultiSlave* MBTCPMultiSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::ObjectId icID, SharedMemory* ic, std::shared_ptr<MBTCPMultiSlave> MBTCPMultiSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::ObjectId icID,
const string& prefix ) const std::shared_ptr<SharedMemory> ic, const string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
string name = conf->getArgParam("--" + prefix + "-name","MBSlave1"); string name = conf->getArgParam("--" + prefix + "-name","MBSlave1");
...@@ -131,7 +131,7 @@ MBTCPMultiSlave* MBTCPMultiSlave::init_mbslave( int argc, const char* const* arg ...@@ -131,7 +131,7 @@ MBTCPMultiSlave* MBTCPMultiSlave::init_mbslave( int argc, const char* const* arg
} }
dinfo << "(mbslave): name = " << name << "(" << ID << ")" << endl; dinfo << "(mbslave): name = " << name << "(" << ID << ")" << endl;
return new MBTCPMultiSlave(ID,icID,ic,prefix); return make_shared<MBTCPMultiSlave>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBTCPMultiSlave::execute_tcp() void MBTCPMultiSlave::execute_tcp()
......
...@@ -21,12 +21,12 @@ class MBTCPMultiSlave: ...@@ -21,12 +21,12 @@ class MBTCPMultiSlave:
public MBSlave public MBSlave
{ {
public: public:
MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, const std::string& prefix="mbs" ); MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr, const std::string& prefix="mbs" );
virtual ~MBTCPMultiSlave(); virtual ~MBTCPMultiSlave();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static MBTCPMultiSlave* init_mbslave( int argc, const char* const* argv, static std::shared_ptr<MBTCPMultiSlave> init_mbslave( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="mbs" ); const std::string& prefix="mbs" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -55,15 +55,15 @@ int main(int argc, const char **argv) ...@@ -55,15 +55,15 @@ int main(int argc, const char **argv)
return 1; return 1;
} }
MBSlave* s = MBSlave::init_mbslave(argc,argv,shmID); auto s = MBSlave::init_mbslave(argc,argv,shmID);
if( !s ) if( !s )
{ {
dcrit << "(mbslave): init не прошёл..." << endl; dcrit << "(mbslave): init не прошёл..." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(s)); act->addObject(s);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -55,15 +55,15 @@ int main(int argc, const char **argv) ...@@ -55,15 +55,15 @@ int main(int argc, const char **argv)
return 1; return 1;
} }
MBTCPMultiSlave* s = MBTCPMultiSlave::init_mbslave(argc,argv,shmID); auto s = MBTCPMultiSlave::init_mbslave(argc,argv,shmID);
if( !s ) if( !s )
{ {
dcrit << "(mbslave): init не прошёл..." << endl; dcrit << "(mbslave): init не прошёл..." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(s)); act->addObject(s);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -36,18 +36,18 @@ int main(int argc, char* argv[] ) ...@@ -36,18 +36,18 @@ int main(int argc, char* argv[] )
bool apart = findArgParam("--apart",argc,argv) != -1; bool apart = findArgParam("--apart",argc,argv) != -1;
SharedMemory* shm = SharedMemory::init_smemory(argc, argv); auto shm = SharedMemory::init_smemory(argc, argv);
if( !shm ) if( !shm )
return 1; return 1;
MBSlave* mbs = MBSlave::init_mbslave(argc,argv,shm->getId(), (apart ? nullptr : shm )); auto mbs = MBSlave::init_mbslave(argc,argv,shm->getId(), (apart ? nullptr : shm ));
if( !mbs ) if( !mbs )
return 1; return 1;
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(shm)); act->addObject(shm);
act->addObject(static_cast<class UniSetObject*>(mbs)); act->addObject(mbs);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -11,12 +11,12 @@ using namespace std; ...@@ -11,12 +11,12 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RRDServer::RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmId, SharedMemory* ic, RRDServer::RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmId, const std::shared_ptr<SharedMemory> ic,
const string& prefix, DebugStream& log ): const string& prefix, DebugStream& log ):
UObject_SK(objId,cnode), UObject_SK(objId,cnode),
shm( new SMInterface(shmId,&ui,objId,ic) ),
prefix(prefix) prefix(prefix)
{ {
shm = make_shared<SMInterface>(shmId,&ui,objId,ic);
mylog = log; mylog = log;
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
...@@ -222,8 +222,8 @@ void RRDServer::help_print( int argc, const char* const* argv ) ...@@ -222,8 +222,8 @@ void RRDServer::help_print( int argc, const char* const* argv )
cout << "--prefix-heartbeat-max val - max value for heartbeat sensor." << endl; cout << "--prefix-heartbeat-max val - max value for heartbeat sensor." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv, std::shared_ptr<RRDServer> RRDServer::init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> ic,
const std::string& prefix ) const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -252,7 +252,7 @@ RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv, ...@@ -252,7 +252,7 @@ RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv,
} }
dinfo << "(RRDServer): name = " << name << "(" << ID << ")" << endl; dinfo << "(RRDServer): name = " << name << "(" << ID << ")" << endl;
return new RRDServer(ID,cnode,icID,ic,prefix); return make_shared<RRDServer>(ID,cnode,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RRDServer::askSensors( UniversalIO::UIOCommand cmd ) void RRDServer::askSensors( UniversalIO::UIOCommand cmd )
......
...@@ -58,13 +58,13 @@ class RRDServer: ...@@ -58,13 +58,13 @@ class RRDServer:
public UObject_SK public UObject_SK
{ {
public: public:
RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="rrd", DebugStream& log=UniSetExtensions::dlog ); const std::string& prefix="rrd", DebugStream& log=UniSetExtensions::dlog );
virtual ~RRDServer(); virtual ~RRDServer();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static RRDServer* init_rrdstorage( int argc, const char* const* argv, static std::shared_ptr<RRDServer> init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="rrd" ); const std::string& prefix="rrd" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
...@@ -81,7 +81,7 @@ class RRDServer: ...@@ -81,7 +81,7 @@ class RRDServer:
void initRRD( xmlNode* cnode, int tmID ); void initRRD( xmlNode* cnode, int tmID );
virtual void step() override; virtual void step() override;
SMInterface* shm; std::shared_ptr<SMInterface> shm;
struct DSInfo struct DSInfo
{ {
......
...@@ -50,15 +50,15 @@ int main( int argc, const char** argv ) ...@@ -50,15 +50,15 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
RRDServer* db = RRDServer::init_rrdstorage(argc,argv,shmID); auto db = RRDServer::init_rrdstorage(argc,argv,shmID);
if( !db ) if( !db )
{ {
dcrit << "(rrdstorage): init не прошёл..." << endl; dcrit << "(rrdstorage): init не прошёл..." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(db)); act->addObject(db);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -410,7 +410,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato ...@@ -410,7 +410,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
return true; return true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
SharedMemory* SharedMemory::init_smemory( int argc, const char* const* argv ) shared_ptr<SharedMemory> SharedMemory::init_smemory( int argc, const char* const* argv )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
string dfile = conf->getArgParam("--datfile", conf->getConfFileName()); string dfile = conf->getArgParam("--datfile", conf->getConfFileName());
...@@ -429,8 +429,7 @@ SharedMemory* SharedMemory::init_smemory( int argc, const char* const* argv ) ...@@ -429,8 +429,7 @@ SharedMemory* SharedMemory::init_smemory( int argc, const char* const* argv )
} }
string cname = conf->getArgParam("--smemory--confnode", ORepHelpers::getShortName(conf->oind->getMapName(ID)) ); string cname = conf->getArgParam("--smemory--confnode", ORepHelpers::getShortName(conf->oind->getMapName(ID)) );
return make_shared<SharedMemory>(ID,dfile,cname);
return new SharedMemory(ID,dfile,cname);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void SharedMemory::buildEventList( xmlNode* cnode ) void SharedMemory::buildEventList( xmlNode* cnode )
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#define SharedMemory_H_ #define SharedMemory_H_
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <string> #include <string>
#include <memory>
#include <deque> #include <deque>
#include "IONotifyController_LT.h" #include "IONotifyController_LT.h"
#include "Mutex.h" #include "Mutex.h"
...@@ -260,7 +261,7 @@ class SharedMemory: ...@@ -260,7 +261,7 @@ class SharedMemory:
virtual ~SharedMemory(); virtual ~SharedMemory();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static SharedMemory* init_smemory( int argc, const char* const* argv ); static std::shared_ptr<SharedMemory> init_smemory( int argc, const char* const* argv );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
......
...@@ -27,13 +27,13 @@ int main(int argc, const char **argv) ...@@ -27,13 +27,13 @@ int main(int argc, const char **argv)
ulog.logFile( logname ); ulog.logFile( logname );
dlog.logFile( logname ); dlog.logFile( logname );
SharedMemory* shm = SharedMemory::init_smemory(argc, argv); auto shm = SharedMemory::init_smemory(argc, argv);
if( !shm ) if( !shm )
return 1; return 1;
UniSetActivatorPtr act = UniSetActivator::Instance(); UniSetActivatorPtr act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(shm)); act->addObject( shm ); // ->get_ptr() );
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
act->run(false); act->run(false);
......
...@@ -75,14 +75,14 @@ int main( int argc, const char **argv ) ...@@ -75,14 +75,14 @@ int main( int argc, const char **argv )
ulog.logFile( logname ); ulog.logFile( logname );
conf->initDebug(UniSetExtensions::dlog,"dlog"); conf->initDebug(UniSetExtensions::dlog,"dlog");
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->signal_terminate_event().connect( &activator_terminate ); act->signal_terminate_event().connect( &activator_terminate );
// ------------ SharedMemory ---------------- // ------------ SharedMemory ----------------
SharedMemory* shm = SharedMemory::init_smemory(argc,argv); auto shm = SharedMemory::init_smemory(argc,argv);
if( shm == NULL ) if( !shm )
return 1; return 1;
act->addManager(static_cast<class UniSetManager*>(shm)); act->addManager(shm);
#ifdef UNISET_ENABLE_IO #ifdef UNISET_ENABLE_IO
// ------------ IOControl ---------------- // ------------ IOControl ----------------
...@@ -104,15 +104,15 @@ int main( int argc, const char **argv ) ...@@ -104,15 +104,15 @@ int main( int argc, const char **argv )
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(smemory-plus): add IOControl(" << p.str() << ")" << endl; dlog.info() << "(smemory-plus): add IOControl(" << p.str() << ")" << endl;
IOControl* ic = IOControl::init_iocontrol(argc,argv,shm->getId(),shm,p.str()); auto ic = IOControl::init_iocontrol(argc,argv,shm->getId(),shm,p.str());
if( ic == NULL ) if( !ic )
return 1; return 1;
ThreadCreator<IOControl>* io_thr = new ThreadCreator<IOControl>(ic, &IOControl::execute); ThreadCreator<IOControl>* io_thr = new ThreadCreator<IOControl>(ic.get(), &IOControl::execute);
if( io_thr == NULL ) if( io_thr == NULL )
return 1; return 1;
act->addObject(static_cast<class UniSetObject*>(ic)); act->addObject(ic);
lst_iothr.push_back( io_thr ); lst_iothr.push_back( io_thr );
} }
} }
...@@ -134,11 +134,11 @@ int main( int argc, const char **argv ) ...@@ -134,11 +134,11 @@ int main( int argc, const char **argv )
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(smemory-plus): add RTUExchange(" << p.str() << ")" << endl; dlog.info() << "(smemory-plus): add RTUExchange(" << p.str() << ")" << endl;
RTUExchange* rtu = RTUExchange::init_rtuexchange(argc,argv,shm->getId(),shm,p.str()); auto rtu = RTUExchange::init_rtuexchange(argc,argv,shm->getId(),shm,p.str());
if( rtu == NULL ) if( !rtu )
return 1; return 1;
act->addObject(static_cast<class UniSetObject*>(rtu)); act->addObject(rtu);
} }
} }
// ------------- MBSlave -------------- // ------------- MBSlave --------------
...@@ -158,11 +158,11 @@ int main( int argc, const char **argv ) ...@@ -158,11 +158,11 @@ int main( int argc, const char **argv )
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(smemory-plus): add MBSlave(" << p.str() << ")" << endl; dlog.info() << "(smemory-plus): add MBSlave(" << p.str() << ")" << endl;
MBSlave* mbs = MBSlave::init_mbslave(argc,argv,shm->getId(),shm,p.str()); auto mbs = MBSlave::init_mbslave(argc,argv,shm->getId(),shm,p.str());
if( mbs == NULL ) if( !mbs )
return 1; return 1;
act->addObject(static_cast<class UniSetObject*>(mbs)); act->addObject(mbs);
} }
} }
...@@ -184,25 +184,25 @@ int main( int argc, const char **argv ) ...@@ -184,25 +184,25 @@ int main( int argc, const char **argv )
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(smemory-plus): add MBTCPMaster(" << p.str() << ")" << endl; dlog.info() << "(smemory-plus): add MBTCPMaster(" << p.str() << ")" << endl;
MBTCPMaster* mbm1 = MBTCPMaster::init_mbmaster(argc,argv,shm->getId(),shm,p.str()); auto mbm1 = MBTCPMaster::init_mbmaster(argc,argv,shm->getId(),shm,p.str());
if( mbm1 == NULL ) if( !mbm1 )
return 1; return 1;
act->addObject(static_cast<class UniSetObject*>(mbm1)); act->addObject(mbm1);
} }
} }
// ------------- UNetUDP -------------- // ------------- UNetUDP --------------
bool add_unet = findArgParam("--add-unet",argc,argv) != -1; bool add_unet = findArgParam("--add-unet",argc,argv) != -1;
if( add_unet ) if( add_unet )
{ {
UNetExchange* unet = UNetExchange::init_unetexchange(argc,argv,shm->getId(),shm); auto unet = UNetExchange::init_unetexchange(argc,argv,shm->getId(),shm);
if( unet == NULL ) if( unet == NULL )
return 1; return 1;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(smemory-plus): add UNetExchnage.." << endl; dlog.info() << "(smemory-plus): add UNetExchnage.." << endl;
act->addObject(static_cast<class UniSetObject*>(unet)); act->addObject(unet);
} }
// --------------------------------------- // ---------------------------------------
// попытка решить вопрос с "зомби" процессами // попытка решить вопрос с "зомби" процессами
......
...@@ -7,7 +7,7 @@ using namespace std; ...@@ -7,7 +7,7 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UNetExchange::UNetExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic, const std::string& prefix ): UNetExchange::UNetExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const std::shared_ptr<SharedMemory> ic, const std::string& prefix ):
UniSetObject_LT(objId), UniSetObject_LT(objId),
shm(0), shm(0),
initPause(0), initPause(0),
...@@ -25,7 +25,7 @@ sender2(0) ...@@ -25,7 +25,7 @@ sender2(0)
if( cnode == NULL ) if( cnode == NULL )
throw UniSetTypes::SystemError("(UNetExchange): Not found conf-node for " + myname ); throw UniSetTypes::SystemError("(UNetExchange): Not found conf-node for " + myname );
shm = new SMInterface(shmId,&ui,objId,ic); shm = make_shared<SMInterface>(shmId,&ui,objId,ic);
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
...@@ -122,7 +122,7 @@ sender2(0) ...@@ -122,7 +122,7 @@ sender2(0)
} }
dinfo << myname << "(init): init sender.. my node " << n_it.getProp("name") << endl; dinfo << myname << "(init): init sender.. my node " << n_it.getProp("name") << endl;
sender = new UNetSender(h,p,shm,s_field,s_fvalue,ic); sender = new UNetSender(h,p,shm,s_field,s_fvalue);
sender->setSendPause(sendpause); sender->setSendPause(sendpause);
try try
...@@ -131,7 +131,7 @@ sender2(0) ...@@ -131,7 +131,7 @@ sender2(0)
if( !h2.empty() ) if( !h2.empty() )
{ {
dinfo << myname << "(init): init sender2.. my node " << n_it.getProp("name") << endl; dinfo << myname << "(init): init sender2.. my node " << n_it.getProp("name") << endl;
sender2 = new UNetSender(h2,p2,shm,s_field,s_fvalue,ic); sender2 = new UNetSender(h2,p2,shm,s_field,s_fvalue);
sender2->setSendPause(sendpause); sender2->setSendPause(sendpause);
} }
} }
...@@ -349,7 +349,6 @@ UNetExchange::~UNetExchange() ...@@ -349,7 +349,6 @@ UNetExchange::~UNetExchange()
delete sender; delete sender;
delete sender2; delete sender2;
delete shm;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool UNetExchange::checkExistUNetHost( const std::string& addr, ost::tpport_t port ) bool UNetExchange::checkExistUNetHost( const std::string& addr, ost::tpport_t port )
...@@ -425,7 +424,7 @@ void UNetExchange::step() ...@@ -425,7 +424,7 @@ void UNetExchange::step()
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UNetExchange::ReceiverInfo::step( SMInterface* shm, const std::string& myname ) void UNetExchange::ReceiverInfo::step( const std::shared_ptr<SMInterface> shm, const std::string& myname )
{ {
try try
{ {
...@@ -656,8 +655,8 @@ void UNetExchange::help_print( int argc, const char* argv[] ) ...@@ -656,8 +655,8 @@ void UNetExchange::help_print( int argc, const char* argv[] )
cout << "--prefix-filter-value name - Значение фильтрующего поля при формировании списка датчиков посылаемых данным узлом" << endl; cout << "--prefix-filter-value name - Значение фильтрующего поля при формировании списка датчиков посылаемых данным узлом" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UNetExchange* UNetExchange::init_unetexchange( int argc, const char* const argv[], UniSetTypes::ObjectId icID, std::shared_ptr<UNetExchange> UNetExchange::init_unetexchange( int argc, const char* const argv[], UniSetTypes::ObjectId icID,
SharedMemory* ic, const std::string& prefix ) const std::shared_ptr<SharedMemory> ic, const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -678,7 +677,7 @@ UNetExchange* UNetExchange::init_unetexchange( int argc, const char* const argv[ ...@@ -678,7 +677,7 @@ UNetExchange* UNetExchange::init_unetexchange( int argc, const char* const argv[
} }
dinfo << "(unetexchange): name = " << name << "(" << ID << ")" << endl; dinfo << "(unetexchange): name = " << name << "(" << ID << ")" << endl;
return new UNetExchange(ID,icID,ic,prefix); return make_shared<UNetExchange>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UNetExchange::receiverEvent( UNetReceiver* r, UNetReceiver::Event ev ) void UNetExchange::receiverEvent( UNetReceiver* r, UNetReceiver::Event ev )
......
...@@ -80,12 +80,12 @@ class UNetExchange: ...@@ -80,12 +80,12 @@ class UNetExchange:
public UniSetObject_LT public UniSetObject_LT
{ {
public: public:
UNetExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, const std::string& prefix="unet" ); UNetExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr, const std::string& prefix="unet" );
virtual ~UNetExchange(); virtual ~UNetExchange();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static UNetExchange* init_unetexchange( int argc, const char* const argv[], static std::shared_ptr<UNetExchange> init_unetexchange( int argc, const char* const argv[],
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, const std::string& prefix="unet" ); UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=0, const std::string& prefix="unet" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* argv[] ); static void help_print( int argc, const char* argv[] );
...@@ -98,7 +98,7 @@ class UNetExchange: ...@@ -98,7 +98,7 @@ class UNetExchange:
std::string s_field; std::string s_field;
std::string s_fvalue; std::string s_fvalue;
SMInterface* shm; std::shared_ptr<SMInterface> shm;
void step(); void step();
void sysCommand( const UniSetTypes::SystemMessage *msg ) override; void sysCommand( const UniSetTypes::SystemMessage *msg ) override;
...@@ -155,7 +155,7 @@ class UNetExchange: ...@@ -155,7 +155,7 @@ class UNetExchange:
UNetReceiver* r1; /*!< приём по первому каналу */ UNetReceiver* r1; /*!< приём по первому каналу */
UNetReceiver* r2; /*!< приём по второму каналу */ UNetReceiver* r2; /*!< приём по второму каналу */
void step( SMInterface* shm, const std::string& myname ); void step( const std::shared_ptr<SMInterface> shm, const std::string& myname );
inline void setRespondID( UniSetTypes::ObjectId id, bool invert=false ) inline void setRespondID( UniSetTypes::ObjectId id, bool invert=false )
{ {
...@@ -163,7 +163,7 @@ class UNetExchange: ...@@ -163,7 +163,7 @@ class UNetExchange:
respondInvert = invert; respondInvert = invert;
} }
inline void setLostPacketsID( UniSetTypes::ObjectId id ){ sidLostPackets = id; } inline void setLostPacketsID( UniSetTypes::ObjectId id ){ sidLostPackets = id; }
inline void initIterators( SMInterface* shm ) inline void initIterators( const std::shared_ptr<SMInterface> shm )
{ {
shm->initIterator(itLostPackets); shm->initIterator(itLostPackets);
shm->initIterator(itRespond); shm->initIterator(itRespond);
......
...@@ -19,7 +19,7 @@ bool UNetReceiver::PacketCompare::operator()(const UniSetUDP::UDPMessage& lhs, ...@@ -19,7 +19,7 @@ bool UNetReceiver::PacketCompare::operator()(const UniSetUDP::UDPMessage& lhs,
} }
*/ */
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
UNetReceiver::UNetReceiver( const std::string& s_host, const ost::tpport_t port, SMInterface* smi ): UNetReceiver::UNetReceiver( const std::string& s_host, const ost::tpport_t port, const std::shared_ptr<SMInterface> smi ):
shm(smi), shm(smi),
recvpause(10), recvpause(10),
updatepause(100), updatepause(100),
...@@ -388,11 +388,12 @@ void UNetReceiver::receive() ...@@ -388,11 +388,12 @@ void UNetReceiver::receive()
{ {
dwarn << myname << "(receive): " << e.what()<< std::endl; dwarn << myname << "(receive): " << e.what()<< std::endl;
} }
/*
catch(...) catch(...)
{ {
dwarn << myname << "(receive): catch ..." << std::endl; dwarn << myname << "(receive): catch ..." << std::endl;
} }
*/
// делаем через промежуточную переменную // делаем через промежуточную переменную
// чтобы поскорее освободить mutex // чтобы поскорее освободить mutex
{ {
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
class UNetReceiver class UNetReceiver
{ {
public: public:
UNetReceiver( const std::string& host, const ost::tpport_t port, SMInterface* smi ); UNetReceiver( const std::string& host, const ost::tpport_t port, const std::shared_ptr<SMInterface> smi );
~UNetReceiver(); ~UNetReceiver();
void start(); void start();
...@@ -100,7 +100,7 @@ class UNetReceiver ...@@ -100,7 +100,7 @@ class UNetReceiver
protected: protected:
SMInterface* shm; const std::shared_ptr<SMInterface> shm;
bool recv(); bool recv();
void step(); void step();
......
...@@ -8,8 +8,8 @@ using namespace std; ...@@ -8,8 +8,8 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UNetSender::UNetSender( const std::string& s_host, const ost::tpport_t port, SMInterface* smi, UNetSender::UNetSender( const std::string& s_host, const ost::tpport_t port, const std::shared_ptr<SMInterface> smi,
const std::string& s_f, const std::string& s_val, SharedMemory* ic ): const std::string& s_f, const std::string& s_val ):
s_field(s_f), s_field(s_f),
s_fvalue(s_val), s_fvalue(s_val),
shm(smi), shm(smi),
...@@ -68,7 +68,18 @@ s_thr(0) ...@@ -68,7 +68,18 @@ s_thr(0)
dinfo << myname << "(init): dlist size = " << dlist.size() << endl; dinfo << myname << "(init): dlist size = " << dlist.size() << endl;
} }
else else
{
auto ic = std::dynamic_pointer_cast<SharedMemory>(shm->SM());
if( ic )
ic->addReadItem( sigc::mem_fun(this,&UNetSender::readItem) ); ic->addReadItem( sigc::mem_fun(this,&UNetSender::readItem) );
else
{
dwarn << myname << "(init): Failed to convert the pointer 'IONotifyController' -> 'SharedMemory'" << endl;
readConfiguration();
dlist.resize(maxItem);
dinfo << myname << "(init): dlist size = " << dlist.size() << endl;
}
}
// выставляем поля, которые не меняются // выставляем поля, которые не меняются
...@@ -80,7 +91,6 @@ UNetSender::~UNetSender() ...@@ -80,7 +91,6 @@ UNetSender::~UNetSender()
{ {
delete s_thr; delete s_thr;
delete udp; delete udp;
delete shm;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UNetSender::updateFromSM() void UNetSender::updateFromSM()
......
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
class UNetSender class UNetSender
{ {
public: public:
UNetSender( const std::string& host, const ost::tpport_t port, SMInterface* smi, UNetSender( const std::string& host, const ost::tpport_t port, const std::shared_ptr<SMInterface> smi,
const std::string& s_field="", const std::string& s_fvalue="", SharedMemory* ic=0 ); const std::string& s_field="", const std::string& s_fvalue="" );
~UNetSender(); ~UNetSender();
...@@ -71,7 +71,7 @@ class UNetSender ...@@ -71,7 +71,7 @@ class UNetSender
std::string s_field; std::string s_field;
std::string s_fvalue; std::string s_fvalue;
SMInterface* shm; const std::shared_ptr<SMInterface> shm;
bool initItem( UniXML::iterator& it ); bool initItem( UniXML::iterator& it );
bool readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterator& it, xmlNode* sec ); bool readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterator& it, xmlNode* sec );
......
...@@ -36,18 +36,18 @@ int main(int argc, char* argv[] ) ...@@ -36,18 +36,18 @@ int main(int argc, char* argv[] )
bool apart = findArgParam("--apart",argc,argv) != -1; bool apart = findArgParam("--apart",argc,argv) != -1;
SharedMemory* shm = SharedMemory::init_smemory(argc, argv); auto shm = SharedMemory::init_smemory(argc, argv);
if( !shm ) if( !shm )
return 1; return 1;
UNetExchange* unet = UNetExchange::init_unetexchange(argc,argv,shm->getId(), (apart ? nullptr : shm )); auto unet = UNetExchange::init_unetexchange(argc,argv,shm->getId(), (apart ? nullptr : shm ));
if( !unet ) if( !unet )
return 1; return 1;
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(shm)); act->addObject(shm);
act->addObject(static_cast<class UniSetObject*>(unet)); act->addObject(unet);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -48,15 +48,15 @@ int main( int argc, const char** argv ) ...@@ -48,15 +48,15 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
UNetExchange* unet = UNetExchange::init_unetexchange(argc,argv,shmID); auto unet = UNetExchange::init_unetexchange(argc,argv,shmID);
if( !unet ) if( !unet )
{ {
dcrit << "(unetexchange): init failed.." << endl; dcrit << "(unetexchange): init failed.." << endl;
return 1; return 1;
} }
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(unet)); act->addObject(unet);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
......
...@@ -18,7 +18,7 @@ UniExchange::NetNodeInfo::NetNodeInfo(): ...@@ -18,7 +18,7 @@ UniExchange::NetNodeInfo::NetNodeInfo():
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
UniExchange::UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID, UniExchange::UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic, const std::string& prefix ): const std::shared_ptr<SharedMemory> ic, const std::string& prefix ):
IOController(id), IOController(id),
shm(0), shm(0),
polltime(200), polltime(200),
...@@ -327,8 +327,8 @@ void UniExchange::sigterm( int signo ) ...@@ -327,8 +327,8 @@ void UniExchange::sigterm( int signo )
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UniExchange* UniExchange::init_exchange( int argc, const char* const* argv, std::shared_ptr<UniExchange> UniExchange::init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, const std::shared_ptr<SharedMemory> ic,
const std::string& prefix ) const std::string& prefix )
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
...@@ -343,7 +343,7 @@ UniExchange* UniExchange::init_exchange( int argc, const char* const* argv, ...@@ -343,7 +343,7 @@ UniExchange* UniExchange::init_exchange( int argc, const char* const* argv,
<< " in section " << conf->getControllersSection() << endl; << " in section " << conf->getControllersSection() << endl;
return 0; return 0;
} }
return new UniExchange(ID,icID,ic,prefix); return make_shared<UniExchange>(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UniExchange::readConfiguration() void UniExchange::readConfiguration()
......
...@@ -37,13 +37,13 @@ class UniExchange: ...@@ -37,13 +37,13 @@ class UniExchange:
{ {
public: public:
UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID, UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic=0, const std::string& prefix="unet" ); const std::shared_ptr<SharedMemory> ic=nullptr, const std::string& prefix="unet" );
virtual ~UniExchange(); virtual ~UniExchange();
void execute(); void execute();
static UniExchange* init_exchange( int argc, const char* const* argv, static std::shared_ptr<UniExchange> init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory> ic=nullptr,
const std::string& prefix="unet" ); const std::string& prefix="unet" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -40,17 +40,17 @@ int main(int argc, const char **argv) ...@@ -40,17 +40,17 @@ int main(int argc, const char **argv)
return 1; return 1;
} }
UniExchange* shm = UniExchange::init_exchange(argc, argv, shmID); auto uex = UniExchange::init_exchange(argc, argv, shmID);
if( !shm ) if( !uex )
return 1; return 1;
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(shm)); act->addObject(uex);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
act->run(true); act->run(true);
shm->execute(); uex->execute();
on_sigchild(SIGTERM); on_sigchild(SIGTERM);
return 0; return 0;
} }
......
...@@ -11,7 +11,7 @@ class SMInterface ...@@ -11,7 +11,7 @@ class SMInterface
public: public:
SMInterface( UniSetTypes::ObjectId _shmID, UInterface* ui, SMInterface( UniSetTypes::ObjectId _shmID, UInterface* ui,
UniSetTypes::ObjectId myid, IONotifyController* ic=0 ); UniSetTypes::ObjectId myid, const std::shared_ptr<IONotifyController> ic=nullptr );
~SMInterface(); ~SMInterface();
void setValue ( UniSetTypes::ObjectId, long value ); void setValue ( UniSetTypes::ObjectId, long value );
...@@ -49,11 +49,11 @@ class SMInterface ...@@ -49,11 +49,11 @@ class SMInterface
inline bool isLocalwork(){ return (ic==NULL); } inline bool isLocalwork(){ return (ic==NULL); }
inline UniSetTypes::ObjectId ID(){ return myid; } inline UniSetTypes::ObjectId ID(){ return myid; }
inline IONotifyController* SM(){ return ic; } inline const std::shared_ptr<IONotifyController> SM(){ return ic; }
inline UniSetTypes::ObjectId getSMID(){ return shmID; } inline UniSetTypes::ObjectId getSMID(){ return shmID; }
protected: protected:
IONotifyController* ic; const std::shared_ptr<IONotifyController> ic;
UInterface* ui; UInterface* ui;
CORBA::Object_var oref; CORBA::Object_var oref;
UniSetTypes::ObjectId shmID; UniSetTypes::ObjectId shmID;
......
...@@ -85,7 +85,7 @@ using namespace UniSetTypes; ...@@ -85,7 +85,7 @@ using namespace UniSetTypes;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
SMInterface::SMInterface( UniSetTypes::ObjectId _shmID, UInterface* _ui, SMInterface::SMInterface( UniSetTypes::ObjectId _shmID, UInterface* _ui,
UniSetTypes::ObjectId _myid, IONotifyController* ic ): UniSetTypes::ObjectId _myid, const std::shared_ptr<IONotifyController> ic ):
ic(ic), ic(ic),
ui(_ui), ui(_ui),
oref( CORBA::Object::_nil() ), oref( CORBA::Object::_nil() ),
......
...@@ -10,11 +10,13 @@ using namespace std; ...@@ -10,11 +10,13 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
static SMInterface* shm = nullptr; static std::shared_ptr<SMInterface> shared_shm;
static SMInterface* shm;
static void init_test() static void init_test()
{ {
shm = smiInstance(); shared_shm = smiInstance();
CHECK( shm != nullptr ); CHECK( shared_shm != nullptr );
shm = shared_shm.get();
} }
static bool init_iobase( IOBase* ib, const std::string& sensor ) static bool init_iobase( IOBase* ib, const std::string& sensor )
......
#define CATCH_CONFIG_RUNNER #define CATCH_CONFIG_RUNNER
#include <catch.hpp> #include <catch.hpp>
#include <memory>
#include <string> #include <string>
#include "Debug.h" #include "Debug.h"
#include "UniSetActivator.h" #include "UniSetActivator.h"
...@@ -13,20 +14,20 @@ using namespace std; ...@@ -13,20 +14,20 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static SMInterface* smi = nullptr; static shared_ptr<SMInterface> smi;
static SharedMemory* shm = nullptr; static shared_ptr<SharedMemory> shm;
static UInterface* ui = nullptr; static UInterface* ui = nullptr;
static ObjectId myID = 6000; static ObjectId myID = 6000;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
SharedMemory* shmInstance() shared_ptr<SharedMemory> shmInstance()
{ {
if( shm == nullptr ) if( !shm )
throw SystemError("SharedMemory don`t initialize.."); throw SystemError("SharedMemory don`t initialize..");
return shm; return shm;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
SMInterface* smiInstance() shared_ptr<SMInterface> smiInstance()
{ {
if( smi == nullptr ) if( smi == nullptr )
{ {
...@@ -36,7 +37,7 @@ SMInterface* smiInstance() ...@@ -36,7 +37,7 @@ SMInterface* smiInstance()
if( ui == nullptr ) if( ui == nullptr )
ui = new UInterface(); ui = new UInterface();
smi = new SMInterface(shm->getId(), ui, myID, shm ); smi = make_shared<SMInterface>(shm->getId(), ui, myID, shm );
} }
return smi; return smi;
...@@ -60,7 +61,7 @@ int main(int argc, char* argv[] ) ...@@ -60,7 +61,7 @@ int main(int argc, char* argv[] )
try try
{ {
uniset_init(argc,argv); auto conf = uniset_init(argc,argv);
/* /*
conf->initDebug(dlog,"dlog"); conf->initDebug(dlog,"dlog");
string logfilename = conf->getArgParam("--logfile", "smemory.log"); string logfilename = conf->getArgParam("--logfile", "smemory.log");
...@@ -72,9 +73,10 @@ int main(int argc, char* argv[] ) ...@@ -72,9 +73,10 @@ int main(int argc, char* argv[] )
if( !shm ) if( !shm )
return 1; return 1;
UniSetActivatorPtr act = UniSetActivator::Instance(); auto act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(shm)); act->addObject(shm);
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() ); act->broadcast( sm.transport_msg() );
act->run(true); act->run(true);
...@@ -93,6 +95,8 @@ int main(int argc, char* argv[] ) ...@@ -93,6 +95,8 @@ int main(int argc, char* argv[] )
int ret = session.run(); int ret = session.run();
act->oaDestroy(); act->oaDestroy();
act.reset();
conf.reset();
return ret; return ret;
} }
catch( SystemError& err ) catch( SystemError& err )
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
// Для некоторых тестов необходим SMInterface инициализированный для работы с SharedMemory // Для некоторых тестов необходим SMInterface инициализированный для работы с SharedMemory
// поэтому сделана такая специальная функция // поэтому сделана такая специальная функция
// реализацию смотри в tests_with_sm.cc // реализацию смотри в tests_with_sm.cc
SMInterface* smiInstance(); std::shared_ptr<SMInterface> smiInstance();
SharedMemory* shmInstance(); std::shared_ptr<SharedMemory> shmInstance();
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#endif // tests_with_sm_H_ #endif // tests_with_sm_H_
...@@ -60,6 +60,7 @@ class UniSetActivator: ...@@ -60,6 +60,7 @@ class UniSetActivator:
static UniSetActivatorPtr Instance( const UniSetTypes::ObjectId id=UniSetTypes::DefaultObjectId ); static UniSetActivatorPtr Instance( const UniSetTypes::ObjectId id=UniSetTypes::DefaultObjectId );
void Destroy(); void Destroy();
std::shared_ptr<UniSetActivator> get_aptr(){ return std::dynamic_pointer_cast<UniSetActivator>(get_ptr()); }
// ------------------------------------ // ------------------------------------
virtual ~UniSetActivator(); virtual ~UniSetActivator();
...@@ -142,15 +143,15 @@ class UniSetActivator: ...@@ -142,15 +143,15 @@ class UniSetActivator:
struct OInfo: struct OInfo:
public Info public Info
{ {
OInfo( UniSetObject* o, pid_t p ):Info(p),obj(o){} OInfo( std::shared_ptr<UniSetObject> o, pid_t p ):Info(p),obj(o){}
UniSetObject* obj; std::shared_ptr<UniSetObject> obj;
}; };
struct MInfo: struct MInfo:
public Info public Info
{ {
MInfo( UniSetManager* m, pid_t p ):Info(p),mnr(m){} MInfo( std::shared_ptr<UniSetManager> m, pid_t p ):Info(p),mnr(m){}
UniSetManager* mnr; std::shared_ptr<UniSetManager> mnr;
}; };
std::deque<OInfo> lstOInfo; std::deque<OInfo> lstOInfo;
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#define UniSetManager_H_ #define UniSetManager_H_
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <omniORB4/CORBA.h> #include <omniORB4/CORBA.h>
#include <memory>
#include "UniSetTypes.h" #include "UniSetTypes.h"
#include "UniSetObject.h" #include "UniSetObject.h"
#include "UniSetManager_i.hh" #include "UniSetManager_i.hh"
...@@ -33,7 +34,7 @@ ...@@ -33,7 +34,7 @@
class UniSetActivator; class UniSetActivator;
class UniSetManager; class UniSetManager;
typedef std::list<UniSetManager*> UniSetManagerList; typedef std::list< std::shared_ptr<UniSetManager> > UniSetManagerList;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/*! \class UniSetManager /*! \class UniSetManager
* \par * \par
...@@ -62,6 +63,8 @@ class UniSetManager: ...@@ -62,6 +63,8 @@ class UniSetManager:
UniSetManager( const std::string& name, const std::string& section ); UniSetManager( const std::string& name, const std::string& section );
virtual ~UniSetManager(); virtual ~UniSetManager();
std::shared_ptr<UniSetManager> get_mptr() { return std::dynamic_pointer_cast<UniSetManager>(get_ptr()); }
virtual UniSetTypes::ObjectType getType() override { return UniSetTypes::ObjectType("UniSetManager"); } virtual UniSetTypes::ObjectType getType() override { return UniSetTypes::ObjectType("UniSetManager"); }
// ------ функции объявленные в интерфейсе(IDL) ------ // ------ функции объявленные в интерфейсе(IDL) ------
...@@ -71,23 +74,22 @@ class UniSetManager: ...@@ -71,23 +74,22 @@ class UniSetManager:
// -------------------------- // --------------------------
void initPOA(UniSetManager* rmngr); void initPOA(UniSetManager* rmngr);
virtual bool addObject(UniSetObject *obj); virtual bool addObject( std::shared_ptr<UniSetObject> obj );
virtual bool removeObject(UniSetObject *obj); virtual bool removeObject( std::shared_ptr<UniSetObject> obj );
virtual bool addManager( UniSetManager *mngr );
virtual bool removeManager( UniSetManager *mngr );
virtual bool addManager( std::shared_ptr<UniSetManager> mngr );
virtual bool removeManager( std::shared_ptr<UniSetManager> mngr );
/*! Получение доступа к подчиненному менеджеру по идентификатору /*! Получение доступа к подчиненному менеджеру по идентификатору
* \return объект ненайден будет возвращен 0. * \return объект ненайден будет возвращен 0.
*/ */
const UniSetManager* itemM(const UniSetTypes::ObjectId id); const std::shared_ptr<UniSetManager> itemM(const UniSetTypes::ObjectId id);
/*! Получение доступа к подчиненному объекту по идентификатору /*! Получение доступа к подчиненному объекту по идентификатору
* \return объект ненайден будет возвращен 0. * \return объект ненайден будет возвращен 0.
*/ */
const UniSetObject* itemO( const UniSetTypes::ObjectId id ); const std::shared_ptr<UniSetObject> itemO( const UniSetTypes::ObjectId id );
// Функции для аботы со списками подчиненных объектов // Функции для аботы со списками подчиненных объектов
...@@ -137,7 +139,7 @@ class UniSetManager: ...@@ -137,7 +139,7 @@ class UniSetManager:
typedef UniSetManagerList::iterator MListIterator; typedef UniSetManagerList::iterator MListIterator;
int getObjectsInfo( UniSetManager* mngr, UniSetTypes::SimpleInfoSeq* seq, int getObjectsInfo( const std::shared_ptr<UniSetManager>& mngr, UniSetTypes::SimpleInfoSeq* seq,
int begin, const long uplimit ); int begin, const long uplimit );
PortableServer::POA_var poa; PortableServer::POA_var poa;
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <sys/time.h> #include <sys/time.h>
#include <queue> #include <queue>
#include <ostream> #include <ostream>
#include <memory>
#include <string> #include <string>
#include <list> #include <list>
...@@ -49,7 +50,7 @@ class UniSetManager; ...@@ -49,7 +50,7 @@ class UniSetManager;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
class UniSetObject; class UniSetObject;
typedef std::list<UniSetObject *> ObjectsList; /*!< Список подчиненных объектов */ typedef std::list< std::shared_ptr<UniSetObject> > ObjectsList; /*!< Список подчиненных объектов */
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/*! \class UniSetObject /*! \class UniSetObject
* Класс задает такие свойства объекта как: получение сообщений, помещение сообщения в очередь и т.п. * Класс задает такие свойства объекта как: получение сообщений, помещение сообщения в очередь и т.п.
...@@ -62,6 +63,7 @@ typedef std::list<UniSetObject *> ObjectsList; /*!< Список подчи ...@@ -62,6 +63,7 @@ typedef std::list<UniSetObject *> ObjectsList; /*!< Список подчи
* на разработчика. * на разработчика.
*/ */
class UniSetObject: class UniSetObject:
public std::enable_shared_from_this<UniSetObject>,
public POA_UniSetObject_i public POA_UniSetObject_i
{ {
public: public:
...@@ -70,6 +72,8 @@ class UniSetObject: ...@@ -70,6 +72,8 @@ class UniSetObject:
UniSetObject(); UniSetObject();
virtual ~UniSetObject(); virtual ~UniSetObject();
std::shared_ptr<UniSetObject> get_ptr(){ return shared_from_this(); }
// Функции объявленные в IDL // Функции объявленные в IDL
virtual CORBA::Boolean exist() override; virtual CORBA::Boolean exist() override;
......
...@@ -81,7 +81,7 @@ UniSetActivatorPtr UniSetActivator::Instance( const UniSetTypes::ObjectId id ) ...@@ -81,7 +81,7 @@ UniSetActivatorPtr UniSetActivator::Instance( const UniSetTypes::ObjectId id )
{ {
if( inst == nullptr ) if( inst == nullptr )
{ {
inst = shared_ptr<UniSetActivator>( new UniSetActivator(id) ); inst = std::shared_ptr<UniSetActivator>( new UniSetActivator(id) );
gActivator = inst; gActivator = inst;
} }
......
...@@ -39,11 +39,11 @@ using namespace UniSetTypes; ...@@ -39,11 +39,11 @@ using namespace UniSetTypes;
using namespace std; using namespace std;
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// объект-функция для посылки сообщения менеджеру // объект-функция для посылки сообщения менеджеру
class MPush: public unary_function<UniSetManager*, bool> class MPush: public unary_function< const std::shared_ptr<UniSetManager>& , bool>
{ {
public: public:
MPush(const UniSetTypes::TransportMessage& msg):msg(msg){} MPush(const UniSetTypes::TransportMessage& msg):msg(msg){}
bool operator()(UniSetManager* m) const bool operator()( const std::shared_ptr<UniSetManager>& m ) const
{ {
try try
{ {
...@@ -60,11 +60,11 @@ class MPush: public unary_function<UniSetManager*, bool> ...@@ -60,11 +60,11 @@ class MPush: public unary_function<UniSetManager*, bool>
}; };
// объект-функция для посылки сообщения объекту // объект-функция для посылки сообщения объекту
class OPush: public unary_function<UniSetObject*, bool> class OPush: public unary_function< const std::shared_ptr<UniSetObject>& , bool>
{ {
public: public:
OPush(const UniSetTypes::TransportMessage& msg):msg(msg){} OPush(const UniSetTypes::TransportMessage& msg):msg(msg){}
bool operator()(UniSetObject* o) const bool operator()( const std::shared_ptr<UniSetObject>& o ) const
{ {
try try
{ {
...@@ -169,7 +169,7 @@ void UniSetManager::initPOA( UniSetManager* rmngr ) ...@@ -169,7 +169,7 @@ void UniSetManager::initPOA( UniSetManager* rmngr )
managers(initial); managers(initial);
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::addObject( UniSetObject *obj ) bool UniSetManager::addObject( std::shared_ptr<UniSetObject> obj )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(olistMutex); uniset_rwmutex_wrlock lock(olistMutex);
...@@ -184,7 +184,7 @@ bool UniSetManager::addObject( UniSetObject *obj ) ...@@ -184,7 +184,7 @@ bool UniSetManager::addObject( UniSetObject *obj )
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::removeObject( UniSetObject* obj ) bool UniSetManager::removeObject( std::shared_ptr<UniSetObject> obj )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(olistMutex); uniset_rwmutex_wrlock lock(olistMutex);
...@@ -194,6 +194,7 @@ bool UniSetManager::removeObject( UniSetObject* obj ) ...@@ -194,6 +194,7 @@ bool UniSetManager::removeObject( UniSetObject* obj )
uinfo << myname << "(activator): удаляем объект "<< obj->getName()<< endl; uinfo << myname << "(activator): удаляем объект "<< obj->getName()<< endl;
try try
{ {
if(obj)
obj->deactivate(); obj->deactivate();
} }
catch(Exception& ex) catch(Exception& ex)
...@@ -235,6 +236,8 @@ void UniSetManager::managers( OManagerCommand cmd ) ...@@ -235,6 +236,8 @@ void UniSetManager::managers( OManagerCommand cmd )
uniset_rwmutex_rlock lock(mlistMutex); uniset_rwmutex_rlock lock(mlistMutex);
for( auto &li: mlist ) for( auto &li: mlist )
{ {
if( !li )
continue;
try try
{ {
switch(cmd) switch(cmd)
...@@ -295,6 +298,8 @@ void UniSetManager::objects(OManagerCommand cmd) ...@@ -295,6 +298,8 @@ void UniSetManager::objects(OManagerCommand cmd)
for( auto &li: olist ) for( auto &li: olist )
{ {
if( !li )
continue;
try try
{ {
switch(cmd) switch(cmd)
...@@ -409,7 +414,7 @@ void UniSetManager::broadcast(const TransportMessage& msg) ...@@ -409,7 +414,7 @@ void UniSetManager::broadcast(const TransportMessage& msg)
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::addManager( UniSetManager *child ) bool UniSetManager::addManager( std::shared_ptr<UniSetManager> child )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(mlistMutex); uniset_rwmutex_wrlock lock(mlistMutex);
...@@ -429,7 +434,7 @@ bool UniSetManager::addManager( UniSetManager *child ) ...@@ -429,7 +434,7 @@ bool UniSetManager::addManager( UniSetManager *child )
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::removeManager( UniSetManager* child ) bool UniSetManager::removeManager( std::shared_ptr<UniSetManager> child )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(mlistMutex); uniset_rwmutex_wrlock lock(mlistMutex);
...@@ -441,7 +446,7 @@ bool UniSetManager::removeManager( UniSetManager* child ) ...@@ -441,7 +446,7 @@ bool UniSetManager::removeManager( UniSetManager* child )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
const UniSetManager* UniSetManager::itemM(const ObjectId id) const std::shared_ptr<UniSetManager> UniSetManager::itemM( const ObjectId id )
{ {
{ //lock { //lock
...@@ -458,7 +463,7 @@ const UniSetManager* UniSetManager::itemM(const ObjectId id) ...@@ -458,7 +463,7 @@ const UniSetManager* UniSetManager::itemM(const ObjectId id)
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
const UniSetObject* UniSetManager::itemO(const ObjectId id) const std::shared_ptr<UniSetObject> UniSetManager::itemO( const ObjectId id )
{ {
{ //lock { //lock
uniset_rwmutex_rlock lock(olistMutex); uniset_rwmutex_rlock lock(olistMutex);
...@@ -469,7 +474,7 @@ const UniSetObject* UniSetManager::itemO(const ObjectId id) ...@@ -469,7 +474,7 @@ const UniSetObject* UniSetManager::itemO(const ObjectId id)
} }
} // unlock } // unlock
return 0; return std::shared_ptr<UniSetObject>();
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -488,7 +493,7 @@ int UniSetManager::objectsCount() ...@@ -488,7 +493,7 @@ int UniSetManager::objectsCount()
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
int UniSetManager::getObjectsInfo( UniSetManager* mngr, SimpleInfoSeq* seq, int UniSetManager::getObjectsInfo( const std::shared_ptr<UniSetManager>& mngr, SimpleInfoSeq* seq,
int begin, const long uplimit ) int begin, const long uplimit )
{ {
auto ind = begin; auto ind = begin;
...@@ -550,7 +555,8 @@ SimpleInfoSeq* UniSetManager::getObjectsInfo( CORBA::Long maxlength ) ...@@ -550,7 +555,8 @@ SimpleInfoSeq* UniSetManager::getObjectsInfo( CORBA::Long maxlength )
// используем рекурсивную функцию // используем рекурсивную функцию
int ind = 0; int ind = 0;
const int limit = length; const int limit = length;
ind = getObjectsInfo( this, res, ind, limit );
ind = getObjectsInfo( get_mptr(), res, ind, limit );
return res; return res;
} }
......
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