void batchOneways(const Test::MyClassPrxPtr& p) { const Test::ByteS bs1(10 * 1024); Test::MyClassPrxPtr batch = ICE_UNCHECKED_CAST(Test::MyClassPrx, p->ice_batchOneway()); batch->ice_flushBatchRequests(); // Empty flush if(batch->ice_getConnection()) { batch->ice_getConnection()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, BasedOnProxy)); } batch->ice_getCommunicator()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, BasedOnProxy)); int i; p->opByteSOnewayCallCount(); // Reset the call count for(i = 0 ; i < 30 ; ++i) { try { batch->opByteSOneway(bs1); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } int count = 0; while(count < 27) // 3 * 9 requests auto-flushed. { count += p->opByteSOnewayCallCount(); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); } if(batch->ice_getConnection() && p->ice_getCommunicator()->getProperties()->getProperty("Ice.Default.Protocol") != "bt") { Test::MyClassPrxPtr batch1 = ICE_UNCHECKED_CAST(Test::MyClassPrx, p->ice_batchOneway()); Test::MyClassPrxPtr batch2 = ICE_UNCHECKED_CAST(Test::MyClassPrx, p->ice_batchOneway()); batch1->ice_ping(); batch2->ice_ping(); batch1->ice_flushBatchRequests(); batch1->ice_getConnection()->close(Ice::ICE_SCOPED_ENUM(ConnectionClose, GracefullyWithWait)); batch1->ice_ping(); batch2->ice_ping(); batch1->ice_getConnection(); batch2->ice_getConnection(); batch1->ice_ping(); batch1->ice_getConnection()->close(Ice::ICE_SCOPED_ENUM(ConnectionClose, GracefullyWithWait)); batch1->ice_ping(); batch2->ice_ping(); } Ice::Identity identity; identity.name = "invalid"; Ice::ObjectPrxPtr batch3 = batch->ice_identity(identity); batch3->ice_ping(); batch3->ice_flushBatchRequests(); // Make sure that a bogus batch request doesn't cause troubles to other ones. batch3->ice_ping(); batch->ice_ping(); batch->ice_flushBatchRequests(); batch->ice_ping(); if(batch->ice_getConnection() && p->ice_getCommunicator()->getProperties()->getProperty("Ice.Default.Protocol") != "bt") { Ice::InitializationData initData; initData.properties = p->ice_getCommunicator()->getProperties()->clone(); BatchRequestInterceptorIPtr interceptor = ICE_MAKE_SHARED(BatchRequestInterceptorI); #if defined(ICE_CPP11_MAPPING) initData.batchRequestInterceptor = [=](const Ice::BatchRequest& request, int count, int size) { interceptor->enqueue(request, count, size); }; #else initData.batchRequestInterceptor = interceptor; #endif Ice::CommunicatorPtr ic = Ice::initialize(initData); Test::MyClassPrxPtr batch = ICE_UNCHECKED_CAST(Test::MyClassPrx, ic->stringToProxy(p->ice_toString()))->ice_batchOneway(); test(interceptor->count() == 0); batch->ice_ping(); batch->ice_ping(); batch->ice_ping(); test(interceptor->count() == 0); interceptor->enqueue(true); batch->ice_ping(); batch->ice_ping(); batch->ice_ping(); test(interceptor->count() == 3); batch->ice_flushBatchRequests(); batch->ice_ping(); test(interceptor->count() == 1); batch->opByteSOneway(bs1); test(interceptor->count() == 2); batch->opByteSOneway(bs1); test(interceptor->count() == 3); batch->opByteSOneway(bs1); // This should trigger the flush batch->ice_ping(); test(interceptor->count() == 2); ic->destroy(); } bool supportsCompress = true; try { supportsCompress = p->supportsCompress(); } catch(const Ice::OperationNotExistException&) { } if(supportsCompress && batch->ice_getConnection() && p->ice_getCommunicator()->getProperties()->getProperty("Ice.Override.Compress") == "") { Ice::ObjectPrxPtr prx = batch->ice_getConnection()->createProxy(batch->ice_getIdentity())->ice_batchOneway(); Test::MyClassPrxPtr batch1 = ICE_UNCHECKED_CAST(Test::MyClassPrx, prx->ice_compress(false)); Test::MyClassPrxPtr batch2 = ICE_UNCHECKED_CAST(Test::MyClassPrx, prx->ice_compress(true)); Test::MyClassPrxPtr batch3 = ICE_UNCHECKED_CAST(Test::MyClassPrx, prx->ice_identity(identity)); batch1->opByteSOneway(bs1); batch1->opByteSOneway(bs1); batch1->opByteSOneway(bs1); batch1->ice_getConnection()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, Yes)); batch2->opByteSOneway(bs1); batch2->opByteSOneway(bs1); batch2->opByteSOneway(bs1); batch1->ice_getConnection()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, No)); batch1->opByteSOneway(bs1); batch1->opByteSOneway(bs1); batch1->opByteSOneway(bs1); batch1->ice_getConnection()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, BasedOnProxy)); batch1->opByteSOneway(bs1); batch2->opByteSOneway(bs1); batch1->opByteSOneway(bs1); batch1->ice_getConnection()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, BasedOnProxy)); batch1->opByteSOneway(bs1); batch3->opByteSOneway(bs1); batch1->opByteSOneway(bs1); batch1->ice_getConnection()->flushBatchRequests(Ice::ICE_SCOPED_ENUM(CompressBatch, BasedOnProxy)); } }
void batchOnewaysAMI(const Test::MyClassPrxPtr& p) { const Test::ByteS bs1(10 * 1024); Test::MyClassPrxPtr batch = ICE_UNCHECKED_CAST(Test::MyClassPrx, p->ice_batchOneway()); #ifdef ICE_CPP11_MAPPING promise<void> prom; batch->ice_flushBatchRequestsAsync(nullptr, [&](bool sentSynchronously) { test(sentSynchronously); prom.set_value(); }); // Empty flush prom.get_future().get(); for(int i = 0; i < 30; ++i) { batch->opByteSOnewayAsync(bs1, nullptr, [](exception_ptr){ test(false); }); } int count = 0; while(count < 27) // 3 * 9 requests auto-flushed. { count += p->opByteSOnewayCallCount(); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); } if(batch->ice_getConnection() && p->ice_getCommunicator()->getProperties()->getProperty("Ice.Default.Protocol") != "bt") { shared_ptr<Test::MyClassPrx> batch1 = Ice::uncheckedCast<Test::MyClassPrx>(p->ice_batchOneway()); shared_ptr<Test::MyClassPrx> batch2 = Ice::uncheckedCast<Test::MyClassPrx>(p->ice_batchOneway()); batch1->ice_pingAsync().get(); batch2->ice_pingAsync().get(); batch1->ice_flushBatchRequestsAsync().get(); batch1->ice_getConnection()->close(false); batch1->ice_pingAsync().get(); batch2->ice_pingAsync().get(); batch1->ice_getConnection(); batch2->ice_getConnection(); batch1->ice_pingAsync().get(); batch1->ice_getConnection()->close(false); batch1->ice_pingAsync().get(); batch2->ice_pingAsync().get(); } Ice::Identity identity; identity.name = "invalid"; auto batch3 = batch->ice_identity(identity); batch3->ice_pingAsync(); batch3->ice_flushBatchRequestsAsync().get(); // Make sure that a bogus batch request doesn't cause troubles to other ones. batch3->ice_pingAsync(); batch->ice_pingAsync(); batch->ice_flushBatchRequestsAsync().get(); batch->ice_pingAsync(); #else batch->end_ice_flushBatchRequests(batch->begin_ice_flushBatchRequests()); // Empty flush test(batch->begin_ice_flushBatchRequests()->isSent()); // Empty flush test(batch->begin_ice_flushBatchRequests()->isCompleted()); // Empty flush test(batch->begin_ice_flushBatchRequests()->sentSynchronously()); // Empty flush for(int i = 0; i < 30; ++i) { batch->begin_opByteSOneway(bs1, Test::newCallback_MyClass_opByteSOneway(new Callback_ByteSOneway(), &Callback_ByteSOneway::response, &Callback_ByteSOneway::exception)); } int count = 0; while(count < 27) // 3 * 9 requests auto-flushed. { count += p->opByteSOnewayCallCount(); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); } if(batch->ice_getConnection() && p->ice_getCommunicator()->getProperties()->getProperty("Ice.Default.Protocol") != "bt") { Test::MyClassPrx batch1 = Test::MyClassPrx::uncheckedCast(p->ice_batchOneway()); Test::MyClassPrx batch2 = Test::MyClassPrx::uncheckedCast(p->ice_batchOneway()); batch1->end_ice_ping(batch1->begin_ice_ping()); batch2->end_ice_ping(batch2->begin_ice_ping()); batch1->end_ice_flushBatchRequests(batch1->begin_ice_flushBatchRequests()); batch1->ice_getConnection()->close(false); batch1->end_ice_ping(batch1->begin_ice_ping()); batch2->end_ice_ping(batch2->begin_ice_ping()); batch1->ice_getConnection(); batch2->ice_getConnection(); batch1->end_ice_ping(batch1->begin_ice_ping()); batch1->ice_getConnection()->close(false); batch1->end_ice_ping(batch1->begin_ice_ping()); batch2->end_ice_ping(batch2->begin_ice_ping()); } Ice::Identity identity; identity.name = "invalid"; Ice::ObjectPrx batch3 = batch->ice_identity(identity); batch3->begin_ice_ping(); batch3->end_ice_flushBatchRequests(batch3->begin_ice_flushBatchRequests()); // Make sure that a bogus batch request doesn't cause troubles to other ones. batch3->begin_ice_ping(); batch->begin_ice_ping(); batch->end_ice_flushBatchRequests(batch->begin_ice_flushBatchRequests()); batch->begin_ice_ping(); #endif }