MessageController.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. /**
  5. * MessageController
  6. * @package App\Controller
  7. */
  8. use App\JsonRpc\UserServiceInterface;
  9. use Hyperf\Di\Annotation\Inject;
  10. use Hyperf\Context\ApplicationContext;
  11. use Swoole\WebSocket\Server as WebSocketServer;
  12. use App\Service\RedisService;
  13. use Hyperf\Server\ServerManager;
  14. use function Hyperf\Support\call;
  15. use swoole\Server;
  16. class MessageController extends AbstractController
  17. {
  18. /**
  19. * @var UserServiceInterface
  20. */
  21. #[Inject]
  22. private $userServiceClient;
  23. public function sendAdminMessage($data)
  24. {
  25. try {
  26. // 获取管理员列表
  27. $adminList = $this->userServiceClient->getTypeUserList(['type_id' => 10000]);
  28. // 获取 Swoole WebSocket Server 实例
  29. $server = \Hyperf\Context\ApplicationContext::getContainer()->get(\Swoole\Server::class);
  30. $redisClient = new RedisService();
  31. if ($adminList && isset($adminList['data'])) {
  32. foreach ($adminList['data'] as $admin) {
  33. $fd = $redisClient->findFd((int)$admin['id']);
  34. if ($fd && $server->isEstablished((int)$fd)) {
  35. $server->push((int)$fd, json_encode($data));
  36. }
  37. }
  38. }
  39. return true;
  40. } catch (\Throwable $e) {
  41. var_dump('发送消息错误: ' . $e->getMessage());
  42. return false;
  43. }
  44. }
  45. }