GameBuffer.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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/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. );
  43. public static $scmdMap = array(
  44. self::SCMD_BROADCAST => 'broadcast',
  45. self::SCMD_GET_GATEWAY => 'getGateway',
  46. self::SCMD_LOGIN => 'login',
  47. self::SCMD_ON_CONNECT =>'onConnect',
  48. self::SCMD_ON_CLOSE => 'onClose',
  49. );
  50. public static function sendToGateway($address, $bin_data, $to_uid = 0, $from_uid = 0)
  51. {
  52. $client = stream_socket_client($address);
  53. $len = stream_socket_sendto($client, $bin_data);
  54. return $len == strlen($bin_data);
  55. }
  56. public static function sendToUid($uid, $buffer)
  57. {
  58. $address = Event::getAddressByUid($uid);
  59. if($address)
  60. {
  61. return self::sendToGateway($address, $buffer);
  62. }
  63. return false;
  64. }
  65. public static function sendToAll($buffer)
  66. {
  67. $data = GameBuffer::decode($buffer);
  68. $all_addresses = Store::get('GLOBAL_GATEWAY_ADDRESS');
  69. foreach($all_addresses as $address)
  70. {
  71. self::sendToGateway($address, $buffer);
  72. }
  73. }
  74. }