Version: 9.16.0
driver.cxx
Go to the documentation of this file.
1// Copyright (C) 2006-2026 CEA, EDF
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of the GNU Lesser General Public
5// License as published by the Free Software Foundation; either
6// version 2.1 of the License, or (at your option) any later version.
7//
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12//
13// You should have received a copy of the GNU Lesser General Public
14// License along with this library; if not, write to the Free Software
15// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16//
17// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18//
19
20#include "yacsconfig.h"
21#include "RuntimeSALOME.hxx"
22#include "Proc.hxx"
23#include "Logger.hxx"
24#include "Exception.hxx"
25#include "Executor.hxx"
26#include "parsers.hxx"
29#include "LoadState.hxx"
30#include "Dispatcher.hxx"
31#include "LinkInfo.hxx"
32#include "ObserverAsPlugin.hxx"
33#include "PythonNode.hxx"
34
35#include "KernelBasis.hxx"
36#include "SALOME_Launcher.hxx"
37#include "ServiceUnreachable.hxx"
39#include "SALOME_NamingService.hxx"
40#include "SALOME_ModuleCatalog.hh"
41#include "SALOMESDS_DataServerManager.hxx"
42#include "Basics_Utils.hxx"
43
44#include <iostream>
45#include <fstream>
46#include <signal.h>
47#include <list>
48
49#if defined WIN32 || defined __APPLE__
50#else
51#include <argp.h>
52#endif
53
55using namespace YACS::ENGINE;
56using namespace std;
57
58
59// --- use of glibc argp interface for parsing unix-style arguments
60
61const char *argp_program_version ="driver V0.1";
62const char *argp_program_bug_address ="<nepal@nepal.edf.fr>";
63static char doc[] ="driver -- a SALOME YACS graph executor";
64static char args_doc[] = "graph.xml";
65
66#if defined WIN32 || defined __APPLE__
67#else
68static struct argp_option options[] =
69 {
70 {"display", 'd', "level", 0, "Display dot files: 0=never to 3=very often (default 0)"},
71 {"verbose", 'v', 0, 0, "Produce verbose output" },
72 {"stop-on-error", 's', 0, 0, "Stop on first error" },
73 {"dump-on-error", 'e', "file", OPTION_ARG_OPTIONAL, "Stop on first error and dump state"},
74 {"dump-final", 'f', "file", OPTION_ARG_OPTIONAL, "dump final state"},
75 {"dump", 'g', "nbsec", OPTION_ARG_OPTIONAL, "dump state"},
76 {"load-state", 'l', "file", 0, "Load State from a previous partial execution"},
77 {"save-xml-schema", 'x', "file", OPTION_ARG_OPTIONAL, "dump xml schema"},
78 {"shutdown", 't', "level", 0, "Shutdown the schema: 0=no shutdown to 3=full shutdown (default 1)"},
79 {"reset", 'r', "level", 0, "Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state (default 0)"},
80 {"kill-port", 'k', "port", 0, "Kill Salome application running on the specified port if the driver process is killed (with SIGINT or SIGTERM)"},
81 {"init_port", 'i', "value", OPTION_ARG_OPTIONAL, "Initialisation value of a port, specified as bloc.node.port=value."},
82 {"donotsqueeze", 'z', "value", 0, "Desactivate squeeze memory optimization."},
83 { nullptr }
84 };
85#endif
86
88{
89 char *args[1];
90 int display = 0;
91 int verbose = 0;
92 int stop = 0;
93 std::string dumpErrorFile;
94 std::string finalDump;
95 int dump = 0;
96 std::string xmlSchema;
97 std::string loadState;
98 int shutdown = 10;
99 int reset = 0;
100 int killPort = 0;
101 bool squeezeMemory = true;
102 std::list<std::string> init_ports;
103};
104
105typedef struct {
106 int nbsec;
107 string dumpFile;
108 string lockFile;
109} thread_st;
110
111#if defined WIN32 || defined __APPLE__
112static int
113#else
114static error_t
115#endif
116parse_opt (int key, char *arg, struct argp_state *state)
117{
118#if defined WIN32 || defined __APPLE__
119#else
120 // Get the input argument from argp_parse, which we
121 // know is a pointer to our arguments structure.
122 struct arguments *myArgs = (arguments*)state->input;
123
124 switch (key)
125 {
126 case 'd':
127 myArgs->display = atoi(arg);
128 break;
129 case 't':
130 myArgs->shutdown = atoi(arg);
131 break;
132 case 'r':
133 myArgs->reset = atoi(arg);
134 break;
135 case 'v':
136 myArgs->verbose = 1;
137 break;
138 case 's':
139 myArgs->stop = 1;
140 break;
141 case 'e':
142 myArgs->stop = 1;
143 if (arg)
144 myArgs->dumpErrorFile = arg;
145 else
146 myArgs->dumpErrorFile = "dumpErrorState.xml";
147 break;
148 case 'f':
149 if (arg)
150 myArgs->finalDump = arg;
151 else
152 myArgs->finalDump = "finalDumpState.xml";
153 break;
154 case 'g':
155 if (arg)
156 myArgs->dump = atoi(arg);
157 else
158 myArgs->dump = 60;
159 break;
160 case 'l':
161 myArgs->loadState = arg;
162 break;
163 case 'x':
164 if (arg)
165 myArgs->xmlSchema = arg;
166 else
167 myArgs->xmlSchema = "saveSchema.xml";
168 break;
169 case 'k':
170 myArgs->killPort = atoi(arg);
171 break;
172 case 'i':
173 if (arg)
174 myArgs->init_ports.push_back(std::string(arg));
175 break;
176 case 'z':
177 myArgs->squeezeMemory = ! ( bool( atoi(arg) ) );
178 break;
179 case ARGP_KEY_ARG:
180 if (state->arg_num >=1) // Too many arguments.
181 argp_usage (state);
182 myArgs->args[state->arg_num] = arg;
183 break;
184
185 case ARGP_KEY_END:
186 if (state->arg_num < 1) // Not enough arguments.
187 argp_usage (state);
188 break;
189
190 default:
191 return ARGP_ERR_UNKNOWN;
192 }
193#endif
194 return 0;
195}
196
197// Our argp parser.
198#if defined WIN32 || defined __APPLE__
199#else
200static struct argp argp = { options, parse_opt, args_doc, doc };
201#endif
202
203void timer(std::string msg)
204{
205#if defined WIN32 || defined __APPLE__
206#else
207 struct timeval tv;
208 gettimeofday(&tv,NULL);
209 long t=tv.tv_sec*1000+tv.tv_usec/1000;
210 static long t0=t;
211 gettimeofday(&tv,NULL);
212 std::cerr << msg << tv.tv_sec*1000+tv.tv_usec/1000-t0 << " ms" << std::endl;
213#endif
214}
215
217static struct arguments myArgs;
218
219void Handler(int theSigId)
220{
221 if(p)
222 {
223 p->cleanNodes();
224 //if requested save state
225 bool isFinalDump = !myArgs.finalDump.empty();
226 if (isFinalDump)
227 {
230 p->accept(&vst);
231 vst.closeFileDump();
232 }
233 //if requested shutdown schema
234 if(myArgs.shutdown < 999)
235 {
237 }
238 }
239 if (myArgs.killPort)
240 {
241 ostringstream command;
242 command << "killSalomeWithPort.py " << myArgs.killPort;
243 int status = system(command.str().c_str());
244 if (status == 0)
245 cerr << "Salome application on port " << myArgs.killPort << " is killed" << endl;
246 else
247 cerr << "Error: Can't kill Salome application on port " << myArgs.killPort << endl;
248 }
249 _exit(1);
250}
251
252void * dumpState(void *arg)
253{
254 thread_st *st = (thread_st*)arg;
257#ifdef WIN32
258 Sleep(st->nbsec);
259#else
260 sleep(st->nbsec);
261#endif
262 string cmd = "touch " + st->lockFile;
263 system(cmd.c_str());
265 vst.openFileDump(st->dumpFile);
266 p->accept(&vst);
267 vst.closeFileDump();
268 cmd = "rm -f " + st->lockFile;
269 system(cmd.c_str());
271 }
272 delete st;
273 return NULL;
274}
275
276#ifndef WIN32
277typedef void (*sighandler_t)(int);
279{
280 sigset_t sigmask;
281 sigemptyset (&sigmask);
282 sigaddset(&sigmask, sig);
283 sigprocmask(SIG_UNBLOCK, &sigmask, NULL);
284 struct sigaction context, ocontext;
285 context.sa_handler = handler;
286 sigemptyset(&context.sa_mask);
287 context.sa_flags = 0;
288 if (sigaction(sig, &context, &ocontext) == -1)
289 return SIG_ERR;
290 return ocontext.sa_handler;
291}
292#endif
293
294bool parse_init_port(const std::string& input, std::string& node, std::string& port, std::string& value)
295{
296 bool ok = true;
297 size_t pos_eq = input.find('=');
298 if(pos_eq == std::string::npos || pos_eq == input.size())
299 return false;
300 value = input.substr(pos_eq+1);
301 size_t pos_dot = input.rfind('.', pos_eq);
302 if(!pos_dot || pos_dot == std::string::npos || pos_dot >= pos_eq-1)
303 return false;
304 port = input.substr(pos_dot+1, pos_eq-pos_dot-1);
305 node = input.substr(0, pos_dot);
306 return true;
307}
308
310{
311 setSSLMode(true);
312 KERNEL::getLauncherSA();
313}
314
316{
317 // shutdown data server scopes
318 try
319 {
321 runTime->loadModulCatalog();
322 CORBA::ORB_ptr orb = runTime->getOrb();
323 if (orb)
324 {
325 SALOME_NamingService_Wrapper namingService(orb);
326 CORBA::Object_var objDSM(namingService.Resolve(SALOMESDS::DataServerManager::NAME_IN_NS));
327 SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(objDSM));
328 if ( !CORBA::is_nil(dsm) )
329 dsm->shutdownScopes();
330 }
331 }
332 catch(const CORBA::Exception& )
333 {
334 // ignore and continue
335 }
336 catch(ServiceUnreachable& e)
337 {
338 // ignore and continue
339 }
340}
341
342int main (int argc, char* argv[])
343{
344 // Parse our arguments; every option seen by parse_opt will be reflected in arguments.
345#if defined WIN32 || defined __APPLE__
346#else
347 argp_parse (&argp, argc, argv, 0, 0, &myArgs);
348 std::cerr << "graph = " << myArgs.args[0];
349 std::cerr << " options: display=" << myArgs.display;
350 std::cerr << " verbose="<<myArgs.verbose;
351 std::cerr << " stop-on-error=" << myArgs.stop;
352 std::cerr << " shutdown=" << myArgs.shutdown;
353 std::cerr << " reset=" << myArgs.reset;
354 if (myArgs.killPort)
355 std::cerr << " kill-port=" << myArgs.killPort;
356 if (myArgs.stop)
357 std::cerr << " dumpErrorFile=" << myArgs.dumpErrorFile << std::endl;
358 else
359 std::cerr << std::endl;
360 std::list<std::string>::const_iterator it;
361 for(it=myArgs.init_ports.begin(); it != myArgs.init_ports.end(); it++)
362 {
363 std::cerr << (*it) << std::endl;
364 }
365#endif
366
367#ifndef WIN32
368 setsig(SIGINT,&Handler);
369 setsig(SIGTERM,&Handler);
370#endif
371
373
374 timer("Starting ");
375 long flags = RuntimeSALOME::UsePython + RuntimeSALOME::UseCorba + RuntimeSALOME::UseXml + \
376 RuntimeSALOME::UseCpp + RuntimeSALOME::UseSalome;
377 RuntimeSALOME::setRuntime(flags, argc, argv);
378
379 // Try to load the session catalog if it exists
380 try
381 {
383 runTime->loadModulCatalog();
384 CORBA::ORB_ptr orb = runTime->getOrb();
385 if (orb)
386 {
387 SALOME_NamingService_Wrapper namingService(orb);
388 CORBA::Object_var obj = namingService.Resolve("/Kernel/ModulCatalog");
389 SALOME_ModuleCatalog::ModuleCatalog_var aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
390 if (! CORBA::is_nil(aModuleCatalog))
391 {
392 CORBA::String_var anIOR = orb->object_to_string( aModuleCatalog );
393 YACS::ENGINE::Catalog* aCatalog = runTime->loadCatalog( "session", anIOR.in() );
394 runTime->addCatalog(aCatalog);
395 }
396 }
397 }
398 catch(ServiceUnreachable& e)
399 {
400 //Naming service unreachable don't add catalog
401 }
402
404 Executor executor;
405
406 try
407 {
408 timer("Elapsed time before load: ");
409 p=loader.load(myArgs.args[0]);
410 if(p==0)
411 {
412 std::cerr << "The imported file is probably not a YACS schema file" << std::endl;
413 return 1;
414 }
416 {
417 std::list<Node *> allNodes = p->getAllRecursiveNodes();
418 for(auto node : allNodes)
419 {
420 PythonNode *nodePy = dynamic_cast<PythonNode *>(node);
421 if( nodePy )
422 {
423 nodePy->setSqueezeStatus( true );
424 }
425 }
426 }
427 // Initialize the ports
428 for(std::list<std::string>::iterator it=myArgs.init_ports.begin(); it != myArgs.init_ports.end(); it++)
429 {
430 std::string node, port, value;
431 if(parse_init_port((*it), node, port, value))
432 {
433 std::cerr << "Initialization node=" << node
434 << " port=" << port
435 << " value=" << value << std::endl;
436
437 std::string init_state;
438 init_state = p->setInPortValue(node, port, value);
439 if(value.compare(init_state))
440 {
441 std::cerr << "Error on initialization:" << init_state << std::endl;
442 return 1;
443 }
444 }
445 else
446 {
447 std::cerr << "Error on parsing initialization string:" << (*it) << std::endl;
448 return 1;
449 }
450 }
451
452 //Get the parser logger
453 Logger* logger=p->getLogger("parser");
454 //Print errors logged if any
455 if(!logger->isEmpty())
456 {
457 std::cerr << "The imported file has errors" << std::endl;
458 std::cerr << logger->getStr() << std::endl;
459 }
460 //Don't execute if there are errors
461 if(logger->hasErrors())
462 {
463 if(!p->isValid())
464 {
465 std::string report=p->getErrorReport();
466 std::cerr << "The schema is not valid and can not be executed" << std::endl;
467 std::cerr << report << std::endl;
468 }
469 delete p;
471 Dispatcher* disp=Dispatcher::getDispatcher();
472 r->fini();
473 delete r;
474 delete disp;
475 return 1;
476 }
477 timer("Elapsed time after load: ");
478
479 if(!p->isValid())
480 {
481 std::string report=p->getErrorReport();
482 std::cerr << "The schema is not valid and can not be executed" << std::endl;
483 std::cerr << report << std::endl;
485 Dispatcher* disp=Dispatcher::getDispatcher();
486 r->fini();
487 delete r;
488 delete disp;
489 return 1;
490 }
491 timer("Elapsed time after validation: ");
492
493 // Check consistency
494 LinkInfo info(LinkInfo::ALL_DONT_STOP);
495 p->checkConsistency(info);
496 if(info.areWarningsOrErrors())
497 {
498 std::cerr << "The schema is not consistent and can not be executed" << std::endl;
499 std::cerr << info.getGlobalRepr() << std::endl;
501 Dispatcher* disp=Dispatcher::getDispatcher();
502 r->fini();
503 delete r;
504 delete disp;
505 return 1;
506 }
507 timer("Elapsed time after check consistency: ");
508
509 //execution
510 bool isXmlSchema = !myArgs.xmlSchema.empty() ;
511 if (isXmlSchema)
512 {
515 p->accept(&vss);
516 vss.closeFileSchema();
517 }
518
519 bool fromScratch = myArgs.loadState.empty() ;
520 if (!fromScratch)
521 {
522 p->init();
523 p->exUpdateState();
524 stateParser* rootParser = new stateParser();
525 stateLoader myStateLoader(rootParser, p);
526 myStateLoader.parse(myArgs.loadState);
527 if(myArgs.reset>0)
528 {
530 p->exUpdateState();
531 }
532 }
533
534 if (myArgs.stop)
535 {
536 if ( !myArgs.dumpErrorFile.empty() )
537 executor.setStopOnError(true, myArgs.dumpErrorFile);
538 else
539 executor.setStopOnError(false, myArgs.dumpErrorFile);
540 }
541 if(myArgs.display>0)
542 {
543 std::ofstream f("toto");
544 p->writeDot(f);
545 f.close();
546 }
547
548 bool isDump = (myArgs.dump != 0);
549 pthread_t th;
550 if (isDump)
551 {
552 thread_st *st = new thread_st;
553 st->nbsec = myArgs.dump;
554 st->dumpFile = string("dumpState_") + myArgs.args[0];
555 string rootFile = st->dumpFile.substr(0,st->dumpFile.find("."));
556 st->lockFile = rootFile + ".lock";
557 pthread_create(&th,NULL,&dumpState,(void*)st);
558 }
560 cerr << "+++++++++++++++++++ start calculation +++++++++++++++++++" << endl;
561 executor.RunW(p,myArgs.display, fromScratch);
562 cerr << "+++++++++++++++++++ end calculation +++++++++++++++++++" << endl;
563 cerr << "Proc state : " << Node::getStateName(p->getEffectiveState()) << endl;
564 timer("Elapsed time after execution: ");
565
566 // Return 0 if SCHEMA OK
567 // Return 1 for YACS ERROR (EXCEPTION NOT CATCHED)
568 // Return 2 for YACS SCHEMA ERROR/FAILED
569 int return_value = 0;
570
572 {
573 std::string report=p->getErrorReport();
574 std::cerr << "Execution has ended in error" << std::endl;
575 std::cerr << report << std::endl;
576 return_value = 2;
577 }
578
579 if(myArgs.display>0)
580 {
581 std::ofstream g("titi");
582 p->writeDot(g);
583 g.close();
584 }
585
586 if (isDump)
587 {
588 pthread_join(th,NULL);
589 }
590
591 bool isFinalDump = !myArgs.finalDump.empty() ;
592 if (isFinalDump)
593 {
596 p->accept(&vst);
597 vst.closeFileDump();
598 }
599 if(myArgs.shutdown < 999)
600 {
603 }
604 delete p;
606 Dispatcher* disp=Dispatcher::getDispatcher();
607 r->fini();
608 delete r;
609 delete disp;
611 return return_value;
612 }
613 catch (YACS::Exception& e)
614 {
615 cerr << "Caught a YACS exception" << endl;
616 cerr << e.what() << endl;
618 Dispatcher* disp=Dispatcher::getDispatcher();
619 r->fini();
620 delete r;
621 delete disp;
622 return 1;
623 }
624 catch (const std::ios_base::failure&)
625 {
626 cerr << "Caught an io failure exception" << endl;
627 return 1;
628 }
629 catch(CORBA::SystemException& ex)
630 {
631 cerr << "Caught a CORBA::SystemException.:" << __FILE__ << ":" << __LINE__ << ":" ;
632 CORBA::Any tmp;
633 tmp <<= ex;
634 CORBA::TypeCode_var tc = tmp.type();
635 const char *p = tc->name();
636 if ( *p != '\0' )
637 cerr <<p;
638 else
639 cerr << tc->id();
640 cerr << endl;
641 return 1;
642 }
643 catch(omniORB::fatalException& fe)
644 {
645 cerr << "Caught omniORB::fatalException:" << endl;
646 cerr << " file: " << fe.file() << endl;
647 cerr << " line: " << fe.line() << endl;
648 cerr << " mesg: " << fe.errmsg() << endl;
649 return 1;
650 }
651 catch(...)
652 {
653 cerr << "Caught unknown exception." << endl;
654 return 1;
655 }
656}
657
static timeval tv
Definition: chrono.hxx:71
CORBA::Object_ptr Resolve(const char *Path) override
void init(bool start=true)
Initialize the bloc.
Definition: Bloc.cxx:95
void exUpdateState()
Update the bloc state.
Definition: Bloc.cxx:153
class for YACS catalogs.
Definition: Catalog.hxx:42
std::list< Node * > getAllRecursiveNodes()
Get all children nodes elementary and composed including this node.
virtual std::string getErrorReport()
returns a string that contains an error report if the node is in error
virtual void shutdown(int level)
Stop all pending activities of the composed node.
virtual void resetState(int level)
Reset the state of the node and its children depending on the parameter level.
virtual void cleanNodes()
Clean the composed node in case of not clean exit.
void checkConsistency(LinkInfo &info) const
Base class for dispatcher in observer pattern.
Definition: Dispatcher.hxx:74
Threaded Executor.
Definition: Executor.hxx:63
void setStopOnError(bool dumpRequested=false, std::string xmlFile="")
ask to stop execution on the first node found in error
Definition: Executor.cxx:399
void RunW(Scheduler *graph, int debug=0, bool fromScratch=true)
Definition: Executor.cxx:1833
Class that deal with list of semantics links for high level analysis.
Definition: LinkInfo.hxx:83
std::string getGlobalRepr() const
Definition: LinkInfo.cxx:118
bool areWarningsOrErrors() const
Definition: LinkInfo.cxx:199
Class for logging error messages.
Definition: Logger.hxx:38
virtual bool hasErrors()
Definition: Logger.cxx:101
virtual bool isEmpty()
Definition: Logger.cxx:96
virtual std::string getStr()
Definition: Logger.cxx:85
virtual int isValid()
indicates if the node is valid (returns 1) or not (returns 0)
Definition: Node.cxx:730
virtual YACS::StatesForNode getEffectiveState() const
Return the node state in the context of its father.
Definition: Node.cxx:538
Base class for all schema objects.
Definition: Proc.hxx:44
std::string setInPortValue(std::string nodeName, std::string portName, std::string value)
Definition: Proc.cxx:288
virtual Logger * getLogger(const std::string &name)
Definition: Proc.cxx:431
virtual void accept(Visitor *visitor)
Definition: Proc.cxx:199
virtual void writeDot(std::ostream &os) const
Dump to the input stream a dot representation of the node.
Definition: Proc.cxx:86
void setSqueezeStatus(bool sqStatus)
Definition: PythonNode.hxx:111
CORBA::ORB_ptr getOrb() const
virtual void addCatalog(Catalog *catalog)
Add a catalog of types and nodes to the runtime.
Definition: Runtime.cxx:323
virtual Catalog * loadCatalog(const std::string &sourceKind, const std::string &path)
Load a catalog of calculation to use as factory.
Definition: Runtime.cxx:285
void openFileSchema(std::string xmlDump)
void openFileDump(const std::string &xmlDump)
class for parse an xml file, use a dedicated parser, to load a saved state of a SALOME execution.
Definition: LoadState.hxx:54
virtual void parse(std::string xmlState)
Definition: LoadState.cxx:917
specialized parser to load SALOME execution saved states.
Definition: LoadState.hxx:81
void shutdownServers()
Definition: driver.cxx:315
static struct arguments myArgs
Definition: driver.cxx:217
Proc * p
Definition: driver.cxx:216
int main(int argc, char *argv[])
Definition: driver.cxx:342
void * dumpState(void *arg)
Definition: driver.cxx:252
bool parse_init_port(const std::string &input, std::string &node, std::string &port, std::string &value)
Definition: driver.cxx:294
static error_t parse_opt(int key, char *arg, struct argp_state *state)
Definition: driver.cxx:116
void Handler(int theSigId)
Definition: driver.cxx:219
sighandler_t setsig(int sig, sighandler_t handler)
Definition: driver.cxx:278
const char * argp_program_version
Definition: driver.cxx:61
void(* sighandler_t)(int)
Definition: driver.cxx:277
static char args_doc[]
Definition: driver.cxx:64
void InitializeSSL()
Definition: driver.cxx:309
const char * argp_program_bug_address
Definition: driver.cxx:62
static struct argp argp
Definition: driver.cxx:200
static struct argp_option options[]
Definition: driver.cxx:68
void timer(std::string msg)
Definition: driver.cxx:203
static char doc[]
Definition: driver.cxx:63
YACSRUNTIMESALOME_EXPORT RuntimeSALOME * getSALOMERuntime()
void YACSLIBENGINE_EXPORT UnLoadObserversPluginIfAny()
YACSLIBENGINE_EXPORT Runtime * getRuntime()
Definition: Runtime.cxx:61
void YACSLIBENGINE_EXPORT LoadObserversPluginIfAny(ComposedNode *rootNode, Executor *executor)
StatesForNode
Definition: define.hxx:34
@ FAILED
Definition: define.hxx:51
@ EXECFAILED
Definition: define.hxx:46
@ INTERNALERR
Definition: define.hxx:49
@ DONE
Definition: define.hxx:43
@ DISABLED
Definition: define.hxx:50
@ LOADFAILED
Definition: define.hxx:45
@ ERROR
Definition: define.hxx:52
std::string finalDump
Definition: driver.cxx:94
int killPort
Definition: driver.cxx:100
std::list< std::string > init_ports
Definition: driver.cxx:102
std::string xmlSchema
Definition: driver.cxx:96
int stop
Definition: driver.cxx:92
int display
Definition: driver.cxx:90
std::string dumpErrorFile
Definition: driver.cxx:93
int dump
Definition: driver.cxx:95
bool squeezeMemory
Definition: driver.cxx:101
int reset
Definition: driver.cxx:99
char * args[1]
Definition: driver.cxx:89
int shutdown
Definition: driver.cxx:98
std::string loadState
Definition: driver.cxx:97
int verbose
Definition: driver.cxx:91
int nbsec
Definition: driver.cxx:106
string lockFile
Definition: driver.cxx:108
string dumpFile
Definition: driver.cxx:107
CORBA::ORB_ptr orb
Definition: yacsSrv.cxx:39
YACS::YACSLoader::YACSLoader * loader
Definition: yacs_clt.cxx:31