summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/ServerRegistryI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2002-08-22 22:52:31 +0000
committerBenoit Foucher <benoit@zeroc.com>2002-08-22 22:52:31 +0000
commit8ee8c08018e63d5b5b6c505490e27dcb3ef766db (patch)
tree4f888dacbe96952a910eb969a5428aba67030e7b /cpp/src/IcePack/ServerRegistryI.cpp
parentbug fix for identity reuse in add() (diff)
downloadice-8ee8c08018e63d5b5b6c505490e27dcb3ef766db.tar.bz2
ice-8ee8c08018e63d5b5b6c505490e27dcb3ef766db.tar.xz
ice-8ee8c08018e63d5b5b6c505490e27dcb3ef766db.zip
Added support for IcePack node and re-factored many things in IcePack.
Diffstat (limited to 'cpp/src/IcePack/ServerRegistryI.cpp')
-rw-r--r--cpp/src/IcePack/ServerRegistryI.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/cpp/src/IcePack/ServerRegistryI.cpp b/cpp/src/IcePack/ServerRegistryI.cpp
new file mode 100644
index 00000000000..03745c813a1
--- /dev/null
+++ b/cpp/src/IcePack/ServerRegistryI.cpp
@@ -0,0 +1,112 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// Mutable Realms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <IcePack/ServerRegistryI.h>
+#include <IcePack/TraceLevels.h>
+
+using namespace std;
+using namespace IcePack;
+
+IcePack::ServerRegistryI::ServerRegistryI(const Freeze::DBPtr& db, const TraceLevelsPtr& traceLevels) :
+ _dict(db),
+ _traceLevels(traceLevels)
+{
+}
+
+void
+IcePack::ServerRegistryI::add(const string& name, const ServerPrx& server, const Ice::Current&)
+{
+ StringObjectProxyDict::iterator p = _dict.find(name);
+ if(p != _dict.end())
+ {
+ try
+ {
+ p->second->ice_ping();
+ }
+ catch(const Ice::ObjectNotExistException&)
+ {
+ p.set(server);
+
+ if(_traceLevels->serverRegistry > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->serverRegistryCat);
+ out << "added server `" << name << "'";
+ }
+
+ return;
+ }
+ catch(const Ice::LocalException&)
+ {
+ }
+ throw ServerExistsException();
+ }
+
+ _dict.insert(make_pair(name, server));
+
+ if(_traceLevels->serverRegistry > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->serverRegistryCat);
+ out << "added server `" << name << "'";
+ }
+}
+
+void
+IcePack::ServerRegistryI::remove(const string& name, const Ice::Current&)
+{
+ StringObjectProxyDict::iterator p = _dict.find(name);
+ if(p == _dict.end())
+ {
+ throw ServerNotExistException();
+ }
+
+ _dict.erase(p);
+
+ if(_traceLevels->serverRegistry > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->serverRegistryCat);
+ out << "removed server `" << name << "'";
+ }
+}
+
+ServerPrx
+IcePack::ServerRegistryI::findByName(const string& name, const Ice::Current&)
+{
+ StringObjectProxyDict::iterator p = _dict.find(name);
+ if(p != _dict.end())
+ {
+ try
+ {
+ return ServerPrx::checkedCast(p->second);
+ }
+ catch(const Ice::ObjectNotExistException&)
+ {
+ _dict.erase(p);
+ }
+ catch(const Ice::LocalException&)
+ {
+ return ServerPrx::uncheckedCast(p->second);
+ }
+ }
+ throw ServerNotExistException();
+}
+
+Ice::StringSeq
+IcePack::ServerRegistryI::getAll(const Ice::Current&) const
+{
+ Ice::StringSeq names;
+ names.reserve(_dict.size());
+
+ for(StringObjectProxyDict::const_iterator p = _dict.begin(); p != _dict.end(); ++p)
+ {
+ names.push_back(p->first);
+ }
+
+ return names;
+}