GameWorker.php 1.8 KB

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