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();
 }