/** * @param ZmqEvent $event * @return mixed */ public function __invoke($event) { return Observable::create(function (ObserverInterface $observer) use($event) { $id = $event->getLabel('id'); $req = new ZmqRequest(); $req->subscribe($observer); $disposable = $this->source->filter(function (Event $event) use($id) { return $event->hasLabel('id', $id); })->take(1)->subscribe($req); $req->subscribeCallback(null, null, function () use($disposable) { $disposable->dispose(); }); return new CallbackDisposable(function () use($disposable) { $disposable->dispose(); }); }); }