コード例 #1
0
 /**
  * Callback when a client sends a message
  *
  * @param \WebSocketServer\Core\Server   $server  The websocket server
  * @param \WebSocketServer\Socket\Client $client  The client
  * @param \WebSocketServer\Socket\Frame  $frame The message
  */
 public function onMessage(Server $server, Client $client, Frame $frame)
 {
     $data = json_decode($frame->getData());
     switch ($data->event) {
         case 'listRooms':
             $client->sendText(json_encode(['event' => $data->event, 'rooms' => $this->getRooms()]));
             break;
         case 'connect':
             $client->sendText(json_encode(['event' => $data->event, 'result' => $this->connect($data->roomId, $data->username), 'roomId' => $data->roomId]));
             break;
         case 'loadRoom':
             $client->sendText(json_encode(['event' => $data->event, 'users' => $this->getUsersOfRoom($data->roomId), 'messages' => []]));
             $room = $this->roomCollection->getById($data->roomId);
             $user = $room->getUser(session_id());
             $server->sendToAllButClient(json_encode(['event' => 'userConnected', 'id' => session_id(), 'username' => $user->getUsername(), 'avatarHash' => md5($user->getUsername()), 'message' => $user->getUsername() . ' entered the room.']), $client);
             break;
         case 'userStartedTyping':
             $server->broadcast(json_encode(['event' => $data->event, 'id' => session_id()]));
             break;
         case 'userStoppedTyping':
             $server->broadcast(json_encode(['event' => $data->event, 'id' => session_id()]));
             break;
         case 'sendMessage':
             $room = $this->roomCollection->getById($data->roomId);
             $user = $room->getUser(session_id());
             $server->broadcast(json_encode(['event' => $data->event, 'message' => ['type' => 'post', 'text' => $data->message, 'user' => ['id' => session_id(), 'username' => $user->getUsername(), 'avatarHash' => md5($user->getUsername())]]]));
             break;
     }
 }