GameWorker.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. /**
  3. *
  4. * 处理具体聊天逻辑
  5. * 1、查询某用户内网通信gateway ip及端口
  6. * 2、向某用户对应内网gateway ip及端口发送数据
  7. *
  8. * @author walkor <worker-man@qq.com>
  9. *
  10. */
  11. require_once WORKERMAN_ROOT_DIR . 'man/Core/SocketWorker.php';
  12. require_once WORKERMAN_ROOT_DIR . 'applications/Game/GameBuffer.php';
  13. require_once WORKERMAN_ROOT_DIR . 'applications/Game/Event.php';
  14. require_once WORKERMAN_ROOT_DIR . 'applications/Game/User.php';
  15. class GameWorker extends Man\Core\SocketWorker
  16. {
  17. protected $data = array();
  18. public function dealInput($recv_str)
  19. {
  20. return GameBuffer::input($recv_str, $this->data);
  21. }
  22. public function dealProcess($recv_str)
  23. {
  24. if(!isset(GameBuffer::$cmdMap[$this->data['cmd']]) || !isset(GameBuffer::$scmdMap[$this->data['sub_cmd']]))
  25. {
  26. $this->notice('cmd err ' . serialize($this->data) );
  27. return;
  28. }
  29. $class = GameBuffer::$cmdMap[$this->data['cmd']];
  30. $method = GameBuffer::$scmdMap[$this->data['sub_cmd']];
  31. if(!method_exists($class, $method))
  32. {
  33. if($class == 'System')
  34. {
  35. switch($this->data['sub_cmd'])
  36. {
  37. case GameBuffer::SCMD_ON_CONNECT:
  38. call_user_func_array(array('Event', 'onConnect'), array('udp://'.$this->getRemoteIp().':'.$this->data['to_uid'], $this->data['from_uid'], $this->data['body']));
  39. return;
  40. case GameBuffer::SCMD_ON_CLOSE:
  41. call_user_func_array(array('Event', 'onClose'), array('udp://'.$this->getRemoteIp().':'.$this->data['to_uid'], $this->data['from_uid']));
  42. return;
  43. }
  44. }
  45. $this->notice("cmd err $class::$method not exists");
  46. return;
  47. }
  48. call_user_func_array(array($class, $method), array($this->data));
  49. }
  50. }