| 250 | */ |
| 251 | template <typename AsyncProviderType> |
| 252 | static void |
| 253 | execute(AsyncReceiver<AsyncProviderType> *event_receiver, AsyncProviderType *provider, std::shared_ptr<Mutex> mutex) |
| 254 | { |
| 255 | if (!mutex.get()) { |
| 256 | mutex.reset(new Mutex); |
| 257 | } |
| 258 | std::shared_ptr<AsyncDispatchController<AsyncReceiver<AsyncProviderType>, AsyncProviderType>> dispatcher( |
| 259 | new AsyncDispatchController<AsyncReceiver<AsyncProviderType>, AsyncProviderType>(event_receiver, provider, mutex)); |
| 260 | std::shared_ptr<AsyncReceiverPromise<AsyncReceiver<AsyncProviderType>, AsyncProviderType>> receiver_promise( |
| 261 | new AsyncReceiverPromise<AsyncReceiver<AsyncProviderType>, AsyncProviderType>(dispatcher)); |
| 262 | event_receiver->receiver_promises_[dispatcher.get()] = receiver_promise; |
| 263 | provider->doRun(dispatcher); |
| 264 | } |
| 265 | }; |
| 266 | |
| 267 | } // end namespace atscppapi |