summaryrefslogtreecommitdiff
path: root/cpp/test/Glacier2/router/CallbackI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test/Glacier2/router/CallbackI.cpp')
-rw-r--r--cpp/test/Glacier2/router/CallbackI.cpp254
1 files changed, 70 insertions, 184 deletions
diff --git a/cpp/test/Glacier2/router/CallbackI.cpp b/cpp/test/Glacier2/router/CallbackI.cpp
index 920a611c266..b61956111d3 100644
--- a/cpp/test/Glacier2/router/CallbackI.cpp
+++ b/cpp/test/Glacier2/router/CallbackI.cpp
@@ -7,116 +7,19 @@
#include <TestHelper.h>
using namespace std;
+using namespace std::chrono_literals;
+
using namespace Ice;
using namespace Test;
-class Cookie : public Ice::LocalObject
-{
-};
-typedef IceUtil::Handle<Cookie> CookiePtr;
-
-template<class T>
-class CookieT : public Cookie
-{
-public:
-
- CookieT(const T& v) : cb(v)
- {
- }
-
- T cb;
-};
-
-template<typename T> CookiePtr newCookie(const T& cb)
-{
- return new CookieT<T>(cb);
-}
-
-template<typename T> const T& getCookie(const CookiePtr& cookie)
-{
- return dynamic_cast<CookieT<T>* >(cookie.get())->cb;
-}
-
-class AsyncCB : public IceUtil::Shared
-{
-public:
-
- void
- responseCallback(const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateCallbackPtr>(cookie)->ice_response();
- }
-
- void
- exceptionCallback(const Ice::Exception& ex, const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateCallbackPtr>(cookie)->ice_exception(ex);
- }
-
- void
- responseCallbackEx(const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateCallbackExPtr>(cookie)->ice_response();
- }
-
- void
- exceptionCallbackEx(const Ice::Exception& ex, const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateCallbackExPtr>(cookie)->ice_exception(ex);
- }
-
- void
- responseConcurrentCallback(Int number, const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateConcurrentCallbackPtr>(cookie)->ice_response(number);
- }
-
- void
- exceptionConcurrentCallback(const Ice::Exception& ex, const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateConcurrentCallbackPtr>(cookie)->ice_exception(ex);
- }
-
- void
- responseWaitCallback(const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateWaitCallbackPtr>(cookie)->ice_response();
- }
-
- void
- exceptionWaitCallback(const Ice::Exception& ex, const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateWaitCallbackPtr>(cookie)->ice_exception(ex);
- }
-
- void
- responseCallbackWithPayload(const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateCallbackWithPayloadPtr>(cookie)->ice_response();
- }
-
- void
- exceptionCallbackWithPayload(const Ice::Exception& ex, const CookiePtr& cookie)
- {
- getCookie<AMD_Callback_initiateCallbackWithPayloadPtr>(cookie)->ice_exception(ex);
- }
-};
-typedef IceUtil::Handle<AsyncCB> AsyncCBPtr;
-
-CallbackReceiverI::CallbackReceiverI() :
- _callback(0),
- _waitCallback(false),
- _callbackWithPayload(false),
- _finishWaitCallback(false)
-{
-}
-
void
CallbackReceiverI::callback(const Current&)
{
- Lock sync(*this);
- ++_callback;
- notifyAll();
+ {
+ lock_guard<mutex> lg(_mutex);
+ ++_callback;
+ }
+ _condVar.notify_all();
}
void
@@ -130,56 +33,54 @@ CallbackReceiverI::callbackEx(const Current& current)
}
void
-CallbackReceiverI::concurrentCallback_async(const AMD_CallbackReceiver_concurrentCallbackPtr& cb,
- Int number,
- const Current&)
+CallbackReceiverI::concurrentCallbackAsync(int number, function<void(int)> response,
+ function<void(exception_ptr)> error,
+ const Current&)
{
- Lock sync(*this);
-
- pair<AMD_CallbackReceiver_concurrentCallbackPtr, Int> p;
- p.first = cb;
- p.second = number;
- _callbacks.push_back(p);
- notifyAll();
+ {
+ lock_guard<mutex> lg(_mutex);
+ _callbacks.emplace_back(move(response), move(error), number);
+ }
+ _condVar.notify_all();
}
void
CallbackReceiverI::waitCallback(const Current&)
{
{
- Lock sync(*this);
+ lock_guard<mutex> lg(_mutex);
assert(!_waitCallback);
_waitCallback = true;
- notifyAll();
}
+ _condVar.notify_all();
+ unique_lock<mutex> lock(_mutex);
+ while(!_finishWaitCallback)
{
- Lock sync(*this);
- while(!_finishWaitCallback)
- {
- wait();
- }
- _finishWaitCallback = false;
+ _condVar.wait(lock);
}
+ _finishWaitCallback = false;
}
void
-CallbackReceiverI::callbackWithPayload(const Ice::ByteSeq&, const Current&)
+CallbackReceiverI::callbackWithPayload(Ice::ByteSeq, const Current&)
{
- Lock sync(*this);
- assert(!_callbackWithPayload);
- _callbackWithPayload = true;
- notifyAll();
+ {
+ lock_guard<mutex> lg(_mutex);
+ assert(!_callbackWithPayload);
+ _callbackWithPayload = true;
+ }
+ _condVar.notify_all();
}
void
CallbackReceiverI::callbackOK(int expected)
{
- Lock sync(*this);
+ unique_lock<mutex> lock(_mutex);
while(_callback != expected)
{
- wait();
+ _condVar.wait(lock);
}
_callback = 0;
}
@@ -187,10 +88,10 @@ CallbackReceiverI::callbackOK(int expected)
void
CallbackReceiverI::waitCallbackOK()
{
- Lock sync(*this);
+ unique_lock<mutex> lock(_mutex);
while(!_waitCallback)
{
- timedWait(IceUtil::Time::seconds(30));
+ _condVar.wait_for(lock, 30s);
test(_waitCallback);
}
@@ -200,11 +101,11 @@ CallbackReceiverI::waitCallbackOK()
void
CallbackReceiverI::callbackWithPayloadOK()
{
- Lock sync(*this);
+ unique_lock<mutex> lock(_mutex);
while(!_callbackWithPayload)
{
- wait();
+ _condVar.wait(lock);
}
_callbackWithPayload = false;
@@ -213,105 +114,90 @@ CallbackReceiverI::callbackWithPayloadOK()
void
CallbackReceiverI::notifyWaitCallback()
{
- Lock sync(*this);
- _finishWaitCallback = true;
- notifyAll();
+ {
+ lock_guard<mutex> lg(_mutex);
+ _finishWaitCallback = true;
+ }
+ _condVar.notify_all();
};
void
CallbackReceiverI::answerConcurrentCallbacks(unsigned int num)
{
- Lock sync(*this);
+ unique_lock<mutex> lock(_mutex);
while(_callbacks.size() != num)
{
- wait();
+ _condVar.wait(lock);
}
- for(vector<pair<AMD_CallbackReceiver_concurrentCallbackPtr, Int> >::const_iterator p = _callbacks.begin();
- p != _callbacks.end();
- ++p)
+ for(const auto& p : _callbacks)
{
- p->first->ice_response(p->second);
+ get<0>(p)(get<2>(p));
}
_callbacks.clear();
}
-CallbackI::CallbackI()
-{
-}
-
void
-CallbackI::initiateCallback_async(const AMD_Callback_initiateCallbackPtr& cb,
- const CallbackReceiverPrx& proxy, const Current& current)
+CallbackI::initiateCallbackAsync(shared_ptr<CallbackReceiverPrx> proxy,
+ function<void()> response,
+ function<void(exception_ptr)> error,
+ const Current& current)
{
if(proxy->ice_isTwoway())
{
- AsyncCBPtr acb = new AsyncCB();
- proxy->begin_callback(current.ctx,
- newCallback_CallbackReceiver_callback(acb, &AsyncCB::responseCallback, &AsyncCB::exceptionCallback),
- newCookie(cb));
+ proxy->callbackAsync(move(response), move(error), nullptr, current.ctx);
}
else
{
proxy->callback(current.ctx);
- cb->ice_response();
+ response();
}
}
void
-CallbackI::initiateCallbackEx_async(const AMD_Callback_initiateCallbackExPtr& cb,
- const CallbackReceiverPrx& proxy, const Current& current)
+CallbackI::initiateCallbackExAsync(shared_ptr<CallbackReceiverPrx> proxy,
+ function<void()> response,
+ function<void(exception_ptr)> error,
+ const Current& current)
{
if(proxy->ice_isTwoway())
{
- AsyncCBPtr acb = new AsyncCB();
- proxy->begin_callbackEx(current.ctx,
- newCallback_CallbackReceiver_callbackEx(acb, &AsyncCB::responseCallbackEx, &AsyncCB::exceptionCallbackEx),
- newCookie(cb));
+ proxy->callbackExAsync(move(response), move(error), nullptr, current.ctx);
}
else
{
proxy->callbackEx(current.ctx);
- cb->ice_response();
+ response();
}
}
void
-CallbackI::initiateConcurrentCallback_async(const AMD_Callback_initiateConcurrentCallbackPtr& cb,
- Int number,
- const CallbackReceiverPrx& proxy,
- const Current& current)
+CallbackI::initiateConcurrentCallbackAsync(int number, shared_ptr<CallbackReceiverPrx> proxy,
+ function<void(int)> response,
+ function<void(exception_ptr)> error,
+ const Current& current)
{
- AsyncCBPtr acb = new AsyncCB();
- proxy->begin_concurrentCallback(number, current.ctx,
- newCallback_CallbackReceiver_concurrentCallback(acb, &AsyncCB::responseConcurrentCallback,
- &AsyncCB::exceptionConcurrentCallback),
- newCookie(cb));
+ proxy->concurrentCallbackAsync(number, move(response), move(error), nullptr, current.ctx);
}
void
-CallbackI::initiateWaitCallback_async(const AMD_Callback_initiateWaitCallbackPtr& cb,
- const CallbackReceiverPrx& proxy,
- const Current& current)
+CallbackI::initiateWaitCallbackAsync(shared_ptr<CallbackReceiverPrx> proxy,
+ function<void()> response,
+ function<void(exception_ptr)> error,
+ const Current& current)
{
- AsyncCBPtr acb = new AsyncCB();
- proxy->begin_waitCallback(current.ctx,
- newCallback_CallbackReceiver_waitCallback(acb, &AsyncCB::responseWaitCallback, &AsyncCB::exceptionWaitCallback),
- newCookie(cb));
+ proxy->waitCallbackAsync(move(response), move(error), nullptr, current.ctx);
}
void
-CallbackI::initiateCallbackWithPayload_async(const AMD_Callback_initiateCallbackWithPayloadPtr& cb,
- const CallbackReceiverPrx& proxy,
- const Current& current)
+CallbackI::initiateCallbackWithPayloadAsync(shared_ptr<CallbackReceiverPrx> proxy,
+ function<void()> response,
+ function<void(exception_ptr)> error,
+ const Current& current)
{
Ice::ByteSeq seq(1000 * 1024, 0);
- AsyncCBPtr acb = new AsyncCB();
- proxy->begin_callbackWithPayload(seq, current.ctx,
- newCallback_CallbackReceiver_callbackWithPayload(acb, &AsyncCB::responseCallbackWithPayload,
- &AsyncCB::exceptionCallbackWithPayload),
- newCookie(cb));
+ proxy->callbackWithPayloadAsync(seq, move(response), move(error), nullptr, current.ctx);
}
void