summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/demo/Ice/session/HelloSessionManagerI.cpp5
-rwxr-xr-xcpp/demo/Ice/session/HelloSessionManagerI.h3
-rw-r--r--cpp/demo/Ice/session/Server.cpp5
-rwxr-xr-xcpp/demo/Ice/session/SessionManagerI.cpp24
-rwxr-xr-xcpp/demo/Ice/session/SessionManagerI.h2
5 files changed, 30 insertions, 9 deletions
diff --git a/cpp/demo/Ice/session/HelloSessionManagerI.cpp b/cpp/demo/Ice/session/HelloSessionManagerI.cpp
index 7b7bcda8d3c..2cd5f68a05c 100755
--- a/cpp/demo/Ice/session/HelloSessionManagerI.cpp
+++ b/cpp/demo/Ice/session/HelloSessionManagerI.cpp
@@ -14,6 +14,11 @@
using namespace std;
using namespace Demo;
+HelloSessionManagerI::HelloSessionManagerI(const Ice::CommunicatorPtr& communicator) :
+ SessionManagerI(communicator)
+{
+}
+
SessionPrx
HelloSessionManagerI::create(const Ice::Current& c)
{
diff --git a/cpp/demo/Ice/session/HelloSessionManagerI.h b/cpp/demo/Ice/session/HelloSessionManagerI.h
index 5ac5badc408..dda0f8adcd0 100755
--- a/cpp/demo/Ice/session/HelloSessionManagerI.h
+++ b/cpp/demo/Ice/session/HelloSessionManagerI.h
@@ -15,6 +15,9 @@
class HelloSessionManagerI : public SessionManagerI
{
public:
+
+ HelloSessionManagerI(const Ice::CommunicatorPtr&);
+
virtual ::Demo::SessionPrx create(const ::Ice::Current&);
};
diff --git a/cpp/demo/Ice/session/Server.cpp b/cpp/demo/Ice/session/Server.cpp
index 156ce0a148f..5047d977f35 100644
--- a/cpp/demo/Ice/session/Server.cpp
+++ b/cpp/demo/Ice/session/Server.cpp
@@ -17,9 +17,8 @@ int
run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
{
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("SessionManager");
- SessionManagerIPtr manager = new HelloSessionManagerI;
- Ice::ObjectPtr object = new HelloSessionManagerI;
- adapter->add(object, Ice::stringToIdentity("SessionManager"));
+ SessionManagerIPtr manager = new HelloSessionManagerI(communicator);
+ adapter->add(manager, Ice::stringToIdentity("SessionManager"));
adapter->activate();
communicator->waitForShutdown();
manager->destroy();
diff --git a/cpp/demo/Ice/session/SessionManagerI.cpp b/cpp/demo/Ice/session/SessionManagerI.cpp
index 076417a95c5..331dba1d4ca 100755
--- a/cpp/demo/Ice/session/SessionManagerI.cpp
+++ b/cpp/demo/Ice/session/SessionManagerI.cpp
@@ -10,8 +10,6 @@
#include <Ice/Ice.h>
#include <HelloSessionManagerI.h>
-#include <HelloSession.h>
-
using namespace std;
using namespace Demo;
@@ -49,9 +47,10 @@ ReapThread::destroy()
notify();
}
-SessionManagerI::SessionManagerI() :
+SessionManagerI::SessionManagerI(const Ice::CommunicatorPtr& communicator) :
_timeout(IceUtil::Time::seconds(10)),
_reapThread(new ReapThread(this, _timeout)),
+ _logger(communicator->getLogger()),
_destroy(false)
{
_reapThread->start();
@@ -60,6 +59,7 @@ SessionManagerI::SessionManagerI() :
SessionManagerI::~SessionManagerI()
{
assert(_sessions.size() == 0);
+ assert(_destroy);
}
void
@@ -102,6 +102,9 @@ SessionManagerI::add(const SessionPrx& session)
{
Lock sync(*this);
+ Ice::Trace trace(_logger, "SessionManagerI");
+ trace << "add: " << Ice::identityToString(session->ice_getIdentity());
+
assert(!_destroy);
_sessions.insert(make_pair(session->ice_getIdentity(), make_pair(IceUtil::Time::now(), session)));
}
@@ -115,9 +118,18 @@ SessionManagerI::remove(const Ice::Identity& id)
map<Ice::Identity, pair< IceUtil::Time, SessionPrx> >::iterator p = _sessions.find(id);
if(p != _sessions.end())
{
- p->second.second->destroyed();
+ try
+ {
+ p->second.second->destroyed();
+ }
+ catch(const Ice::Exception&)
+ {
+ }
_sessions.erase(p);
}
+
+ Ice::Trace trace(_logger, "SessionManagerI");
+ trace << "SessionManagerI::remove: " << Ice::identityToString(id);
}
void
@@ -148,6 +160,9 @@ SessionManagerI::reap()
{
if((now - p->second.first) > _timeout)
{
+ Ice::Trace trace(_logger, "SessionManagerI");
+ trace << "SessionManagerI::reaping: " << Ice::identityToString(p->first);
+
try
{
p->second.second->destroyed();
@@ -165,4 +180,3 @@ SessionManagerI::reap()
}
}
}
-
diff --git a/cpp/demo/Ice/session/SessionManagerI.h b/cpp/demo/Ice/session/SessionManagerI.h
index fa6d58f0f7f..f6f8eee2308 100755
--- a/cpp/demo/Ice/session/SessionManagerI.h
+++ b/cpp/demo/Ice/session/SessionManagerI.h
@@ -43,7 +43,7 @@ class SessionManagerI : public ::Demo::SessionManager, public IceUtil::Mutex
{
public:
- SessionManagerI();
+ SessionManagerI(const Ice::CommunicatorPtr&);
~SessionManagerI();
virtual ::Demo::SessionPrx create(const ::Ice::Current&) = 0;