GameWorker.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 . 'Core/SocketWorker.php';
  12. require_once WORKERMAN_ROOT_DIR . 'Applications/GameBuffer.php';
  13. require_once WORKERMAN_ROOT_DIR . 'Applications/Game/Event.php';
  14. class GameWorker extends WORKERMAN\Core\SocketWorker
  15. {
  16. protected $data = array();
  17. public function dealInput($recv_str)
  18. {
  19. return GameBuffer::input($recv_str, $this->data);
  20. }
  21. public function dealProcess($recv_str)
  22. {
  23. if(!isset(GameBuffer::$cmdMap[$this->data['cmd']]) || !isset(GameBuffer::$scmdMap[$this->data['sub_cmd']]))
  24. {
  25. $this->notice('cmd err ' . serialize($this->data) );
  26. return;
  27. }
  28. $class = GameBuffer::$cmdMap[$this->data['cmd']];
  29. $method = GameBuffer::$scmdMap[$this->data['sub_cmd']];
  30. if(!method_exists($class, $method))
  31. {
  32. if($class == 'System')
  33. {
  34. switch($this->data['sub_cmd'])
  35. {
  36. case GameBuffer::SCMD_ON_CONNECT:
  37. call_user_func_array(array('Event', 'onConnect'), array('udp://'.$this->getRemoteIp().':'.$this->data['to_uid'], $this->data['from_uid'], $this->data['body']));
  38. return;
  39. }
  40. }
  41. $this->notice("cmd err $class::$method not exists");
  42. return;
  43. }
  44. call_user_func_array(array($class, $method), $this->data);
  45. }
  46. }