Archived
This forum has been archived. Please start a new discussion on GitHub.
Glacier2 destroy session question
xdm
La Coruña, Spain
in Help Center
Hi i have a question regards Glacier2 sessions
When i call router->destroySession();
glacier automatic remove the session servant from the adapter, or must my code remove the Session servant?
I observer that ClientSessionI destructor is not automatic called in my case.
I using Ice-3.2 release version | gentoo linux gcc-4.6
Here is my SessionManager implementation.
Code for login
Code for logout
When i call router->destroySession();
glacier automatic remove the session servant from the adapter, or must my code remove the Session servant?
I observer that ClientSessionI destructor is not automatic called in my case.
I using Ice-3.2 release version | gentoo linux gcc-4.6
Here is my SessionManager implementation.
Glacier2::SessionPrx Oz::SessionManagerI::create(const std::string& login, const Glacier2::SessionControlPrx& sessionControl,const Ice::Current& current){ Glacier2::SessionPrx sessionPx = 0; try{ Ice::Identity sessionId; sessionId.category= "_" + login; sessionId.name = IceUtil::generateUUID(); QString userId = login.c_str(); QStringList userIdTokens = userId.split("@"); std::string userName = userIdTokens[0].toUtf8().data(); std::string domainName = userIdTokens[1].toUtf8().data(); Oz::Domains::IDomainPrx domainPx = _domainServer->getDomain(domainName); Oz::Domains::IUserPrx userPx = domainPx->getUser(userName); ClientSessionIPtr session = new ClientSessionI(sessionId,userPx,userName,domainPx,domainName); sessionPx = Glacier2::SessionPrx::uncheckedCast(current.adapter->add(session,sessionId)); }catch(const std::exception& std_e){ std::cerr<<"file: "<<__FILE__<<" line: "<<__LINE__<<" "<<std_e.what()<<std::endl; } return sessionPx; }
Code for login
void Oz::Ui::Application::login(const QString& user,const QString& password){ try{ Glacier2::RouterPrx router = getRouter(); _session = IClientSessionPrx::uncheckedCast(router->createSession(user.toUtf8().data(),password.toUtf8().data())); _adapter = communicator()->createObjectAdapter("Ui.Client"); _adapter->activate(); loginSuccess(); }catch(const Glacier2::PermissionDeniedException& glacier2_e){ showError(QString(glacier2_e.reason.c_str())); }catch(const Ice::Exception& ice_e){ std::ostringstream os; os << ice_e; showError(QString(os.str().c_str())); } }
Code for logout
void Oz::Ui::Application::logout(){ try{ _router->destroySession(); }catch(const Ice::ConnectionLostException& connectionlost_e){ //Expected when destroy session. _adapter->destroy(); _session = 0; _mainWindow->logoutSuccess(); }catch(const Ice::Exception& ice_e){ showError(QString(ice_e.what())); } }
0
Comments
-
You need to remove the session servant from the adapter. You can do this from the session destroy() method (which is called by Glacier2 when your client calls router->destroySession()).
See the demo from the demo/Glacier2/callback directory for an example.
Cheers,
Benoit.0