GameBuffer.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. *
  4. * 命令字相关
  5. * @author walkor <worker-man@qq.com>
  6. *
  7. */
  8. require_once WORKERMAN_ROOT_DIR . 'Protocols/Buffer.php';
  9. require_once WORKERMAN_ROOT_DIR . 'Applications/System.php';
  10. class GameBuffer extends WORKERMAN\Protocols\Buffer
  11. {
  12. // 系统命令
  13. const CMD_SYSTEM = 128;
  14. // 连接事件
  15. const SCMD_ON_CONNECT = 1;
  16. // 关闭事件
  17. const SCMD_ON_CLOSE = 2;
  18. // 发送给网关的命令
  19. const CMD_GATEWAY = 129;
  20. // 给用户发送数据包
  21. const SCMD_SEND_DATA = 1;
  22. // 根据uid踢人
  23. const SCMD_KICK_UID = 2;
  24. // 根据地址和socket编号踢人
  25. const SCMD_KICK_ADDRESS = 3;
  26. // 广播内容
  27. const SCMD_BROADCAST = 4;
  28. // 用户中心
  29. const CMD_USER = 1;
  30. // 登录
  31. const SCMD_LOGIN = 1 ;
  32. // 获取用户内部通信网关
  33. const SCMD_GET_GATEWAY = 4;
  34. // 普通业务处理
  35. const CMD_MAP = 2;
  36. public static $cmdMap = array(
  37. self::CMD_USER => 'User',
  38. self::CMD_MAP => 'Map',
  39. self::CMD_GATEWAY => 'GateWay',
  40. self::CMD_SYSTEM => 'System',
  41. );
  42. public static $scmdMap = array(
  43. self::SCMD_BROADCAST => 'broadcast',
  44. self::SCMD_GET_GATEWAY => 'getGateway',
  45. self::SCMD_LOGIN => 'login',
  46. self::SCMD_ON_CONNECT =>'onConnect',
  47. self::SCMD_ON_CLOSE => 'onClose',
  48. );
  49. public static function sendToGateway($address, $bin_data, $to_uid = 0, $from_uid = 0)
  50. {
  51. $client = stream_socket_client($address);
  52. $len = stream_socket_sendto($client, $bin_data);
  53. return $len == strlen($bin_data);
  54. }
  55. public static function sendToUid($uid, $buffer)
  56. {
  57. $address = System::getAddressByUid($uid);
  58. if($address)
  59. {
  60. return self::sendToGateway($address, $buffer);
  61. }
  62. return false;
  63. }
  64. public static function sendToAll($buffer)
  65. {
  66. $data = GameBuffer::decode($buffer);
  67. $all_addresses = Store::get('GLOBAL_GATEWAY_ADDRESS');
  68. foreach($all_addresses as $address)
  69. {
  70. self::sendToGateway($address, $buffer);
  71. }
  72. }
  73. }