本文整理汇总了C++中ice::ObjectPrx类的典型用法代码示例。如果您正苦于以下问题:C++ ObjectPrx类的具体用法?C++ ObjectPrx怎么用?C++ ObjectPrx使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ObjectPrx类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: toComponentName
orca::FQComponentName
toComponentName( const Ice::ObjectPrx& homePrx )
{
// THE OLD WAY: a Home was on the component's adapter
// string adapt = homePrx->ice_getAdapterId();
// return orcaice::toComponentName( adapt );
// THE NEW WAY: a Home is a facet on the Admin interface
Ice::Identity ident = homePrx->ice_getIdentity();
// cout<<"DEBUG: ident="<<ident.category<<"/"<<ident.name<<endl;
return orcaice::toComponentName( ident );
}
开发者ID:mjs513,项目名称:orca-robotics,代码行数:12,代码来源:icegridutils.cpp
示例2: CallbackI
void
IceGrid::AdminRouter::invokeOnTarget(const Ice::ObjectPrx& target,
const AMD_Object_ice_invokePtr& cb,
const pair<const Byte*, const Byte*>& inParams,
const Current& current)
{
assert(target != 0);
//
// Call with AMI
//
Callback_Object_ice_invokePtr amiCb = newCallback_Object_ice_invoke(
new CallbackI(cb, target, current.operation, _traceLevels), &CallbackI::response, &CallbackI::exception);
if(_traceLevels->admin > 0)
{
Ice::Trace out(_traceLevels->logger, _traceLevels->adminCat);
out << "routing operation `" << current.operation << "' to `" << target->ice_toString() << "'";
}
target->begin_ice_invoke(current.operation, current.mode, inParams, current.ctx, amiCb);
}
开发者ID:zeroc-ice,项目名称:ice-debian-packaging,代码行数:21,代码来源:AdminRouter.cpp
示例3: getAccessServerOneway
ProxyManagerPrx WTalkProxyManagerI::getAccessServerOneway(const string& endpoint) {
map<string, ProxyManagerPrx>::iterator it;
{
IceUtil::Mutex::Lock lock(_mutex);
it = _prxs.find(endpoint);
}
if (it != _prxs.end()) {
return it->second;
} else {
Ice::ObjectPrx oprx = ServiceI::instance().getAdapter()->getCommunicator()->stringToProxy("[email protected]"+endpoint);
ProxyManagerPrx prx =
ProxyManagerPrx::uncheckedCast(oprx->ice_oneway());
{
IceUtil::Mutex::Lock lock(_mutex);
_prxs[endpoint] = prx;
}
return prx;
}
}
开发者ID:bradenwu,项目名称:oce,代码行数:21,代码来源:ProxyManagerI.cpp
示例4: sync
void
IceInternal::RouterInfo::addAndEvictProxies(const Ice::ObjectPrx& proxy, const Ice::ObjectProxySeq& evictedProxies)
{
IceUtil::Mutex::Lock sync(*this);
//
// Check if the proxy hasn't already been evicted by a concurrent addProxies call.
// If it's the case, don't add it to our local map.
//
multiset<Identity>::iterator p = _evictedIdentities.find(proxy->ice_getIdentity());
if(p != _evictedIdentities.end())
{
_evictedIdentities.erase(p);
}
else
{
//
// If we successfully added the proxy to the router,
// we add it to our local map.
//
_identities.insert(proxy->ice_getIdentity());
}
//
// We also must remove whatever proxies the router evicted.
//
for(Ice::ObjectProxySeq::const_iterator q = evictedProxies.begin(); q != evictedProxies.end(); ++q)
{
if(_identities.erase((*q)->ice_getIdentity()) == 0)
{
//
// It's possible for the proxy to not have been
// added yet in the local map if two threads
// concurrently call addProxies.
//
_evictedIdentities.insert((*q)->ice_getIdentity());
}
}
}
开发者ID:Jonavin,项目名称:ice,代码行数:39,代码来源:RouterInfo.cpp
示例5: sync
int
ObserverTopic::subscribe(const Ice::ObjectPrx& obsv, const string& name)
{
Lock sync(*this);
if(_topics.empty())
{
return -1;
}
assert(obsv);
try
{
IceStorm::QoS qos;
qos["reliability"] = "ordered";
Ice::EncodingVersion v = IceInternal::getCompatibleEncoding(obsv->ice_getEncodingVersion());
map<Ice::EncodingVersion, IceStorm::TopicPrx>::const_iterator p = _topics.find(v);
if(p == _topics.end())
{
Ice::Warning out(_logger);
out << "unsupported encoding version for observer `" << obsv << "'";
return -1;
}
initObserver(p->second->subscribeAndGetPublisher(qos, obsv->ice_twoway()));
}
catch(const IceStorm::AlreadySubscribed&)
{
throw ObserverAlreadyRegisteredException(obsv->ice_getIdentity());
}
if(!name.empty())
{
assert(_syncSubscribers.find(name) == _syncSubscribers.end());
_syncSubscribers.insert(name);
addExpectedUpdate(_serial, name);
return _serial;
}
return -1;
}
开发者ID:2008hatake,项目名称:zeroc-ice,代码行数:38,代码来源:Topics.cpp
示例6: sync
void
WellKnownObjectsManager::updateReplicatedWellKnownObjects()
{
if(!initialized())
{
return;
}
//
// Update replicated objects.
//
Ice::Identity id;
id.category = _database->getInstanceName();
ObjectInfo info;
ObjectInfoSeq objects;
Lock sync(*this);
Ice::ObjectPrx replicatedClientProxy = _database->getReplicaCache().getEndpoints("Client", _endpoints["Client"]);
id.name = "Query";
info.type = Query::ice_staticId();
info.proxy = replicatedClientProxy->ice_identity(id);
objects.push_back(info);
id.name = "Locator";
info.type = Ice::Locator::ice_staticId();
info.proxy = replicatedClientProxy->ice_identity(id);
objects.push_back(info);
id.name = "LocatorRegistry";
info.type = Ice::LocatorRegistry::ice_staticId();
info.proxy = _database->getReplicaCache().getEndpoints("Server", _endpoints["Server"])->ice_identity(id);
objects.push_back(info);
_database->addOrUpdateRegistryWellKnownObjects(objects);
}
开发者ID:ming-hai,项目名称:ice,代码行数:37,代码来源:WellKnownObjectsManager.cpp
示例7: sync
Ice::ObjectPrx
ReplicaCache::getEndpoints(const string& name, const Ice::ObjectPrx& proxy) const
{
Ice::EndpointSeq endpoints;
if(proxy)
{
Ice::EndpointSeq endpts = proxy->ice_getEndpoints();
endpoints.insert(endpoints.end(), endpts.begin(), endpts.end());
}
Lock sync(*this);
for(map<string, ReplicaEntryPtr>::const_iterator p = _entries.begin(); p != _entries.end(); ++p)
{
Ice::ObjectPrx prx = p->second->getSession()->getEndpoint(name);
if(prx)
{
Ice::EndpointSeq endpts = prx->ice_getEndpoints();
endpoints.insert(endpoints.end(), endpts.begin(), endpts.end());
}
}
return _communicator->stringToProxy("dummy")->ice_endpoints(endpoints);
}
开发者ID:sbesson,项目名称:zeroc-ice,代码行数:24,代码来源:ReplicaCache.cpp
示例8: sync
vector<EndpointIPtr>
IceInternal::RouterInfo::setClientEndpoints(const Ice::ObjectPrx& proxy)
{
IceUtil::Mutex::Lock sync(*this);
if(_clientEndpoints.empty())
{
if(!proxy)
{
//
// If getClientProxy() return nil, use router endpoints.
//
_clientEndpoints = _router->__reference()->getEndpoints();
}
else
{
Ice::ObjectPrx clientProxy = proxy->ice_router(0); // The client proxy cannot be routed.
//
// In order to avoid creating a new connection to the router,
// we must use the same timeout as the already existing
// connection.
//
try
{
clientProxy = clientProxy->ice_timeout(_router->ice_getConnection()->timeout());
}
catch(const Ice::CollocationOptimizationException&)
{
// Ignore - collocated router
}
_clientEndpoints = clientProxy->__reference()->getEndpoints();
}
}
return _clientEndpoints;
}
开发者ID:dayongxie,项目名称:zeroc-ice-androidndk,代码行数:36,代码来源:RouterInfo.cpp
示例9: assert
IceGrid::QueryPrx
getDefaultQuery( const orcaice::Context& context )
{
Ice::CommunicatorPtr ic = context.communicator();
assert( ic );
Ice::ObjectPrx locatorPrx = ic->getDefaultLocator();
Ice::Identity locatorId = locatorPrx->ice_getIdentity();
Ice::Identity queryId;
queryId.category = locatorId.category;
queryId.name = "Query";
Ice::ObjectPrx objPrx = ic->stringToProxy( ic->identityToString( queryId ) );
IceGrid::QueryPrx queryPrx;
try {
// objPrx->ice_ping();
// string address = orcacm::connectionToRemoteAddress( queryPrx->ice_getConnection()->toString() );
// std::ostringstream os;
// os<<"Registry ping successful: "<<data.address;
// context.tracer().debug( os.str() );
queryPrx = IceGrid::QueryPrx::checkedCast( objPrx );
}
catch ( const Ice::Exception& e ) {
// what do we do?
ostringstream os;
os << "(while looking for IceGrid Query interface) :"<<e.what();
context.tracer().warning( os.str() );
}
return queryPrx;
}
开发者ID:mjs513,项目名称:orca-robotics,代码行数:36,代码来源:icegridutils.cpp
示例10: getConnection
void
BlobjectI::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCb, const vector<Ice::Byte>& inEncaps,
const Ice::Current& current)
{
Ice::ConnectionPtr connection = getConnection(current);
const bool twoway = current.requestId > 0;
Ice::ObjectPrx obj = connection->createProxy(current.id);
if(!twoway)
{
if(_startBatch)
{
_startBatch = false;
_batchProxy = obj->ice_batchOneway();
}
if(_batchProxy)
{
obj = _batchProxy;
}
if(!current.facet.empty())
{
obj = obj->ice_facet(current.facet);
}
if(_batchProxy)
{
vector<Ice::Byte> out;
obj->ice_invoke(current.operation, current.mode, inEncaps, out, current.ctx);
amdCb->ice_response(true, vector<Ice::Byte>());
}
else
{
CallbackPtr cb = new Callback(amdCb, false);
Ice::Callback_Object_ice_invokePtr del =
Ice::newCallback_Object_ice_invoke(cb, &Callback::response, &Callback::exception, &Callback::sent);
obj->ice_oneway()->begin_ice_invoke(current.operation, current.mode, inEncaps, current.ctx, del);
}
}
else
{
if(!current.facet.empty())
{
obj = obj->ice_facet(current.facet);
}
CallbackPtr cb = new Callback(amdCb, true);
Ice::Callback_Object_ice_invokePtr del =
Ice::newCallback_Object_ice_invoke(cb, &Callback::response, &Callback::exception, &Callback::sent);
obj->begin_ice_invoke(current.operation, current.mode, inEncaps, current.ctx, del);
}
}
开发者ID:zeroc-ice,项目名称:ice-debian-packaging,代码行数:51,代码来源:BlobjectI.cpp
示例11: sync
void
ObserverTopic::unsubscribe(const Ice::ObjectPrx& observer, const string& name)
{
Lock sync(*this);
Ice::EncodingVersion v = IceInternal::getCompatibleEncoding(observer->ice_getEncodingVersion());
map<Ice::EncodingVersion, IceStorm::TopicPrx>::const_iterator p = _topics.find(v);
if(p == _topics.end())
{
return;
}
try
{
p->second->unsubscribe(observer);
}
catch(const Ice::ObjectAdapterDeactivatedException&)
{
}
assert(observer);
if(!name.empty())
{
assert(_syncSubscribers.find(name) != _syncSubscribers.end());
_syncSubscribers.erase(name);
map<int, set<string> >::iterator p = _waitForUpdates.begin();
bool notifyMonitor = false;
while(p != _waitForUpdates.end())
{
p->second.erase(name);
if(p->second.empty())
{
_waitForUpdates.erase(p++);
notifyMonitor = true;
}
else
{
++p;
}
}
if(notifyMonitor)
{
notifyAll();
}
}
}
开发者ID:465060874,项目名称:ice,代码行数:47,代码来源:Topics.cpp
示例12: request
void
BatchRequestQueue::finishBatchRequest(BasicStream* os, const Ice::ObjectPrx& proxy, const std::string& operation)
{
//
// No need for synchronization, no other threads are supposed
// to modify the queue since we set _batchStreamInUse to true.
//
assert(_batchStreamInUse);
_batchStream.swap(*os);
try
{
_batchStreamCanFlush = true; // Allow flush to proceed even if the stream is marked in use.
if(_maxSize > 0 && _batchStream.b.size() >= _maxSize)
{
proxy->begin_ice_flushBatchRequests();
}
assert(_batchMarker < _batchStream.b.size());
if(_interceptor)
{
BatchRequestI request(*this, proxy, operation, static_cast<int>(_batchStream.b.size() - _batchMarker));
_interceptor->enqueue(request, _batchRequestNum, static_cast<int>(_batchMarker));
}
else
{
_batchMarker = _batchStream.b.size();
++_batchRequestNum;
}
Lock sync(*this);
_batchStream.resize(_batchMarker);
_batchStreamInUse = false;
_batchStreamCanFlush = false;
notifyAll();
}
catch(const std::exception&)
{
Lock sync(*this);
_batchStream.resize(_batchMarker);
_batchStreamInUse = false;
_batchStreamCanFlush = false;
notifyAll();
throw;
}
}
开发者ID:Jonavin,项目名称:ice,代码行数:47,代码来源:BatchRequestQueue.cpp
示例13: DeploymentException
void
AdminI::updateObject(const Ice::ObjectPrx& proxy, const ::Ice::Current&)
{
checkIsReadOnly();
if(!proxy)
{
throw DeploymentException("proxy is null");
}
const Ice::Identity id = proxy->ice_getIdentity();
if(id.category == _database->getInstanceName())
{
throw DeploymentException("updating object `" + _database->getCommunicator()->identityToString(id) +
"' is not allowed:\nobjects with identity category `" + id.category +
"' are managed by IceGrid");
}
_database->updateObject(proxy);
}
开发者ID:zmyer,项目名称:ice,代码行数:19,代码来源:AdminI.cpp
示例14: ObjectProxySeq
Ice::ObjectProxySeq
QueryI::findAllReplicas(const Ice::ObjectPrx& proxy, const Ice::Current&) const
{
if(!proxy)
{
return Ice::ObjectProxySeq();
}
//
// If the given proxy has an empty adapter id, we check if it's a
// well-known object. If it's a well-known object we use the
// registered proxy instead.
//
Ice::ObjectPrx prx = proxy;
if(prx->ice_getAdapterId().empty())
{
try
{
ObjectInfo info = _database->getObjectInfo(prx->ice_getIdentity());
prx = info.proxy;
}
catch(const ObjectNotRegisteredException&)
{
return Ice::ObjectProxySeq();
}
}
try
{
AdapterInfoSeq infos = _database->getAdapterInfo(prx->ice_getAdapterId());
if(infos.empty() || infos[0].replicaGroupId != prx->ice_getAdapterId())
{
// The adapter id doesn't refer to a replica group or the replica group is empty.
return Ice::ObjectProxySeq();
}
Ice::ObjectProxySeq proxies;
for(AdapterInfoSeq::const_iterator p = infos.begin(); p != infos.end(); ++p)
{
assert(!p->id.empty());
proxies.push_back(prx->ice_adapterId(p->id));
}
return proxies;
}
catch(const AdapterNotExistException&)
{
return Ice::ObjectProxySeq();
}
}
开发者ID:2008hatake,项目名称:zeroc-ice,代码行数:49,代码来源:QueryI.cpp
示例15: if
void
IceInternal::LocatorInfo::RequestCallback::response(const LocatorInfoPtr& locatorInfo, const Ice::ObjectPrx& proxy)
{
vector<EndpointIPtr> endpoints;
if(proxy)
{
ReferencePtr r = proxy->__reference();
if(_ref->isWellKnown() && !isSupported(_ref->getEncoding(), r->getEncoding()))
{
//
// If a well-known proxy and the returned proxy encoding
// isn't supported, we're done: there's no compatible
// endpoint we can use.
//
}
else if(!r->isIndirect())
{
endpoints = r->getEndpoints();
}
else if(_ref->isWellKnown() && !r->isWellKnown())
{
//
// We're resolving the endpoints of a well-known object and the proxy returned
// by the locator is an indirect proxy. We now need to resolve the endpoints
// of this indirect proxy.
//
locatorInfo->getEndpoints(r, _ref, _ttl, _callback);
return;
}
}
if(_ref->getInstance()->traceLevels()->location >= 1)
{
locatorInfo->getEndpointsTrace(_ref, endpoints, false);
}
if(_callback)
{
_callback->setEndpoints(endpoints, false);
}
}
开发者ID:Jonavin,项目名称:ice,代码行数:40,代码来源:LocatorInfo.cpp
示例16:
string
IceStormInternal::describeEndpoints(const Ice::ObjectPrx& proxy)
{
ostringstream os;
if(proxy)
{
Ice::EndpointSeq endpoints = proxy->ice_getEndpoints();
for(Ice::EndpointSeq::const_iterator i = endpoints.begin(); i != endpoints.end(); ++i)
{
if(i != endpoints.begin())
{
os << ", ";
}
os << "\"" << (*i)->toString() << "\"";
}
}
else
{
os << "subscriber proxy is null";
}
return os.str();
}
开发者ID:ming-hai,项目名称:ice,代码行数:22,代码来源:Util.cpp
示例17: out
void
TransientTopicImpl::unsubscribe(const Ice::ObjectPrx& subscriber, const Ice::Current&)
{
TraceLevelsPtr traceLevels = _instance->traceLevels();
if(!subscriber)
{
if(traceLevels->topic > 0)
{
Ice::Trace out(traceLevels->logger, traceLevels->topicCat);
out << _name << ": unsubscribe: null proxy";
}
throw InvalidSubscriber("subscriber is a null proxy");
}
Ice::Identity id = subscriber->ice_getIdentity();
if(traceLevels->topic > 0)
{
Ice::Trace out(traceLevels->logger, traceLevels->topicCat);
out << _name << ": unsubscribe: " << _instance->communicator()->identityToString(id);
if(traceLevels->topic > 1)
{
out << " endpoints: " << IceStormInternal::describeEndpoints(subscriber);
}
}
Lock sync(*this);
// First remove the subscriber from the subscribers list. Note
// that its possible that the subscriber isn't in the list, but is
// in the database if the subscriber was locally reaped.
vector<SubscriberPtr>::iterator p = find(_subscribers.begin(), _subscribers.end(), id);
if(p != _subscribers.end())
{
(*p)->destroy();
_subscribers.erase(p);
}
}
开发者ID:zeroc-ice,项目名称:ice-debian-packaging,代码行数:37,代码来源:TransientTopicI.cpp
示例18: if
Test::MyClassPrx
allTests(const Ice::CommunicatorPtr& communicator)
{
cout << "testing stringToProxy... " << flush;
string ref = "test:default -p 12010";
Ice::ObjectPrx base = communicator->stringToProxy(ref);
test(base);
Ice::ObjectPrx b1 = communicator->stringToProxy("test");
test(b1->ice_getIdentity().name == "test" && b1->ice_getIdentity().category.empty() &&
b1->ice_getAdapterId().empty() && b1->ice_getFacet().empty());
b1 = communicator->stringToProxy("test ");
test(b1->ice_getIdentity().name == "test" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
b1 = communicator->stringToProxy(" test ");
test(b1->ice_getIdentity().name == "test" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
b1 = communicator->stringToProxy(" test");
test(b1->ice_getIdentity().name == "test" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
b1 = communicator->stringToProxy("'test -f facet'");
test(b1->ice_getIdentity().name == "test -f facet" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
try
{
b1 = communicator->stringToProxy("\"test -f facet'");
test(false);
}
catch(const Ice::ProxyParseException&)
{
}
b1 = communicator->stringToProxy("\"test -f facet\"");
test(b1->ice_getIdentity().name == "test -f facet" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
b1 = communicator->stringToProxy("\"test -f [email protected]\"");
test(b1->ice_getIdentity().name == "test -f [email protected]" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
b1 = communicator->stringToProxy("\"test -f [email protected] @test\"");
test(b1->ice_getIdentity().name == "test -f [email protected] @test" && b1->ice_getIdentity().category.empty() &&
b1->ice_getFacet().empty());
try
{
b1 = communicator->stringToProxy("test test");
test(false);
}
catch(const Ice::ProxyParseException&)
{
}
b1 = communicator->stringToProxy("test\\040test");
test(b1->ice_getIdentity().name == "test test" && b1->ice_getIdentity().category.empty());
try
{
b1 = communicator->stringToProxy("test\\777");
test(false);
}
catch(const Ice::IdentityParseException&)
{
}
b1 = communicator->stringToProxy("test\\40test");
test(b1->ice_getIdentity().name == "test test");
// Test some octal and hex corner cases.
b1 = communicator->stringToProxy("test\\4test");
test(b1->ice_getIdentity().name == "test\4test");
b1 = communicator->stringToProxy("test\\04test");
test(b1->ice_getIdentity().name == "test\4test");
b1 = communicator->stringToProxy("test\\004test");
test(b1->ice_getIdentity().name == "test\4test");
b1 = communicator->stringToProxy("test\\1114test");
test(b1->ice_getIdentity().name == "test\1114test");
b1 = communicator->stringToProxy("test\\b\\f\\n\\r\\t\\'\\\"\\\\test");
test(b1->ice_getIdentity().name == "test\b\f\n\r\t\'\"\\test" && b1->ice_getIdentity().category.empty());
b1 = communicator->stringToProxy("category/test");
test(b1->ice_getIdentity().name == "test" && b1->ice_getIdentity().category == "category" &&
b1->ice_getAdapterId().empty());
b1 = communicator->stringToProxy("");
test(!b1);
b1 = communicator->stringToProxy("\"\"");
test(!b1);
try
{
b1 = communicator->stringToProxy("\"\" test"); // Invalid trailing characters.
test(false);
}
catch(const Ice::ProxyParseException&)
{
}
try
{
b1 = communicator->stringToProxy("test:"); // Missing endpoint.
test(false);
}
catch(const Ice::EndpointParseException&)
{
}
b1 = communicator->stringToProxy("[email protected]");
//.........这里部分代码省略.........
开发者ID:pedia,项目名称:zeroc-ice,代码行数:101,代码来源:AllTests.cpp
示例19: test
void
allTests(const Ice::CommunicatorPtr& communicator)
{
IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast(
communicator->stringToProxy(communicator->getDefaultLocator()->ice_getIdentity().category + "/Registry"));
test(registry);
AdminSessionPrx session = registry->createAdminSession("foo", "bar");
session->ice_getConnection()->setACM(registry->getACMTimeout(), IceUtil::None, Ice::HeartbeatAlways);
AdminPrx admin = session->getAdmin();
test(admin);
cout << "starting router... " << flush;
try
{
admin->startServer("Glacier2");
}
catch(const ServerStartException& ex)
{
cerr << ex.reason << endl;
test(false);
}
cout << "ok" << endl;
const int allocationTimeout = 5000;
Ice::ObjectPrx obj;
Ice::ObjectPrx dummy;
try
{
cout << "testing create session... " << flush;
SessionPrx session1 = registry->createSession("Client1", "");
SessionPrx session2 = registry->createSession("Client2", "");
cout << "ok" << endl;
cout << "testing allocate object by identity... " << flush;
Ice::Identity allocatable = Ice::stringToIdentity("allocatable");
Ice::Identity allocatablebis = Ice::stringToIdentity("allocatablebis");
try
{
session1->allocateObjectById(Ice::stringToIdentity("dummy"));
}
catch(const ObjectNotRegisteredException&)
{
}
try
{
session1->releaseObject(Ice::stringToIdentity("dummy"));
}
catch(const ObjectNotRegisteredException&)
{
}
try
{
session1->allocateObjectById(Ice::stringToIdentity("nonallocatable"));
test(false);
}
catch(const AllocationException&)
{
test(false);
}
catch(const ObjectNotRegisteredException&)
{
}
try
{
session2->allocateObjectById(Ice::stringToIdentity("nonallocatable"));
test(false);
}
catch(const AllocationException&)
{
test(false);
}
catch(const ObjectNotRegisteredException&)
{
}
try
{
session1->releaseObject(Ice::stringToIdentity("nonallocatable"));
test(false);
}
catch(const AllocationException&)
{
test(false);
}
catch(const ObjectNotRegisteredException&)
{
}
try
{
session2->releaseObject(Ice::stringToIdentity("nonallocatable"));
test(false);
}
//.........这里部分代码省略.........
开发者ID:hadoop835,项目名称:ice,代码行数:101,代码来源:AllTests.cpp
示例20: SubscriberLink
SubscriberPtr
Subscriber::create(
const InstancePtr& instance,
const SubscriberRecord& rec)
{
if(rec.link)
{
return new SubscriberLink(instance, rec);
}
else
{
PerSubscriberPublisherIPtr per = new PerSubscriberPublisherI(instance);
Ice::Identity perId;
perId.category = instance->instanceName();
perId.name = "topic." + rec.topicName + ".publish." +
instance->communicator()->identityToString(rec.obj->ice_getIdentity());
Ice::ObjectPrx proxy = instance->publishAdapter()->add(per, perId);
TraceLevelsPtr traceLevels = instance->traceLevels();
SubscriberPtr subscriber;
try
{
int retryCount = 0;
QoS::const_iterator p = rec.theQoS.find("retryCount");
if(p != rec.theQoS.end())
{
retryCount = atoi(p->second.c_str());
}
string reliability;
p = rec.theQoS.find("reliability");
if(p != rec.theQoS.end())
{
reliability = p->second;
}
if(!reliability.empty() && reliability != "ordered")
{
throw BadQoS("invalid reliability: " + reliability);
}
//
// Override the timeout.
//
Ice::ObjectPrx newObj;
try
{
newObj = rec.obj->ice_timeout(instance->sendTimeout());
}
catch(const Ice::FixedProxyException&)
{
//
// In the event IceStorm is collocated this could be a
// fixed proxy in which case its not possible to set the
// timeout.
//
newObj = rec.obj;
}
p = rec.theQoS.find("locatorCacheTimeout");
if(p != rec.theQoS.end())
{
istringstream is(IceUtilInternal::trim(p->second));
int locatorCacheTimeout;
if(!(is >> locatorCacheTimeout) || !is.eof())
{
throw BadQoS("invalid locator cache timeout (numeric value required): " + p->second);
}
newObj = newObj->ice_locatorCacheTimeout(locatorCacheTimeout);
}
p = rec.theQoS.find("connectionCached");
if(p != rec.theQoS.end())
{
istringstream is(IceUtilInternal::trim(p->second));
int connectionCached;
if(!(is >> connectionCached) || !is.eof())
{
throw BadQoS("invalid connection cached setting (numeric value required): " + p->second);
}
newObj = newObj->ice_connectionCached(connectionCached > 0);
}
if(reliability == "ordered")
{
if(!newObj->ice_isTwoway())
{
throw BadQoS("ordered reliability requires a twoway proxy");
}
subscriber = new SubscriberTwoway(instance, rec, proxy, retryCount, 1, newObj);
}
else if(newObj->ice_isOneway() || newObj->ice_isDatagram())
{
if(retryCount > 0)
{
throw BadQoS("non-zero retryCount QoS requires a twoway proxy");
}
subscriber = new SubscriberOneway(instance, rec, proxy, retryCount, newObj);
}
else if(newObj->ice_isBatchOneway() || newObj->ice_isBatchDatagram())
{
//.........这里部分代码省略.........
开发者ID:zeroc-ice,项目名称:ice-debian-packaging,代码行数:101,代码来源:Subscriber.cpp
注:本文中的ice::ObjectPrx类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论