1 // Copyright (C) 2012-2015 CEA/DEN, EDF R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (EDF R&D)
21 #include "YACSEvalSession.hxx"
22 #include "Exception.hxx"
26 const char YACSEvalSession::KERNEL_ROOT_DIR[]="KERNEL_ROOT_DIR";
28 const char YACSEvalSession::CORBA_CONFIG_ENV_VAR_NAME[]="OMNIORB_CONFIG";
30 YACSEvalSession::YACSEvalSession():_isLaunched(false),_port(-1),_salomeInstanceModule(0),_salomeInstance(0)
32 if(!Py_IsInitialized())
35 _salomeInstanceModule=PyImport_ImportModule(const_cast<char *>("salome_instance"));
38 YACSEvalSession::~YACSEvalSession()
42 PyObject *terminateSession(PyObject_GetAttrString(_salomeInstance,const_cast<char *>("stop")));//new
43 PyObject *res(PyObject_CallObject(terminateSession,0));
45 Py_XDECREF(terminateSession);
47 Py_XDECREF(_salomeInstance);
48 Py_XDECREF(_salomeInstanceModule);
51 void YACSEvalSession::launch()
55 PyObject *salomeInstance(PyObject_GetAttrString(_salomeInstanceModule,const_cast<char *>("SalomeInstance")));//new
56 PyObject *startMeth(PyObject_GetAttrString(salomeInstance,const_cast<char *>("start")));
57 Py_XDECREF(salomeInstance);
58 PyObject *myArgs(PyTuple_New(0));//new
59 PyObject *myKWArgs(PyDict_New());//new
60 PyDict_SetItemString(myKWArgs,"shutdown_servers",Py_True);//Py_True ref not stolen
61 _salomeInstance=PyObject_Call(startMeth,myArgs,myKWArgs);//new
62 PyObject *getPortMeth(PyObject_GetAttrString(_salomeInstance,const_cast<char *>("get_port")));//new
63 PyObject *portPy(PyObject_CallObject(getPortMeth,0));//new
64 _port=PyInt_AsLong(portPy);
66 Py_XDECREF(getPortMeth);
70 PyObject *osPy(PyImport_ImportModule(const_cast<char *>("os")));//new
71 PyObject *environPy(PyObject_GetAttrString(osPy,const_cast<char *>("environ")));//new
72 PyObject *corbaConfigStr(PyString_FromString(const_cast<char *>(CORBA_CONFIG_ENV_VAR_NAME)));//new
73 PyObject *corbaConfigFileNamePy(PyObject_GetItem(environPy,corbaConfigStr));//new
74 _corbaConfigFileName=PyString_AsString(corbaConfigFileNamePy);
75 Py_XDECREF(corbaConfigFileNamePy);
76 Py_XDECREF(corbaConfigStr);
77 Py_XDECREF(environPy);
82 void YACSEvalSession::checkLaunched() const
85 throw YACS::Exception("YACSEvalSession::checkLaunched : not launched !");
88 int YACSEvalSession::getPort() const
94 std::string YACSEvalSession::getCorbaConfigFileName() const
97 return _corbaConfigFileName;
100 std::string YACSEvalSession::GetPathToAdd()
103 PyObject *osPy(PyImport_ImportModule(const_cast<char *>("os")));//new
104 PyObject *kernelRootDir(0);// os.environ["KERNEL_ROOT_DIR"]
106 PyObject *environPy(PyObject_GetAttrString(osPy,const_cast<char *>("environ")));//new
107 PyObject *kernelRootDirStr(PyString_FromString(const_cast<char *>(KERNEL_ROOT_DIR)));//new
108 kernelRootDir=PyObject_GetItem(environPy,kernelRootDirStr);//new
109 Py_XDECREF(kernelRootDirStr);
110 Py_XDECREF(environPy);
113 PyObject *pathPy(PyObject_GetAttrString(osPy,const_cast<char *>("path")));//new
114 PyObject *joinPy(PyObject_GetAttrString(pathPy,const_cast<char *>("join")));//new
115 PyObject *myArgs(PyTuple_New(4));
116 Py_XINCREF(kernelRootDir); PyTuple_SetItem(myArgs,0,kernelRootDir);
117 PyTuple_SetItem(myArgs,1,PyString_FromString(const_cast<char *>("bin")));
118 PyTuple_SetItem(myArgs,2,PyString_FromString(const_cast<char *>("salome")));
119 PyTuple_SetItem(myArgs,3,PyString_FromString(const_cast<char *>("appliskel")));
120 PyObject *res(PyObject_CallObject(joinPy,myArgs));
121 ret=PyString_AsString(res);
127 Py_XDECREF(kernelRootDir);