public function createNewSessionForMessageSubject(MessageSubject $ms) { $transport = new RxWebsocketTransport($ms); $session = $this->router->createNewSession($transport); $this->router->getEventDispatcher()->dispatch('connection_open', new ConnectionOpenEvent($session)); $ms->subscribe(new CallbackObserver(function ($message) use($transport, $session) { $thruwayMessage = $transport->getSerializer()->deserialize($message); if ($thruwayMessage instanceof HelloMessage) { $details = $thruwayMessage->getDetails(); $details->transport = (object) $session->getTransport()->getTransportDetails(); $thruwayMessage->setDetails($details); } $session->dispatchMessage($thruwayMessage); }, function (\Exception $err) use($session) { Logger::error($this, "Error in message callback"); $this->router->getEventDispatcher()->dispatch('connection_close', new ConnectionCloseEvent($session)); }, function () use($session) { Logger::info($this, "MessageSubject completed"); $this->router->getEventDispatcher()->dispatch('connection_close', new ConnectionCloseEvent($session)); })); }
public function close() { $this->ms->onCompleted(); }