From 0657026ba3957eb1f47cdc69f704a68a20232058 Mon Sep 17 00:00:00 2001 From: nri Date: Tue, 3 Jun 2003 11:29:43 +0000 Subject: [PATCH] NRI : Update launch. --- bin/runSalome | 5 +- bin/runSalome.py | 136 +++++++++++++++++++++------ src/Loader/InquireServersQThread.cxx | 36 +++++-- src/Loader/InquireServersQThread.h | 4 + src/Loader/SALOME_Session_Loader.cxx | 45 +++++++++ 5 files changed, 190 insertions(+), 36 deletions(-) diff --git a/bin/runSalome b/bin/runSalome index 9a133bb9f..2734aa804 100755 --- a/bin/runSalome +++ b/bin/runSalome @@ -9,7 +9,10 @@ export SUPERV_ROOT_DIR=/Salome2/SUPERV_install export VISU_ROOT_DIR=/Salome2/VISU_install python killSalome.py -python -i runSalome.py GEOM SMESH VISU SUPERV MED +python -i runSalome.py --gui --modules=GEOM,SMESH,VISU,SUPERV,MED --xterm --containers=cpp,python +#python -i runSalome.py --gui --modules=GEOM,SMESH,VISU,SUPERV,MED --logger --xterm +#python -i runSalome.py --modules=GEOM,SMESH,VISU,SUPERV,MED +#python -i runSalome.py --help # ----------------------------------------------------------------------------- # diff --git a/bin/runSalome.py b/bin/runSalome.py index 0a6514bde..c61998d89 100755 --- a/bin/runSalome.py +++ b/bin/runSalome.py @@ -1,18 +1,74 @@ #!/usr/bin/env python -usage="""USAGE: runSalome.py module1 module2 ... - où modulen est le nom d'un module Salome à charger dans le catalogue +usage="""USAGE: runSalome.py [options] + +[command line options] : +--help : affichage de l'aide +--gui : lancement du GUI +--logger : redirection des messages dans un fichier +--xterm : les serveurs ouvrent une fenêtre xterm et les messages sont affichés dans cette fenêtre +--modules=module1,module2,... : où modulen est le nom d'un module Salome à charger dans le catalogue +--containers=cpp,python,superv: lancement des containers cpp, python et de supervision + La variable d'environnement _ROOT_DIR doit etre préalablement positionnée (modulen doit etre en majuscule). KERNEL_ROOT_DIR est obligatoire. """ -import sys,os,string,glob,time,signal,pickle +def message(code, msg=''): + if msg: print msg + sys.exit(code) + +import sys,os,string,glob,time,signal,pickle,getopt init_time=os.times() -liste_modules=sys.argv[1:] +opts, args=getopt.getopt(sys.argv[1:], 'hmglxc:', ['help','modules=','gui','logger','xterm','containers=']) modules_root_dir={} process_id={} +liste_modules={} +liste_containers={} +with_gui=0 +with_logger=0 +with_xterm=0 + +with_container_cpp=0 +with_container_python=0 +with_container_superv=0 + +try: + for o, a in opts: + if o in ('-h', '--help'): + print usage + sys.exit(1) + elif o in ('-g', '--gui'): + with_gui=1 + elif o in ('-l', '--logger'): + with_logger=1 + elif o in ('-x', '--xterm'): + with_xterm=1 + elif o in ('-m', '--modules'): + liste_modules = [x.upper() for x in a.split(',')] + elif o in ('-c', '--containers'): + liste_containers = [x.lower() for x in a.split(',')] + for r in liste_containers: + if r not in ('cpp', 'python', 'superv'): + message(1, 'Invalid -c/--containers option: %s' % a) + if 'cpp' in liste_containers: + with_container_cpp=1 + else: + with_container_cpp=0 + if 'python' in liste_containers: + with_container_python=1 + else: + with_container_python=0 + if 'superv' in liste_containers: + with_container_superv=1 + else: + with_container_superv=0 + +except getopt.error, msg: + print usage + sys.exit(1) # ----------------------------------------------------------------------------- # @@ -44,6 +100,8 @@ liste_modules[:0]=["KERNEL"] #print liste_modules #print modules_root_dir +if "SUPERV" in liste_modules:with_container_superv=1 + import orbmodule # ----------------------------------------------------------------------------- @@ -53,8 +111,11 @@ import orbmodule class Server: CMD=[] - ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-e'] - #ARGS=[] + if with_xterm: + ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-e'] + else: + ARGS=[] + def run(self): args = self.ARGS+self.CMD #print "args = ", args @@ -92,6 +153,17 @@ class ContainerSUPERVServer(Server): class LoggerServer(Server): CMD=['SALOME_Logger_Server', 'logger.log'] +class SessionLoader(Server): + CMD=['SALOME_Session_Loader'] + if with_container_cpp: + CMD=CMD+['CPP'] + if with_container_python: + CMD=CMD+['PY'] + if with_container_superv: + CMD=CMD+['SUPERV'] + if with_gui: + CMD=CMD+['GUI'] + class SessionServer(Server): CMD=['SALOME_Session_Server'] @@ -181,6 +253,13 @@ for module in liste_modules_reverse: # def startSalome(): + + # + # Lancement Session Loader + # + + SessionLoader().run() + # # Initialisation ORB et Naming Service # @@ -190,8 +269,10 @@ def startSalome(): # (non obligatoire) Lancement Logger Server et attente de sa disponibilite dans le naming service # - #LoggerServer().run() - #clt.waitLogger("Logger") + if with_logger: + LoggerServer().run() + clt.waitLogger("Logger") + # # Lancement Registry Server @@ -255,33 +336,33 @@ def startSalome(): # # Lancement Container C++ local # + if with_container_cpp: + ContainerCPPServer().run() - ContainerCPPServer().run() - - # - # Attente de la disponibilité du Container C++ local dans le Naming Service - # + # + # Attente de la disponibilité du Container C++ local dans le Naming Service + # - theComputer = os.getenv("HOSTNAME") - computerSplitName = theComputer.split('.') - theComputer = computerSplitName[0] + theComputer = os.getenv("HOSTNAME") + computerSplitName = theComputer.split('.') + theComputer = computerSplitName[0] - clt.waitNS("/Containers/" + theComputer + "/FactoryServer") + clt.waitNS("/Containers/" + theComputer + "/FactoryServer") # # Lancement Container Python local # - ContainerPYServer().run() - - # - # Attente de la disponibilité du Container Python local dans le Naming Service - # + if with_container_python: + ContainerPYServer().run() - clt.waitNS("/Containers/" + theComputer + "/FactoryServerPy") + # + # Attente de la disponibilité du Container Python local dans le Naming Service + # + + clt.waitNS("/Containers/" + theComputer + "/FactoryServerPy") - - if "SUPERV" in liste_modules: + if with_container_superv: # # Lancement Container Supervision local @@ -295,11 +376,12 @@ def startSalome(): clt.waitNS("/Containers/" + theComputer + "/SuperVisionContainer") + # # Activation du GUI de Session Server # - - session.GetInterface() + + #session.GetInterface() end_time = os.times() print diff --git a/src/Loader/InquireServersQThread.cxx b/src/Loader/InquireServersQThread.cxx index 1102aa39a..39a7580d5 100644 --- a/src/Loader/InquireServersQThread.cxx +++ b/src/Loader/InquireServersQThread.cxx @@ -53,6 +53,7 @@ static QString addSlash( const QString& path ); InquireServersGUI::InquireServersGUI() : QVBox(0, "SFA splash", Qt::WDestructiveClose | Qt::WStyle_Customize | Qt::WStyle_NoBorder ) { + myGUI = false; myThread = new InquireServersQThread(this); // 1. Polish the appearance @@ -140,6 +141,7 @@ void InquireServersGUI::ClickOnCancel() { //it's necessary to stop asking servers myThread->stop(); + myGUI = false; //Also we should send QCloseEvent in order to close this widget (and remove from screen) //QThread::postEvent ( this, new QCloseEvent() ); qApp->exit(1); @@ -200,7 +202,7 @@ InquireServersQThread::InquireServersQThread( InquireServersGUI* r ) char* cenv; IsChecking = true; - myServersCount = 8; + myServersCount = 5; //how many times we should repeat attempts to get response from all needed for launching SALOME servers myRepeat = 30; // default value, user can change it by setting CSF_RepeatServerRequest env.variable cenv = getenv( "CSF_RepeatServerRequest" ); @@ -224,13 +226,22 @@ InquireServersQThread::InquireServersQThread( InquireServersGUI* r ) r->getArgs( _argc, &_argv); // NRI : Temporary solution for SuperVisionContainer - for ( int i=1; i<=_argc; i++) { - if (strcmp(_argv[i],"CPP")==0) + for ( int i=1; i<=(_argc-1); i++) { + if (strcmp(_argv[i],"CPP")==0) { myMessages[5] = str + "SALOME_Container FactoryServer" + "..."; - if (strcmp(_argv[i],"PYTHON")==0) + myServersCount++; + } + if (strcmp(_argv[i],"PYTHON")==0) { myMessages[6] = str + "SALOME_ContainerPy.py FactoryServerPy" + "..."; - if (strcmp(_argv[i],"SUPERV")==0) + myServersCount++; + } + if (strcmp(_argv[i],"SUPERV")==0) { myMessages[7] = str + "SALOME_Container SuperVisionContainer" + "..."; + myServersCount++; + } + if (strcmp(_argv[i],"GUI")==0) { + r->withGUI(true); + } } } @@ -238,9 +249,18 @@ void InquireServersQThread::run() { while (IsChecking) { - for (int i=1; i<=myServersCount; i++) + for (int i=1; i<=8; i++) { - if ( myMessages[i-1].isEmpty() ) continue; + if ( myMessages[i-1].isEmpty() ) { + if (i==8) { + IsChecking = false; + //myExitStatus should be 0 because all servers exist and work + myExitStatus = 0; + //we should send QCloseEvent in order to close this widget (and remove from screen) + QThread::postEvent ( receiver , new QCloseEvent() ); + } else + continue; + } QString *message = new QString(myMessages[i-1]); QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventLabel, message ) ); QThread::usleep(200000); @@ -249,7 +269,7 @@ while (IsChecking) if (result) { QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEvent, new int( i ) ) ); - if (i==myServersCount) + if (i==8) { IsChecking = false; //myExitStatus should be 0 because all servers exist and work diff --git a/src/Loader/InquireServersQThread.h b/src/Loader/InquireServersQThread.h index b67983b76..1a1a74c1e 100644 --- a/src/Loader/InquireServersQThread.h +++ b/src/Loader/InquireServersQThread.h @@ -94,6 +94,9 @@ public: void getArgs( int& _argc, char *** _argv); //return exit status: 0 - OK, >0 - BAD (some servers doesn't exists or user click cancel button) int getExitStatus(); + //launch IAPP + bool withGUI() { return myGUI; } + void withGUI(bool gui) { myGUI = gui; } protected: virtual void customEvent( QCustomEvent* ); @@ -104,6 +107,7 @@ private: QProgressBar* myPrgBar; //this string contains description of currently asked server QLabel* myLabel; + bool myGUI; private slots: diff --git a/src/Loader/SALOME_Session_Loader.cxx b/src/Loader/SALOME_Session_Loader.cxx index 3e529784c..e5a6c219d 100644 --- a/src/Loader/SALOME_Session_Loader.cxx +++ b/src/Loader/SALOME_Session_Loader.cxx @@ -40,6 +40,51 @@ int main(int argc, char **argv) if (myIS.getExitStatus()) exit(1); //VRVcd: T2.4 - Trace management improvement + if (myIS.withGUI()) { + try + { + CORBA::ORB_ptr orb = CORBA::ORB_init(argc,argv) ; + + SALOME_NamingService &NS = *SINGLETON_::Instance() ; + ASSERT(SINGLETON_::IsAlreadyExisting()) ; + NS.init_orb( orb ) ; + + CORBA::Object_var obj = NS.Resolve("/Kernel/Session"); + + SALOME::Session_var session = SALOME::Session::_narrow(obj) ; + ASSERT(! CORBA::is_nil(session)); + MESSAGE("SALOME::Session::_narrow(obj)"); + INFOS("Corba initialisation, Distant server"); + + // ------------------------------------------------------------- + + session->GetInterface() ; + + // ------------------------------------------------------------- + + orb->destroy() ; + } + catch (ServiceUnreachable&) + { + INFOS("Caught exception: Naming Service Unreachable"); + } + catch (CORBA::COMM_FAILURE&) + { + INFOS("Caught CORBA::SystemException CommFailure."); + } + catch (CORBA::SystemException&) + { + INFOS("Caught CORBA::SystemException."); + } + catch (CORBA::Exception&) + { + INFOS("Caught CORBA::Exception."); + } + catch (...) + { + INFOS("Caught unknown exception."); + } + } return 0 ; } -- 2.39.2