Salome HOME
PR: embedded container C++ & Python, debug
[modules/kernel.git] / src / Container / SALOME_Container_i.hxx
index 6f309c50c8302c1d91249d0562d18a7680b9e23c..a3840cfb615f83c6280ae1b89f432c02260f998d 100644 (file)
@@ -52,34 +52,66 @@ public:
                      PortableServer::POA_ptr poa,
                      char * containerName ,
                       int argc, char* argv[],
-                     bool regist = true,
-                     bool activ = true);
+                     bool activAndRegist = true,
+                     bool isServantAloneInProcess = true);
   virtual ~Engines_Container_i();
 
+  // --- CORBA methods
 
-  //! Launch a new container from the current container
-  Engines::Container_ptr start_impl(const char* ContainerName);
+  bool load_component_Library(const char* componentName);
+
+  Engines::Component_ptr
+  create_component_instance( const char* componentName,
+                            CORBA::Long studyId); // 0 for multiStudy
+
+  Engines::Component_ptr
+  find_component_instance( const char* registeredName,
+                          CORBA::Long studyId); // 0 for multiStudy
+
+  Engines::Component_ptr
+  load_impl(const char* nameToRegister,
+           const char* componentName);
 
-  //! Load component in current container
-  Engines::Component_ptr load_impl(const char* nameToRegister,
-                                  const char* componentName);
 
-  //! Unload component from current container
   void remove_impl(Engines::Component_ptr component_i);
   void finalize_removal();
+  void Shutdown();
 
+  char* getHostName();
+  CORBA::Long getPID();
   char* name();
-  char* machineName();
   void ping();
 
-  //! Kill current container
   bool Kill_impl() ;
 
-  char* getHostName();
-  CORBA::Long getPID();
+  //char* machineName();
+  //Engines::Component_ptr instance(const char* nameToRegister,
+  //                              const char* componentName);
+
+  // --- local C++ methods
+
+  Engines::Component_ptr
+  find_or_create_instance( std::string genericRegisterName,
+                          std::string componentLibraryName);
+
+  Engines::Component_ptr
+  createInstance(std::string genericRegisterName,
+                void *handle,
+                int studyId);
+
+  static bool isPythonContainer(const char* ContainerName);
+  static std::string BuildContainerNameForNS(const char *ContainerName,
+                                            const char *hostname);
+  static void decInstanceCnt(std::string genericRegisterName);
 
 protected:
 
+  static const char *_defaultContainerName;
+  static std::map<std::string, int> _cntInstances_map;
+  static std::map<std::string, void *> _library_map; // library names, loaded
+  static std::map<std::string, void *> _toRemove_map;// library names to remove
+  static omni_mutex _numInstanceMutex ; // lib and instance protection
+
   SALOME_NamingService *_NS ;
   std::string _library_path;
   std::string _containerName;
@@ -87,16 +119,14 @@ protected:
   PortableServer::POA_var _poa;
   PortableServer::ObjectId * _id ;
   int _numInstance ;
-  std::map<std::string, void *> handle_map ;
-  std::map<std::string, void *> remove_map ;
-  omni_mutex _numInstanceMutex ; // if several threads on the same object
+  std::map<std::string,Engines::Component_var> _listInstances_map;
 
   //private: 
 
-  int   _argc ;
+  int    _argc ;
   char** _argv ;
-  long _pid;
-
+  long   _pid;
+  bool   _isServantAloneInProcess;
 };
 
 #endif