本文整理汇总了C++中ice::ObjectPrx类的典型用法代码示例。如果您正苦于以下问题:C++ ObjectPrx类的具体用法?C++ ObjectPrx怎么用?C++ ObjectPrx使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ObjectPrx类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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 );
}
示例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);
}
示例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;
}
}
示例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());
}
}
}
示例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;
}
示例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);
}
示例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);
}
示例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;
}
示例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;
}
示例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);
}
}
示例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();
}
}
}
示例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;
}
}
示例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);
}
示例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();
}
}
示例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);
}
}