Worker.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. /**
  3. *
  4. * 处理具体逻辑
  5. *
  6. * @author walkor <worker-man@qq.com>
  7. *
  8. */
  9. define('ROOT_DIR', realpath(__DIR__.'/../'));
  10. require_once ROOT_DIR . '/Protocols/GatewayProtocol.php';
  11. require_once ROOT_DIR . '/Event.php';
  12. class Worker extends Man\Core\SocketWorker
  13. {
  14. public function dealInput($recv_str)
  15. {
  16. return GatewayProtocol::input($recv_str);
  17. }
  18. public function dealProcess($recv_str)
  19. {
  20. $pack = new GatewayProtocol($recv_str);
  21. Context::$client_ip = $pack->header['client_ip'];
  22. Context::$client_port = $pack->header['client_port'];
  23. Context::$local_ip = $pack->header['local_ip'];
  24. Context::$local_port = $pack->header['local_port'];
  25. Context::$socket_id = $pack->header['socket_id'];
  26. Context::$uid = $pack->header['uid'];
  27. switch($pack->header['cmd'])
  28. {
  29. case GatewayProtocol::CMD_ON_CONNECTION:
  30. $ret = call_user_func_array(array('Event', 'onConnect'), array($pack->body));
  31. break;
  32. case GatewayProtocol::CMD_ON_MESSAGE:
  33. $ret = call_user_func_array(array('Event', 'onMessage'), array(Context::$uid, $pack->body));
  34. break;
  35. case GatewayProtocol::CMD_ON_CLOSE:
  36. $ret = call_user_func_array(array('Event', 'onClose'), array(Context::$uid));
  37. break;
  38. }
  39. Context::clear();
  40. return $ret;
  41. }
  42. }
  43. /**
  44. * 上下文 包含当前用户uid, 内部通信local_ip local_port socket_id ,以及客户端client_ip client_port
  45. * @author walkor
  46. *
  47. */
  48. class Context
  49. {
  50. public static $series_id;
  51. public static $local_ip;
  52. public static $local_port;
  53. public static $socket_id;
  54. public static $client_ip;
  55. public static $client_port;
  56. public static $uid;
  57. public static function clear()
  58. {
  59. self::$series_id = self::$local_ip = self::$local_port = self::$socket_id = self::$client_ip = self::$client_port = self::$uid = null;
  60. }
  61. }