diff options
author | Benoit Foucher <benoit@zeroc.com> | 2002-08-22 22:52:31 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2002-08-22 22:52:31 +0000 |
commit | 8ee8c08018e63d5b5b6c505490e27dcb3ef766db (patch) | |
tree | 4f888dacbe96952a910eb969a5428aba67030e7b /cpp/src/IcePack/AdapterRegistryI.cpp | |
parent | bug fix for identity reuse in add() (diff) | |
download | ice-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.cpp | 111 |
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; +} |