+def startSalome(args, modules_list, modules_root_dir):
+ """Launch all SALOME servers requested by args"""
+ init_time = os.times()
+
+ if verbose(): print "startSalome ", args
+
+ #
+ # Set server launch command
+ #
+ if args.has_key('server_launch_mode'):
+ Server.set_server_launch_mode(args['server_launch_mode'])
+
+ #
+ # Wake up session option
+ #
+ if args['wake_up_session']:
+ if "OMNIORB_CONFIG" not in os.environ:
+ from salome_utils import generateFileName
+ omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
+ kwargs={}
+ if omniorbUserPath is not None:
+ kwargs["with_username"]=True
+
+ last_running_config = generateFileName(omniorbUserPath, prefix="omniORB",
+ suffix="last",
+ extension="cfg",
+ hidden=True,
+ **kwargs)
+ os.environ['OMNIORB_CONFIG'] = last_running_config
+ pass
+ pass
+
+ #
+ # Initialisation ORB and Naming Service
+ #
+
+ clt=orbmodule.client(args)
+
+ #
+ # Wake up session option
+ #
+ if args['wake_up_session']:
+ import Engines
+ import SALOME
+ import SALOMEDS
+ import SALOME_ModuleCatalog
+ import SALOME_Session_idl
+ session = clt.waitNS("/Kernel/Session",SALOME.Session)
+ status = session.GetStatSession()
+ if status.activeGUI:
+ from salome_utils import getPortNumber
+ port = getPortNumber()
+ msg = "Warning :"
+ msg += "\n"
+ msg += "Session GUI for port number %s is already active."%(port)
+ msg += "\n"
+ msg += "If you which to wake up another session,"
+ msg += "\n"
+ msg += "please use variable OMNIORB_CONFIG"
+ msg += "\n"
+ msg += "to get the correct session object in naming service."
+ sys.stdout.write(msg+"\n")
+ sys.stdout.flush()
+ return clt
+ session.GetInterface()
+ args["session_object"] = session
+ return clt
+
+ # Save Naming service port name into
+ # the file args["ns_port_log_file"]
+ if args.has_key('ns_port_log_file'):
+ omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
+ file_name = os.path.join(omniorbUserPath, args["ns_port_log_file"])
+ f = open(file_name, "w")
+ f.write(os.environ['NSPORT'])
+ f.close()
+
+ # Launch Logger Server (optional)
+ # and wait until it is registered in naming service
+ #
+
+ if args['logger']:
+ myServer=LoggerServer(args)
+ myServer.run()
+ clt.waitLogger("Logger")
+
+ # Notify Server launch
+ #
+
+ if sys.platform != "win32":
+ if verbose(): print "Notify Server to launch"
+
+ myServer=NotifyServer(args,modules_root_dir)
+ myServer.run()
+
+ # Launch Session Server (to show splash ASAP)
+ #
+
+ if args["gui"]:
+ mySessionServ = SessionServer(args,args['modules'],modules_root_dir)
+ mySessionServ.setpath(modules_list,modules_root_dir)
+ mySessionServ.run()
+
+ #
+ # Launch Registry Server,
+ # and wait until it is registered in naming service
+ #
+
+ if ('registry' not in args['embedded']) | (args["gui"] == 0) :
+ myServer=RegistryServer(args)
+ myServer.run()
+ if sys.platform == "win32":
+ clt.waitNS("/Registry")
+ else:
+ clt.waitNSPID("/Registry",myServer.PID)
+
+ #
+ # Launch Catalog Server,
+ # and wait until it is registered in naming service
+ #
+
+ if ('moduleCatalog' not in args['embedded']) | (args["gui"] == 0):
+ cataServer=CatalogServer(args)
+ cataServer.setpath(modules_list,modules_root_dir)
+ cataServer.run()
+ import SALOME_ModuleCatalog
+ if sys.platform == "win32":
+ clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog)
+ else:
+ clt.waitNSPID("/Kernel/ModulCatalog",cataServer.PID,SALOME_ModuleCatalog.ModuleCatalog)
+
+ #
+ # Launch SalomeDS Server,
+ # and wait until it is registered in naming service
+ #
+
+ #print "ARGS = ",args
+ if ('study' not in args['embedded']) | (args["gui"] == 0):
+ print "RunStudy"
+ myServer=SalomeDSServer(args)
+ myServer.run()
+ if sys.platform == "win32":
+ clt.waitNS("/myStudyManager")
+ else:
+ clt.waitNSPID("/myStudyManager",myServer.PID)
+
+ #
+ # Launch LauncherServer
+ #
+
+ myCmServer = LauncherServer(args)
+ myCmServer.setpath(modules_list,modules_root_dir)
+ myCmServer.run()
+
+ #
+ # Launch ConnectionManagerServer
+ #
+
+ myConnectionServer = ConnectionManagerServer(args)
+ myConnectionServer.run()
+
+
+ from Utils_Identity import getShortHostName
+
+ if os.getenv("HOSTNAME") == None:
+ if os.getenv("HOST") == None:
+ os.environ["HOSTNAME"]=getShortHostName()
+ else:
+ os.environ["HOSTNAME"]=os.getenv("HOST")
+
+ theComputer = getShortHostName()
+
+ #
+ # Launch local C++ Container (FactoryServer),
+ # and wait until it is registered in naming service
+ #
+
+ if ('cppContainer' in args['standalone']) | (args["gui"] == 0) :
+ myServer=ContainerCPPServer(args)
+ myServer.run()
+ if sys.platform == "win32":
+ clt.waitNS("/Containers/" + theComputer + "/FactoryServer")
+ else:
+ clt.waitNSPID("/Containers/" + theComputer + "/FactoryServer",myServer.PID)
+
+ #
+ # Launch local Python Container (FactoryServerPy),
+ # and wait until it is registered in naming service
+ #
+
+ if 'pyContainer' in args['standalone']:
+ raise Exception('Python containers no longer supported')
+
+ #
+ # Wait until Session Server is registered in naming service
+ #
+
+ if args["gui"]:
+##----------------
+ import Engines
+ import SALOME
+ import SALOMEDS
+ import SALOME_ModuleCatalog
+ import SALOME_Session_idl
+ if sys.platform == "win32":
+ session=clt.waitNS("/Kernel/Session",SALOME.Session)
+ else:
+ session=clt.waitNSPID("/Kernel/Session",mySessionServ.PID,SALOME.Session)
+ args["session_object"] = session
+ end_time = os.times()
+ if verbose(): print
+ print "Start SALOME, elapsed time : %5.1f seconds"% (end_time[4]
+ - init_time[4])
+
+ # ASV start GUI without Loader
+ #if args['gui']:
+ # session.GetInterface()
+
+ #
+ # additionnal external python interpreters
+ #
+ nbaddi=0
+
+ try:
+ if 'interp' in args:
+ nbaddi = args['interp']
+ except:
+ import traceback
+ traceback.print_exc()
+ print "-------------------------------------------------------------"
+ print "-- to get an external python interpreter:runSalome --interp=1"
+ print "-------------------------------------------------------------"
+
+ if verbose(): print "additional external python interpreters: ", nbaddi
+ if nbaddi:
+ for i in range(nbaddi):
+ print "i=",i
+ anInterp=InterpServer(args)
+ anInterp.run()
+
+ # set PYTHONINSPECT variable (python interpreter in interactive mode)
+ if args['pinter']:
+ os.environ["PYTHONINSPECT"]="1"
+ try:
+ import readline
+ except ImportError:
+ pass
+
+ return clt