1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE
4 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
25 # \brief Module that provides a client for %SALOME
30 from nameserver import NamingServer
31 from omniORB import CORBA
32 from launchConfigureParser import verbose
34 # Import the stubs for the Naming service
37 # -----------------------------------------------------------------------------
40 """Client for SALOME"""
42 def __init__(self,args=None):
45 if args is not None and 'launcher' in args:
46 pos = args['launcher'].find(":")
48 machine = args['launcher'][0:pos]
49 port = args['launcher'][pos+1:]
50 sys.argv.append('-ORBInitRef')
51 sys.argv.append("NameService=corbaname::" + machine + ":" + port)
52 print("Connect to naming service on machine: "+machine+" port: "+port)
53 self.orb=CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
55 # Initialise the Naming Service
56 self.initNS(args or {})
58 # --------------------------------------------------------------------------
60 def initNS(self,args):
61 # Obtain a reference to the root naming context
62 obj = self.orb.resolve_initial_references("NameService")
64 self.rootContext = obj._narrow(CosNaming.NamingContext)
66 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
67 self.rootContext = None
68 if verbose(): print("Launch Naming Service++", end=' ')
70 # On lance le Naming Server (doit etre dans le PATH)
72 if args != None and 'wake_up_session' in args and args['wake_up_session']:
76 NamingServer(args).run()
78 print("Searching Naming Service ", end=' ')
84 obj = self.orb.resolve_initial_references("NameService")
85 self.rootContext = obj._narrow(CosNaming.NamingContext)
87 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
88 self.rootContext = None
93 if self.rootContext is None:
94 print("Failed to narrow the root naming context")
96 print(" found in %s seconds " % ((ncount-1)*delta))
98 # --------------------------------------------------------------------------
100 def showNScontext(self,context,dec=''):
102 print("[NS] No context")
107 _,bi = context.list(0)
111 for s in b.binding_name :
112 print("%s%s.%s" %(dec,s.id,s.kind))
114 obj = context.resolve([s])
115 scontext = obj._narrow(CosNaming.NamingContext)
116 self.showNScontext(scontext,dec=dec+' ')
119 # --------------------------------------------------------------------------
122 """ Show the content of SALOME naming service """
123 self.showNScontext(self.rootContext)
125 # --------------------------------------------------------------------------
127 def Resolve(self, Path):
128 resolve_path = Path.split('/')
129 if resolve_path[0] == '': del resolve_path[0]
130 dir_path = resolve_path[:-1]
133 context_name.append(CosNaming.NameComponent(e,"dir"))
134 context_name.append(CosNaming.NameComponent(resolve_path[-1],"object"))
137 obj = self.rootContext.resolve(context_name)
138 except CosNaming.NamingContext.NotFound as ex:
140 except CosNaming.NamingContext.InvalidName as ex:
142 except CosNaming.NamingContext.CannotProceed as ex:
144 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
148 # --------------------------------------------------------------------------
150 def waitNS(self,name,typobj=None,maxcount=240):
153 print("Searching %s in Naming Service " % name, end=' ')
156 if count > maxcount : raise RuntimeError("Impossible de trouver %s" % name)
157 obj = self.Resolve(name)
159 print(" found in %s seconds " % ((count-1)*delta))
162 sys.stdout.write('+')
166 if typobj is None:return obj
168 nobj = obj._narrow(typobj)
170 print("%s exists but is not a %s" % (name,typobj))
173 if sys.platform != "win32":
174 def waitNSPID(self, theName, thePID, theTypObj = None):
178 print("Searching %s in Naming Service " % theName, end=' ')
183 raise RuntimeError("Process %d for %s not found" % (thePID,theName))
185 anObj = self.Resolve(theName)
187 print(" found in %s seconds " % ((aCount-1)*aDelta))
190 sys.stdout.write('+')
196 if theTypObj is None:
199 anObject = anObj._narrow(theTypObj)
201 print("%s exists but is not a %s" % (theName,theTypObj))
205 # --------------------------------------------------------------------------
207 def ResolveLogger(self, name):
209 context_name.append(CosNaming.NameComponent(name,""))
212 obj = self.rootContext.resolve(context_name)
213 except CosNaming.NamingContext.NotFound as ex:
215 except CosNaming.NamingContext.InvalidName as ex:
217 except CosNaming.NamingContext.CannotProceed as ex:
219 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
223 # --------------------------------------------------------------------------
225 def waitLogger(self,name,typobj=None,maxcount=40):
228 print("Searching %s in Naming Service " % name, end=' ')
231 if count > maxcount : raise RuntimeError("Impossible de trouver %s" % name)
232 obj = self.ResolveLogger(name)
234 print(" found in %s seconds " % ((count-1)*delta))
237 sys.stdout.write('+')
241 if typobj is None:return obj
243 nobj = obj._narrow(typobj)
245 print("%s exists but is not a %s" % (name,typobj))