Commit 91cbfaa2 authored by Pavel Vainerman's avatar Pavel Vainerman

Т.к. не может быть больше одного активатор-а на "процесс", использовал шаблон…

Т.к. не может быть больше одного активатор-а на "процесс", использовал шаблон "Singlton" для UniSetActivator. Теперь его можно создать только так: .. UniSetActivator* act = UniSetActivator::Instance(); ..
parent 313613a4
......@@ -71,9 +71,9 @@ int main(int argc, char** argv)
bool dbDumping = conf->getArgInt("--dbDumping");
NullController nc(ID,askfile,s_field,s_fvalue,c_field,c_fvalue,dbDumping);
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(&nc));
act.run(false);
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&nc));
act->run(false);
return 0;
}
catch(Exception& ex)
......
......@@ -33,13 +33,13 @@ int main( int argc, const char **argv )
return 0;
}
UniSetActivator act;
UniSetActivator* act = UniSetActivator::Instance();
SMonitor tp(ID);
act.addObject(&tp);
act->addObject(&tp);
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act.run(false);
act->broadcast( sm.transport_msg() );
act->run(false);
return 0;
}
catch( Exception& ex )
......
......@@ -22,19 +22,7 @@ int main(int argc, const char **argv)
}
uniset_init(argc,argv,"configure.xml");
/*
UInterface ui;
IDList lst;
lst.add(1);
lst.add(2);
lst.add(3);
lst.add(5);
lst.add(33);
IOController_i::ASensorInfoSeq_var seq = ui.getSensorSeq(lst);
int size = seq->length();
for(int i=0; i<size; i++)
cout << "id=" << seq[i].si.id << " val=" << seq[i].value << endl;
*/
bool fullname = false;
if( findArgParam("--fullname",conf->getArgc(),conf->getArgv()) != -1 )
fullname = true;
......
......@@ -74,12 +74,12 @@ int main( int argc,char* argv[] )
string logname( conf->getLogDir() + logfilename );
obj.mylog.logFile( logname.c_str() );
UniSetActivator act;
act.addObject(static_cast&lt;class UniSetObject*&gt;(&amp;obj));
UniSetActivator* act = UniSetActivator::Instance();
act-&gt;addObject(static_cast&lt;class UniSetObject*&gt;(&amp;obj));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act.run(false);
act-&gt;broadcast( sm.transport_msg() );
act-&gt;run(false);
pause(); // пауза, чтобы дочерние потоки успели завершить работу
}
catch(Exception&amp; ex)
......
......@@ -81,13 +81,13 @@ int main( int argc, const char** argv )
obj.mylog.logFile( logname.c_str() );
</xsl:if>
UniSetActivator act;
act.addObject(static_cast&lt;class UniSetObject*&gt;(&amp;obj));
UniSetActivator* act = UniSetActivator::Instance();
act-&gt;addObject(static_cast&lt;class UniSetObject*&gt;(&amp;obj));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act.run(false);
act-&gt;broadcast( sm.transport_msg() );
act-&gt;run(false);
pause(); // пауза, чтобы дочерние потоки успели завершить работ
}
catch(Exception&amp; ex)
......
......@@ -52,9 +52,9 @@ int main(int argc, char** argv)
}
DBServer_MySQL dbs(ID);
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(&dbs));
act.run(false);
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&dbs));
act->run(false);
}
catch(Exception& ex)
{
......
......@@ -52,9 +52,10 @@ int main(int argc, char** argv)
}
DBServer_SQLite dbs(ID);
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(&dbs));
act.run(false);
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&dbs));
act->run(false);
}
catch(Exception& ex)
{
......
......@@ -44,7 +44,7 @@ int main(int argc, const char **argv)
return 1;
}
IOControl* ic = IOControl::init_iocontrol(argc,argv,shmID);
if( !ic )
{
......@@ -52,17 +52,17 @@ int main(int argc, const char **argv)
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(ic));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(ic));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- IOControl START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- IOControl START -------------------------\n\n";
act.run(true);
act->run(true);
msleep(500);
ic->execute();
return 0;
......
......@@ -70,17 +70,17 @@ int main(int argc, const char **argv)
PassiveLProcessor plc(schema,ID,shmID);
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(&plc));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(&plc));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- IOControl START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- IOControl START -------------------------\n\n";
act.run(false);
act->run(false);
return 0;
}
catch( LogicException& ex )
......
......@@ -59,17 +59,17 @@ int main( int argc, const char** argv )
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(mb));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(mb));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- MBTCP Exchange START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- MBTCP Exchange START -------------------------\n\n";
act.run(false);
act->run(false);
while( waitpid(-1, 0, 0) > 0 );
return 0;
}
......
......@@ -59,18 +59,18 @@ int main( int argc, const char** argv )
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(mb));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(mb));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- MBTCPMulti Exchange START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- MBTCPMulti Exchange START -------------------------\n\n";
act.run(false);
act->run(false);
while( waitpid(-1, 0, 0) > 0 );
return 0;
......
......@@ -57,18 +57,18 @@ int main( int argc, char** argv )
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(rs));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(rs));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- RTU Exchange START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- RTU Exchange START -------------------------\n\n";
act.run(false);
act->run(false);
while( waitpid(-1, 0, 0) > 0 );
return 0;
......
......@@ -64,17 +64,17 @@ int main(int argc, const char **argv)
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(s));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(s));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- MBSlave START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- MBSlave START -------------------------\n\n";
act.run(false);
act->run(false);
while( waitpid(-1, 0, 0) > 0 );
return 0;
}
......
......@@ -58,17 +58,17 @@ int main( int argc, const char** argv )
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(db));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(db));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- RRDServer START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- RRDServer START -------------------------\n\n";
act.run(false);
act->run(false);
return 0;
}
catch( UniSetTypes::Exception& ex )
......
......@@ -32,12 +32,12 @@ int main(int argc, const char **argv)
if( !shm )
return 1;
UniSetActivator act;
UniSetActivator* act = UniSetActivator::Instance();
act.addObject(static_cast<class UniSetObject*>(shm));
act->addObject(static_cast<class UniSetObject*>(shm));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act.run(false);
act->broadcast( sm.transport_msg() );
act->run(false);
// pause(); // пауза, чтобы дочерние потоки успели завершить работу
return 0;
......
......@@ -55,13 +55,13 @@ int main( int argc, const char **argv )
ulog.logFile( logname );
conf->initDebug(UniSetExtensions::dlog,"dlog");
UniSetActivator act;
UniSetActivator* act = UniSetActivator::Instance();
// ------------ SharedMemory ----------------
SharedMemory* shm = SharedMemory::init_smemory(argc,argv);
if( shm == NULL )
return 1;
act.addManager(static_cast<class UniSetManager*>(shm));
act->addManager(static_cast<class UniSetManager*>(shm));
// ------------ IOControl ----------------
std::list< ThreadCreator<IOControl>* > lst_iothr;
......@@ -90,7 +90,7 @@ int main( int argc, const char **argv )
if( io_thr == NULL )
return 1;
act.addObject(static_cast<class UniSetObject*>(ic));
act->addObject(static_cast<class UniSetObject*>(ic));
lst_iothr.push_back( io_thr );
}
}
......@@ -115,7 +115,7 @@ int main( int argc, const char **argv )
if( rtu == NULL )
return 1;
act.addObject(static_cast<class UniSetObject*>(rtu));
act->addObject(static_cast<class UniSetObject*>(rtu));
}
}
// ------------- MBSlave --------------
......@@ -139,7 +139,7 @@ int main( int argc, const char **argv )
if( mbs == NULL )
return 1;
act.addObject(static_cast<class UniSetObject*>(mbs));
act->addObject(static_cast<class UniSetObject*>(mbs));
}
}
......@@ -165,7 +165,7 @@ int main( int argc, const char **argv )
if( mbm1 == NULL )
return 1;
act.addObject(static_cast<class UniSetObject*>(mbm1));
act->addObject(static_cast<class UniSetObject*>(mbm1));
}
}
// ------------- UNetUDP --------------
......@@ -179,19 +179,19 @@ int main( int argc, const char **argv )
if( dlog.is_info() )
dlog.info() << "(smemory-plus): add UNetExchnage.." << endl;
act.addObject(static_cast<class UniSetObject*>(unet));
act->addObject(static_cast<class UniSetObject*>(unet));
}
// ---------------------------------------
// попытка решить вопрос с "зомби" процессами
signal( SIGCHLD, on_sigchild );
// ---------------------------------------
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
for( std::list< ThreadCreator<IOControl>* >::iterator it=lst_iothr.begin(); it!=lst_iothr.end(); ++it )
(*it)->start();
act.run(false);
act->run(false);
on_sigchild(SIGTERM);
return 0;
......
......@@ -56,18 +56,18 @@ int main( int argc, const char** argv )
return 1;
}
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(unet));
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(unet));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act->broadcast( sm.transport_msg() );
ulog << "\n\n\n";
ulog << "(main): -------------- UDPRecevier START -------------------------\n\n";
dlog << "\n\n\n";
dlog << "(main): -------------- UDPReceiver START -------------------------\n\n";
act.run(false);
act->run(false);
while( waitpid(-1, 0, 0) > 0 );
}
catch( Exception& ex )
......
......@@ -46,12 +46,12 @@ int main(int argc, const char **argv)
if( !shm )
return 1;
UniSetActivator act;
UniSetActivator* act = UniSetActivator::Instance();
act.addObject(static_cast<class UniSetObject*>(shm));
act->addObject(static_cast<class UniSetObject*>(shm));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act.run(true);
act->broadcast( sm.transport_msg() );
act->run(true);
shm->execute();
while( waitpid(-1, 0, 0) > 0 );
return 0;
......
......@@ -33,9 +33,9 @@ int main(int argc, const char **argv)
if( !shm )
return 1;
UniSetActivator act;
UniSetActivator* act = UniSetActivator::Instance();
act.addObject(static_cast<class UniSetObject*>(shm));
act->addObject(static_cast<class UniSetObject*>(shm));
int num = conf->getArgPInt("--numproc",1);
......@@ -47,12 +47,12 @@ int main(int argc, const char **argv)
cout << "..create " << s.str() << endl;
TestProc* tp = new TestProc(conf->getObjectID(s.str()));
tp->init_dlog(dlog);
act.addObject(static_cast<class UniSetObject*>(tp));
act->addObject(static_cast<class UniSetObject*>(tp));
}
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
act.run(false);
act->broadcast( sm.transport_msg() );
act->run(false);
return 0;
}
......
......@@ -38,18 +38,24 @@
* Создает POA менеджер и регистрирует в нем объекты.
* Для обработки CORBA-запросов создается поток или передаются ресурсы
* главного потока см. void activate(bool thread)
*
* \warning Авктиватор может быть создан только один. Для его создания используйте код:
\code
...
UniSetActivator* act = UniSetActivator::Instance()
...
\endcode
* Активатор в свою очередь сам является менеджером(и объектом) и обладает всеми его свойствами
*
* \todo Разобраться со всякими oaDestroy, stop, oakill и сделать одну надежную завершающую функцию.
*/
class UniSetActivator:
public UniSetManager
{
public:
UniSetActivator();
UniSetActivator( UniSetTypes::ObjectId id );
static UniSetActivator* Instance( const UniSetTypes::ObjectId id=UniSetTypes::DefaultObjectId );
void Destroy();
// ------------------------------------
virtual ~UniSetActivator();
virtual void run(bool thread);
......@@ -90,6 +96,13 @@ class UniSetActivator:
virtual void sysCommand( const UniSetTypes::SystemMessage *sm );
// уносим в protected, т.к. Activator должен быть только один..
UniSetActivator();
UniSetActivator( const UniSetTypes::ObjectId id );
static UniSetActivator* inst;
private:
// static void processingSignal(int signo);
......@@ -114,7 +127,7 @@ class UniSetActivator:
{
pid_t msgpid; // pid порожденого потока обработки сообщений
};
struct OInfo:
public Info
{
......
......@@ -43,7 +43,7 @@ using namespace std;
Завершение работы организовано следующим образом.
Имеется глобальный указатель gActivator (т.к. активатор в системе должен быть только один).
Он заказывает на себя все сигналы связанные с завершением работы.
В качестве обработчика сигналов регистрируется UniSetActivator::terminated( int signo ).
В этом обработчике происходит вызов UniSetActivator::oaDestroy(int signo) для фактического
завершения работы и заказывается сигнал SIG_ALRM на время TERMINATE_TIMEOUT,
......@@ -74,8 +74,29 @@ ost::AtomicCounter procterm = 0;
ost::AtomicCounter doneterm = 0;
// PassiveTimer termtmr;
// ------------------------------------------------------------------------------------------
UniSetActivator::UniSetActivator( ObjectId id ):
// ---------------------------------------------------------------------------
UniSetActivator* UniSetActivator::inst=0;
// ---------------------------------------------------------------------------
UniSetActivator* UniSetActivator::Instance( const UniSetTypes::ObjectId id )
{
if(inst==0)
inst = new UniSetActivator(id);
return inst;
}
// ---------------------------------------------------------------------------
void UniSetActivator::Destroy()
{
if(inst)
delete inst;
inst=0;
}
// ---------------------------------------------------------------------------
UniSetActivator::UniSetActivator( const ObjectId id ):
UniSetManager(id),
orbthr(0),
omDestroy(false),
......
......@@ -19,7 +19,7 @@ int main(int argc, const char **argv)
{
// string confile = UniSetTypes::getArgParam( "--confile", argc, argv, "test.xml" );
// conf = new Configuration(argc, argv, confile);
for( int i=-5; i<5; i++ )
for( int i=-5; i<4095; i+=100 )
{
cout << "raw=" << (817+i)
......
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