summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/AdapterRegistryI.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/AdapterRegistryI.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/AdapterRegistryI.cpp')
-rw-r--r--cpp/src/IcePack/AdapterRegistryI.cpp111
1 files changed, 111 insertions, 0 deletions
diff --git a/cpp/src/IcePack/AdapterRegistryI.cpp b/cpp/src/IcePack/AdapterRegistryI.cpp
new file mode 100644
index 00000000000..dc1884a99ce
--- /dev/null
+++ b/cpp/src/IcePack/AdapterRegistryI.cpp
@@ -0,0 +1,111 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// Mutable Realms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <IcePack/AdapterRegistryI.h>
+#include <IcePack/TraceLevels.h>
+
+using namespace std;
+using namespace IcePack;
+
+IcePack::AdapterRegistryI::AdapterRegistryI(const Freeze::DBPtr& db, const TraceLevelsPtr& traceLevels) :
+ _dict(db),
+ _traceLevels(traceLevels)
+{
+}
+
+void
+IcePack::AdapterRegistryI::add(const string& name, const AdapterPrx& adapter, const Ice::Current&)
+{
+ StringObjectProxyDict::iterator p = _dict.find(name);
+ if(p != _dict.end())
+ {
+ try
+ {
+ p->second->ice_ping();
+ }
+ catch(const Ice::ObjectNotExistException&)
+ {
+ p.set(adapter);
+
+ if(_traceLevels->adapterRegistry > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterRegistryCat);
+ out << "added adapter `" << name << "'";
+ }
+
+ return;
+ }
+ catch(const Ice::LocalException&)
+ {
+ }
+ throw AdapterExistsException();
+ }
+ _dict.insert(make_pair(name, adapter));
+
+ if(_traceLevels->adapterRegistry > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterRegistryCat);
+ out << "added adapter `" << name << "'";
+ }
+}
+
+void
+IcePack::AdapterRegistryI::remove(const string& name, const Ice::Current&)
+{
+ StringObjectProxyDict::iterator p = _dict.find(name);
+ if(p == _dict.end())
+ {
+ throw AdapterNotExistException();
+ }
+
+ _dict.erase(p);
+
+ if(_traceLevels->adapterRegistry > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterRegistryCat);
+ out << "removed adapter `" << name << "'";
+ }
+}
+
+AdapterPrx
+IcePack::AdapterRegistryI::findByName(const string& name, const Ice::Current&)
+{
+ StringObjectProxyDict::iterator p = _dict.find(name);
+ if(p != _dict.end())
+ {
+ try
+ {
+ return AdapterPrx::checkedCast(p->second);
+ }
+ catch(const Ice::ObjectNotExistException&)
+ {
+ _dict.erase(p);
+ }
+ catch(const Ice::LocalException&)
+ {
+ return AdapterPrx::uncheckedCast(p->second);
+ }
+ }
+ throw AdapterNotExistException();
+}
+
+Ice::StringSeq
+IcePack::AdapterRegistryI::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;
+}