Event.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. *
  4. * 主逻辑
  5. * 主要是处理 onMessage onClose 三个方法
  6. * @author walkor <walkor@workerman.net>
  7. *
  8. */
  9. use \GatewayWorker\Lib\Gateway;
  10. class Event
  11. {
  12. /**
  13. * 有消息时
  14. * @param int $client_id
  15. * @param string $message
  16. */
  17. public static function onMessage($client_id, $message)
  18. {
  19. // 获取客户端请求
  20. $message_data = json_decode($message, true);
  21. if(!$message_data)
  22. {
  23. return ;
  24. }
  25. switch($message_data['type'])
  26. {
  27. case 'login':
  28. Gateway::sendToCurrentClient('{"type":"welcome","id":'.$client_id.'}');
  29. break;
  30. // 更新用户
  31. case 'update':
  32. // 转播给所有用户
  33. Gateway::sendToAll(json_encode(
  34. array(
  35. 'type' => 'update',
  36. 'id' => $client_id,
  37. 'angle' => $message_data["angle"]+0,
  38. 'momentum' => $message_data["momentum"]+0,
  39. 'x' => $message_data["x"]+0,
  40. 'y' => $message_data["y"]+0,
  41. 'life' => 1,
  42. 'name' => isset($message_data['name']) ? $message_data['name'] : 'Guest.'.$client_id,
  43. 'authorized' => false,
  44. )
  45. ));
  46. return;
  47. // 聊天
  48. case 'message':
  49. // 向大家说
  50. $new_message = array(
  51. 'type'=>'message',
  52. 'id'=>$client_id,
  53. 'message'=>$message_data['message'],
  54. );
  55. return Gateway::sendToAll(json_encode($new_message));
  56. }
  57. }
  58. /**
  59. * 当用户断开连接时
  60. * @param integer $client_id 用户id
  61. */
  62. public static function onClose($client_id)
  63. {
  64. // 广播 xxx 退出了
  65. GateWay::sendToAll(json_encode(array('type'=>'closed', 'id'=>$client_id)));
  66. }
  67. }