BaseHandler.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\webscoket;
  12. use app\services\user\UserServices;
  13. use qiniu\utils\Arr;
  14. use think\facade\Log;
  15. /**
  16. * socket 事件基础类
  17. * Class BaseHandler
  18. * @package app\webscoket
  19. */
  20. abstract class BaseHandler
  21. {
  22. /**
  23. * @var Manager
  24. */
  25. protected $manager;
  26. /**
  27. * @var Room
  28. */
  29. protected $room;
  30. /**
  31. * @var int
  32. */
  33. protected $fd;
  34. /**
  35. * 用户聊天端
  36. * @var int|null
  37. */
  38. protected $formType;
  39. /**
  40. * 登陆
  41. * @param array $data
  42. * @param Response $response
  43. * @return mixed
  44. */
  45. abstract public function login(array $data, Response $response);
  46. /**
  47. * 事件入口
  48. * @param $event
  49. * @return null |null
  50. */
  51. public function handle($event)
  52. {
  53. [$method, $result, $manager, $room] = $event;
  54. $this->manager = $manager;
  55. $this->room = $room;
  56. $this->fd = array_shift($result);
  57. $this->formType = array_shift($result);
  58. if (method_exists($this, $method)) {
  59. if ($method == 'login' && is_string($result[0])) {
  60. $result[0] = ['token' => $result[0]];
  61. }
  62. return $this->{$method}(...$result);
  63. } else {
  64. Log::error('socket 回调事件' . $method . '不存在,消息内容为:' . json_encode($result));
  65. return null;
  66. }
  67. }
  68. /**
  69. * 聊天事件
  70. * @param array $data
  71. * @param Response $response
  72. */
  73. abstract public function chat(array $data, Response $response);
  74. /**
  75. * 切换用户聊天
  76. * @param array $data
  77. * @param Response $response
  78. */
  79. abstract public function to_chat(array $data, Response $response);
  80. /**
  81. * 测试原样返回
  82. * @param array $data
  83. * @param Response $response
  84. * @return bool|\think\response\Json|null
  85. */
  86. public function test(array $data, Response $response)
  87. {
  88. return $response->success($data);
  89. }
  90. /**
  91. * 关闭连接触发
  92. * @param array $data
  93. * @param Response $response
  94. */
  95. public function close(array $data, Response $response)
  96. {
  97. $uid = $data['uid'] ?? 0;
  98. if ($uid) {
  99. }
  100. }
  101. }