X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2Forbmodule.py;h=dc280ce8169eaa1a2036c6092c74e7cb0b888362;hb=32cb9f7cf3440f3c495de75632b4cefbd23298a2;hp=52012f91a0ed5c1cdd83c52954fd47cdd6f2729a;hpb=e6bfea36374791cd31c274a2f97df90dc60ddaf3;p=modules%2Fkernel.git diff --git a/bin/orbmodule.py b/bin/orbmodule.py index 52012f91a..dc280ce81 100755 --- a/bin/orbmodule.py +++ b/bin/orbmodule.py @@ -1,80 +1,75 @@ -# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG -# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# +# # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# +# + +## @package orbmodule +# \brief Module that provides a client for %SALOME +# + import sys,os,time import string +from nameserver import * from omniORB import CORBA +from launchConfigureParser import verbose # Import the stubs for the Naming service import CosNaming # ----------------------------------------------------------------------------- -class Server: - XTERM="/usr/bin/X11/xterm -iconic -e " - CMD="" - - def run(self): - commande=self.XTERM+self.CMD - print commande - ier=os.system(commande) - if ier:print "Commande failed" - -# ----------------------------------------------------------------------------- - -class NamingServer(Server): - XTERM="" - USER=os.getenv('USER') - if USER is None: - USER='anonymous' - os.system("mkdir -m 777 -p /tmp/logs") - LOGDIR="/tmp/logs/" + USER - os.system("mkdir -m 777 -p " + LOGDIR) - CMD="runNS.sh > " + LOGDIR + "/salomeNS.log 2>&1" - -# ----------------------------------------------------------------------------- - class client: + """Client for SALOME""" - def __init__(self): + def __init__(self,args=None): # Initialise the ORB self.orb=CORBA.ORB_init(sys.argv, CORBA.ORB_ID) + # Initialise the Naming Service - self.initNS() + self.initNS(args or {}) # -------------------------------------------------------------------------- - def initNS(self): + def initNS(self,args): # Obtain a reference to the root naming context - obj = self.orb.resolve_initial_references("NameService") + obj = self.orb.resolve_initial_references("NameService") try: self.rootContext = obj._narrow(CosNaming.NamingContext) return except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE): self.rootContext = None - print "Lancement du Naming Service", - + if verbose(): print "Launch Naming Service++", + # On lance le Naming Server (doit etre dans le PATH) - NamingServer().run() + test = True + if args['wake_up_session']: + test = False + pass + if test: + NamingServer(args).run() + pass print "Searching Naming Service ", ncount=0 delta=0.1 - while(ncount < 10): + while(ncount < 100): ncount += 1 try: obj = self.orb.resolve_initial_references("NameService") @@ -94,6 +89,12 @@ class client: # -------------------------------------------------------------------------- def showNScontext(self,context,dec=''): + if not context: + print "[NS] No context" + return + else: + print context + bl,bi=context.list(0) if bi is not None: ok,b=bi.next_one() @@ -109,7 +110,7 @@ class client: # -------------------------------------------------------------------------- def showNS(self): - """ Show the content of NS""" + """ Show the content of SALOME naming service """ self.showNScontext(self.rootContext) # -------------------------------------------------------------------------- @@ -137,41 +138,43 @@ class client: # -------------------------------------------------------------------------- - def waitNS(self,name,typobj=None,maxcount=60): + def waitNS(self,name,typobj=None,maxcount=240): count=0 delta=0.5 print "Searching %s in Naming Service " % name, while(1): count += 1 - if count > maxcount : raise "Impossible de trouver %s" % name + if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name obj=self.Resolve(name) - if obj : + if obj : print " found in %s seconds " % ((count-1)*delta) break else: sys.stdout.write('+') sys.stdout.flush() time.sleep(delta) - + if typobj is None:return obj nobj = obj._narrow(typobj) if nobj is None: print "%s exists but is not a %s" % (name,typobj) return nobj - def waitNSPID(self, theName, thePID, theTypObj = None): + + if sys.platform != "win32": + def waitNSPID(self, theName, thePID, theTypObj = None): aCount = 0 aDelta = 0.5 anObj = None print "Searching %s in Naming Service " % theName, while(1): try: - aPid, aStatus = os.waitpid(thePID,os.WNOHANG) - except Exception, exc: - raise "Impossible de trouver %s" % theName + os.kill(thePID,0) + except: + raise RuntimeError, "Process %d for %s not found" % (thePID,theName) aCount += 1 anObj = self.Resolve(theName) - if anObj: + if anObj: print " found in %s seconds " % ((aCount-1)*aDelta) break else: @@ -180,7 +183,7 @@ class client: time.sleep(aDelta) pass pass - + if theTypObj is None: return anObj @@ -207,7 +210,7 @@ class client: except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE): obj = None return obj - + # -------------------------------------------------------------------------- def waitLogger(self,name,typobj=None,maxcount=40): @@ -216,20 +219,19 @@ class client: print "Searching %s in Naming Service " % name, while(1): count += 1 - if count > maxcount : raise "Impossible de trouver %s" % name + if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name obj=self.ResolveLogger(name) - if obj : + if obj : print " found in %s seconds " % ((count-1)*delta) break else: sys.stdout.write('+') sys.stdout.flush() time.sleep(delta) - + if typobj is None:return obj nobj = obj._narrow(typobj) if nobj is None: print "%s exists but is not a %s" % (name,typobj) return nobj -