GameBuffer.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. *
  4. * 命令字相关
  5. * @author walkor <worker-man@qq.com>
  6. *
  7. */
  8. require_once WORKERMAN_ROOT_DIR . 'applications/Game/Protocols/Buffer.php';
  9. require_once WORKERMAN_ROOT_DIR . 'applications/Game/Event.php';
  10. class GameBuffer extends 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 = 3;
  22. // 根据uid踢人
  23. const SCMD_KICK_UID = 4;
  24. // 根据地址和socket编号踢人
  25. const SCMD_KICK_ADDRESS = 5;
  26. // 广播内容
  27. const SCMD_BROADCAST = 6;
  28. // 通知连接成功
  29. const SCMD_CONNECT_SUCCESS = 7;
  30. // 用户中心
  31. const CMD_USER = 1;
  32. // 登录
  33. const SCMD_LOGIN = 8;
  34. // 发言
  35. const SCMD_SAY = 9;
  36. public static $cmdMap = array(
  37. self::CMD_USER => 'User',
  38. self::CMD_GATEWAY => 'GateWay',
  39. self::CMD_SYSTEM => 'System',
  40. );
  41. public static $scmdMap = array(
  42. self::SCMD_BROADCAST => 'broadcast',
  43. self::SCMD_LOGIN => 'login',
  44. self::SCMD_ON_CONNECT =>'onConnect',
  45. self::SCMD_ON_CLOSE => 'onClose',
  46. self::SCMD_SAY => 'say',
  47. );
  48. public static function sendToGateway($address, $bin_data, $to_uid = 0, $from_uid = 0)
  49. {
  50. $client = stream_socket_client($address);
  51. $len = stream_socket_sendto($client, $bin_data);
  52. return $len == strlen($bin_data);
  53. }
  54. public static function sendToUid($uid, $buffer)
  55. {
  56. $address = Event::getAddressByUid($uid);
  57. if($address)
  58. {
  59. return self::sendToGateway($address, $buffer);
  60. }
  61. return false;
  62. }
  63. public static function sendToAll($buffer)
  64. {
  65. $data = GameBuffer::decode($buffer);
  66. $all_addresses = Store::get('GLOBAL_GATEWAY_ADDRESS');
  67. foreach($all_addresses as $address)
  68. {
  69. self::sendToGateway($address, $buffer);
  70. }
  71. }
  72. }