GameBuffer.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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/Game/Event.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 SCMD_CONNECT_SUCCESS = 5;
  30. // 用户中心
  31. const CMD_USER = 1;
  32. // 登录
  33. const SCMD_LOGIN = 1 ;
  34. // 获取用户内部通信网关
  35. const SCMD_GET_GATEWAY = 4;
  36. // 普通业务处理
  37. const CMD_MAP = 2;
  38. public static $cmdMap = array(
  39. self::CMD_USER => 'User',
  40. self::CMD_MAP => 'Map',
  41. self::CMD_GATEWAY => 'GateWay',
  42. self::CMD_SYSTEM => 'System',
  43. );
  44. public static $scmdMap = array(
  45. self::SCMD_BROADCAST => 'broadcast',
  46. self::SCMD_GET_GATEWAY => 'getGateway',
  47. self::SCMD_LOGIN => 'login',
  48. self::SCMD_ON_CONNECT =>'onConnect',
  49. self::SCMD_ON_CLOSE => 'onClose',
  50. );
  51. public static function sendToGateway($address, $bin_data, $to_uid = 0, $from_uid = 0)
  52. {
  53. $client = stream_socket_client($address);
  54. $len = stream_socket_sendto($client, $bin_data);
  55. return $len == strlen($bin_data);
  56. }
  57. public static function sendToUid($uid, $buffer)
  58. {
  59. $address = Event::getAddressByUid($uid);
  60. if($address)
  61. {
  62. return self::sendToGateway($address, $buffer);
  63. }
  64. return false;
  65. }
  66. public static function sendToAll($buffer)
  67. {
  68. $data = GameBuffer::decode($buffer);
  69. $all_addresses = Store::get('GLOBAL_GATEWAY_ADDRESS');
  70. foreach($all_addresses as $address)
  71. {
  72. self::sendToGateway($address, $buffer);
  73. }
  74. }
  75. }