public function handleRouterStart(RouterStartEvent $event)
{
/** @var Session $session */
$session = null;
// create a new transport for the client side to use
$clientTransport = new InternalClientTransport(function ($msg) use(&$session) {
$session->dispatchMessage(Message::createMessageFromArray(json_decode(json_encode($msg))));
}, $this->loop);
// create a new transport for the router side to use
$transport = new InternalClientTransport(function ($msg) use($clientTransport) {
$this->internalClient->onMessage($clientTransport, Message::createMessageFromArray(json_decode(json_encode($msg))));
}, $this->loop);
$transport->setTrusted($this->trusted);
$session = $this->router->createNewSession($transport);
$this->session = $session;
// connect the transport to the Router/Peer
$this->router->getEventDispatcher()->dispatch("connection_open", new ConnectionOpenEvent($session));
// open the client side
$this->internalClient->onOpen($clientTransport);
// internal client shouldn't retry
$this->internalClient->setAttemptRetry(false);
// tell the internal client to start up
$this->internalClient->start(false);
}