コード例 #1
0
ファイル: Event.php プロジェクト: wosenbo/workerman-todpole
 /**
  * 有消息时
  * @param int $client_id
  * @param string $message
  */
 public static function onMessage($client_id, $message)
 {
     // 如果是websocket握手
     if (self::checkHandshake($message)) {
         $new_message = '{"type":"welcome","id":' . $client_id . '}';
         // 发送数据包到客户端
         return GateWay::sendToCurrentClient(WebSocket::encode($new_message));
         return;
     }
     // websocket 通知连接即将关闭
     if (WebSocket::isClosePacket($message)) {
         Gateway::kickClient($client_id, '');
         self::onClose($client_id);
         return;
     }
     // 获取客户端原始请求
     $message = WebSocket::decode($message);
     $message_data = json_decode($message, true);
     if (!$message_data) {
         return;
     }
     switch ($message_data['type']) {
         // 更新用户
         case 'update':
             // 转播给所有用户
             Gateway::sendToAll(WebSocket::encode(json_encode(array('type' => 'update', 'id' => $client_id, 'angle' => $message_data["angle"] + 0, 'momentum' => $message_data["momentum"] + 0, 'x' => $message_data["x"] + 0, 'y' => $message_data["y"] + 0, 'life' => 1, 'name' => isset($message_data['name']) ? $message_data['name'] : 'Guest.' . $client_id, 'authorized' => false))));
             return;
             // 聊天
         // 聊天
         case 'message':
             // 向大家说
             $new_message = array('type' => 'message', 'id' => $client_id, 'message' => $message_data['message']);
             return Gateway::sendToAll(WebSocket::encode(json_encode($new_message)));
     }
 }