本文整理汇总了C++中ice::AsyncResultPtr::sentSynchronously方法的典型用法代码示例。如果您正苦于以下问题:C++ AsyncResultPtr::sentSynchronously方法的具体用法?C++ AsyncResultPtr::sentSynchronously怎么用?C++ AsyncResultPtr::sentSynchronously使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ice::AsyncResultPtr
的用法示例。
在下文中一共展示了AsyncResultPtr::sentSynchronously方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void
SubscriberOneway::flush()
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_lock);
//
// If the subscriber isn't online we're done.
//
if(_state != SubscriberStateOnline || _events.empty())
{
return;
}
// Send up to _maxOutstanding pending events.
while(_outstanding < _maxOutstanding && !_events.empty())
{
//
// Dequeue the head event, count one more outstanding AMI
// request.
//
EventDataPtr e = _events.front();
_events.erase(_events.begin());
if(_observer)
{
_observer->outstanding(1);
}
try
{
Ice::AsyncResultPtr result = _obj->begin_ice_invoke(
e->op, e->mode, e->data, e->context, Ice::newCallback_Object_ice_invoke(this,
&SubscriberOneway::exception,
&SubscriberOneway::sent));
if(!result->sentSynchronously())
{
++_outstanding;
}
else if(_observer)
{
_observer->delivered(1);
}
}
catch(const Ice::Exception& ex)
{
error(true, ex);
return;
}
}
if(_events.empty() && _outstanding == 0 && _shutdown)
{
_lock.notify();
}
}
示例2: sync
void
SubscriberBatch::doFlush()
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_lock);
//
// If the subscriber isn't online we're done.
//
if(_state != SubscriberStateOnline)
{
return;
}
EventDataSeq v;
v.swap(_events);
assert(!v.empty());
if(_observer)
{
_outstandingCount = static_cast<Ice::Int>(v.size());
_observer->outstanding(_outstandingCount);
}
try
{
vector<Ice::Byte> dummy;
for(EventDataSeq::const_iterator p = v.begin(); p != v.end(); ++p)
{
_obj->ice_invoke((*p)->op, (*p)->mode, (*p)->data, dummy, (*p)->context);
}
Ice::AsyncResultPtr result = _obj->begin_ice_flushBatchRequests(
Ice::newCallback_Object_ice_flushBatchRequests(this,
&SubscriberBatch::exception,
&SubscriberBatch::sent));
if(result->sentSynchronously())
{
--_outstanding;
assert(_outstanding == 0);
if(_observer)
{
_observer->delivered(_outstandingCount);
}
}
}
catch(const Ice::Exception& ex)
{
error(false, ex);
return;
}
if(_events.empty() && _outstanding == 0 && _shutdown)
{
_lock.notify();
}
// This is significantly faster than the async version, but it can
// block the calling thread. Bad news!
//_obj->ice_flushBatchRequests();
}
示例3: PluginInitializationException
void
PluginI::initialize()
{
Ice::PropertiesPtr properties = _communicator->getProperties();
bool ipv4 = properties->getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0;
bool preferIPv6 = properties->getPropertyAsInt("Ice.PreferIPv6Address") > 0;
string address;
if(ipv4 && !preferIPv6)
{
address = properties->getPropertyWithDefault("IceDiscovery.Address", "239.255.0.1");
}
else
{
address = properties->getPropertyWithDefault("IceDiscovery.Address", "ff15::1");
}
int port = properties->getPropertyAsIntWithDefault("IceDiscovery.Port", 4061);
string interface = properties->getProperty("IceDiscovery.Interface");
if(properties->getProperty("IceDiscovery.Multicast.Endpoints").empty())
{
ostringstream os;
os << "udp -h \"" << address << "\" -p " << port;
if(!interface.empty())
{
os << " --interface \"" << interface << "\"";
}
properties->setProperty("IceDiscovery.Multicast.Endpoints", os.str());
}
if(properties->getProperty("IceDiscovery.Reply.Endpoints").empty())
{
ostringstream os;
os << "udp";
if(!interface.empty())
{
os << " -h \"" << interface << "\"";
}
properties->setProperty("IceDiscovery.Reply.Endpoints", os.str());
}
if(properties->getProperty("IceDiscovery.Locator.Endpoints").empty())
{
properties->setProperty("IceDiscovery.Locator.AdapterId", IceUtil::generateUUID());
}
_multicastAdapter = _communicator->createObjectAdapter("IceDiscovery.Multicast");
_replyAdapter = _communicator->createObjectAdapter("IceDiscovery.Reply");
_locatorAdapter = _communicator->createObjectAdapter("IceDiscovery.Locator");
//
// Setup locatory registry.
//
LocatorRegistryIPtr locatorRegistry = new LocatorRegistryI(_communicator);
Ice::LocatorRegistryPrx locatorRegistryPrx =
Ice::LocatorRegistryPrx::uncheckedCast(_locatorAdapter->addWithUUID(locatorRegistry));
string lookupEndpoints = properties->getProperty("IceDiscovery.Lookup");
if(lookupEndpoints.empty())
{
ostringstream os;
os << "udp -h \"" << address << "\" -p " << port;
if(!interface.empty())
{
os << " --interface \"" << interface << "\"";
}
lookupEndpoints = os.str();
}
Ice::ObjectPrx lookupPrx = _communicator->stringToProxy("IceDiscovery/Lookup -d:" + lookupEndpoints);
lookupPrx = lookupPrx->ice_collocationOptimized(false); // No collocation optimization for the multicast proxy!
try
{
// Ensure we can establish a connection to the multicast proxy
// but don't block.
Ice::AsyncResultPtr result = lookupPrx->begin_ice_getConnection();
if(result->sentSynchronously())
{
lookupPrx->end_ice_getConnection(result);
}
}
catch(const Ice::LocalException& ex)
{
ostringstream os;
os << "IceDiscovery is unable to establish a multicast connection:\n";
os << "proxy = " << lookupPrx << '\n';
os << ex;
throw Ice::PluginInitializationException(__FILE__, __LINE__, os.str());
}
//
// Add lookup and lookup reply Ice objects
//
_lookup = new LookupI(locatorRegistry, LookupPrx::uncheckedCast(lookupPrx), properties);
_multicastAdapter->add(_lookup, _communicator->stringToIdentity("IceDiscovery/Lookup"));
Ice::ObjectPrx lookupReply = _replyAdapter->addWithUUID(new LookupReplyI(_lookup))->ice_datagram();
_lookup->setLookupReply(LookupReplyPrx::uncheckedCast(lookupReply));
//
// Setup locator on the communicator.
//
//.........这里部分代码省略.........