X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOMESDS%2FSALOMESDS_DataScopeServer.hxx;h=c02210249392cc52117af2ad929c55e3bbb34c23;hb=2252fa5809de4580de842bf8bfdc36f1644c36ae;hp=e06ec8b22932132fa0eb7fd36f098bc9a7829d6e;hpb=dc440ee6296657e05317713c6f7a920ecaef442b;p=modules%2Fkernel.git diff --git a/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx b/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx index e06ec8b22..c02210249 100644 --- a/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx +++ b/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx @@ -24,6 +24,7 @@ #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SALOME_SDS) +#include "SALOMESDS_RequestSwitcher.hxx" #include "SALOMESDS_RefCountServ.hxx" #include "SALOMESDS_AutoRefCountPtr.hxx" #include "SALOMESDS_BasicDataServer.hxx" @@ -45,17 +46,23 @@ namespace SALOMESDS private: CORBA::ORB_var _orb; }; + + class DataScopeServerTransaction; - class SALOMESDS_EXPORT RequestSwitcher : public POA_SALOME::RequestSwitcher, public POAHolder + /*! + * Servant activated by a specific POA (single thread) having itself its specific POA_manager. + * This class is able to hold/active the default POA_manager shared by other POA than this. + */ + class SALOMESDS_EXPORT RequestSwitcher : public RequestSwitcherBase, public virtual POA_SALOME::RequestSwitcher { public: - RequestSwitcher(CORBA::ORB_ptr orb); - void holdRequests(); - void activeRequests(); - PortableServer::POA_var getPOA() const { return _poa_for_request_control; } + RequestSwitcher(CORBA::ORB_ptr orb, DataScopeServerTransaction *ds); + SALOME::StringVec *listVars(); + SALOME::ByteVec *fetchSerializedContent(const char *varName); + void fetchAndGetAccessOfVar(const char *varName, CORBA::String_out access, SALOME::ByteVec_out data); private: - PortableServer::POA_var _poa_for_request_control; - PortableServer::POAManager_var _poa_manager_under_control; + //! handle on its creator to give access to services when _poa_manager_under_control is in hold mode. + DataScopeServerTransaction *_ds; }; class KeyWaiter; @@ -76,7 +83,7 @@ namespace SALOMESDS CORBA::Boolean shutdownIfNotHostedByDSM(SALOME::DataScopeKiller_out killer); SALOME::ByteVec *fetchSerializedContent(const char *varName); SALOME::SeqOfByteVec *getAllKeysOfVarWithTypeDict(const char *varName); - SALOME::RequestSwitcher_ptr getRequestSwitcher(); + void takeANap(CORBA::Double napDurationInSec); public: ~DataScopeServerBase(); BasicDataServer *retrieveVarInternal2(const std::string& varName); @@ -93,6 +100,7 @@ namespace SALOMESDS static std::string BuildTmpVarNameFrom(const std::string& varName); public: std::vector< std::string> getAllVarNames() const; + bool isExistingVar(const std::string& varName) const; void checkNotAlreadyExistingVar(const std::string& varName) const; void checkExistingVar(const std::string& varName) const; PickelizedPyObjServer *checkVarExistingAndDict(const std::string& varName); @@ -113,7 +121,6 @@ namespace SALOMESDS std::string _name; std::list< std::pair< SALOME::BasicDataServer_var, BasicDataServer * > > _vars; SALOME::DataScopeKiller_var _killer; - AutoServantPtr _rs; static std::size_t COUNTER; }; @@ -137,6 +144,7 @@ namespace SALOMESDS ~DataScopeServerTransaction(); void createRdOnlyVarInternal(const std::string& varName, const SALOME::ByteVec& constValue); void createRdExtVarInternal(const std::string& varName, const SALOME::ByteVec& constValue); + void createRdExtVarFreeStyleInternal(const std::string& varName, const SALOME::ByteVec& constValue, std::vector&& sha1); void createRdExtInitVarInternal(const std::string& varName, const SALOME::ByteVec& constValue); void createRdWrVarInternal(const std::string& varName, const SALOME::ByteVec& constValue); PortableServer::POA_var getPOA4KeyWaiter() const { return _poa_for_key_waiter; } @@ -150,6 +158,7 @@ namespace SALOMESDS void fetchAndGetAccessOfVar(const char *varName, CORBA::String_out access, SALOME::ByteVec_out data); SALOME::Transaction_ptr createRdOnlyVarTransac(const char *varName, const SALOME::ByteVec& constValue); SALOME::Transaction_ptr createRdExtVarTransac(const char *varName, const SALOME::ByteVec& constValue); + SALOME::Transaction_ptr createRdExtVarFreeStyleTransac(const char *varName, const SALOME::ByteVec& constValue, const SALOME::ByteVec& sha1); SALOME::Transaction_ptr createRdExtInitVarTransac(const char *varName, const SALOME::ByteVec& constValue); SALOME::Transaction_ptr createRdWrVarTransac(const char *varName, const SALOME::ByteVec& constValue); SALOME::Transaction_ptr addKeyValueInVarHard(const char *varName, const SALOME::ByteVec& key, const SALOME::ByteVec& value); @@ -161,11 +170,13 @@ namespace SALOMESDS SALOME::KeyWaiter_ptr waitForKeyInVar(const char *varName, const SALOME::ByteVec& keyVal); SALOME::KeyWaiter_ptr waitForKeyInVarAndKillIt(const char *varName, const SALOME::ByteVec& keyVal, SALOME::Transaction_out transac); void atomicApply(const SALOME::ListOfTransaction& transactions); + SALOME::RequestSwitcher_ptr getRequestSwitcher(); private: PyObject *getPyCmpFunc(); private: PortableServer::POA_var _poa_for_key_waiter; std::list< KeyWaiter * > _waiting_keys; + AutoServantPtr _rs; }; }