不使用中间件

imi中内置实现了中间件+控制器方式开发tcp,在一些场景也可以选择不使用,直接监听服务器的packet事件,进行手动处理。

监听写法

  1. <?php
  2. namespace Imi\Server\UdpServer\Listener;
  3. use Imi\ServerManage;
  4. use Imi\ConnectContext;
  5. use Imi\RequestContext;
  6. use Imi\Bean\Annotation\ClassEventListener;
  7. use Imi\Server\Event\Param\PacketEventParam;
  8. use Imi\Server\UdpServer\Message\PacketData;
  9. use Imi\Server\Event\Listener\IPacketEventListener;
  10. /**
  11. * Packet事件前置处理
  12. * @ClassEventListener(className="Imi\Server\UdpServer\Server",eventName="packet",priority=PHP_INT_MAX)
  13. */
  14. class BeforePacket implements IPacketEventListener
  15. {
  16. /**
  17. * 事件处理方法
  18. * @param PacketEventParam $e
  19. * @return void
  20. */
  21. public function handle(PacketEventParam $e)
  22. {
  23. // 如果服务器名不是主服务器就返回
  24. if('main' !== $e->getTarget()->getName())
  25. {
  26. return;
  27. }
  28. var_dump($e->data);
  29. }
  30. }