/**
  * Called whenever a client disconnects.
  *
  * @param ClientEvent $event
  */
 public function onClientDisconnect(ClientEvent $event)
 {
     $conn = $event->getConnection();
     $loggerContext = array('connection_id' => $conn->resourceId, 'session_id' => $conn->WAMP->sessionId, 'storage_id' => $conn->WAMP->clientStorageId);
     try {
         $user = $this->clientStorage->getClient($conn->WAMP->clientStorageId);
         //go here only if getClient doesn't throw error
         $this->clientStorage->removeClient($conn->resourceId);
         $username = $user instanceof UserInterface ? $user->getUsername() : $user;
         $loggerContext['username'] = $username;
         $this->logger->info(sprintf('%s disconnected', $username), $loggerContext);
     } catch (ClientNotFoundException $e) {
         $this->logger->info('user timed out', $loggerContext);
     }
 }
 /**
  * Called whenever a client disconnects.
  *
  * @param ClientEvent $event
  */
 public function onClientDisconnect(ClientEvent $event)
 {
     $conn = $event->getConnection();
     try {
         $user = $this->clientStorage->getClient($conn->WAMP->clientStorageId);
         $username = $user instanceof UserInterface ? $user->getUsername() : $user;
         $this->logger->info(sprintf('%s disconnected [%]', $username, $user instanceof UserInterface ? implode(', ', $user->getRoles()) : array()), array('connection_id' => $conn->resourceId, 'session_id' => $conn->WAMP->sessionId, 'storage_id' => $conn->WAMP->clientStorageId));
     } catch (StorageException $e) {
         $this->logger->info(sprintf('%s disconnected [%s]', 'Expired user', ''), array('connection_id' => $conn->resourceId, 'session_id' => $conn->WAMP->sessionId, 'storage_id' => $conn->WAMP->clientStorageId));
     }
     $this->clientStorage->removeClient($conn->resourceId);
 }