game.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. ini_set('display_errors', 'on');
  3. error_reporting(E_ALL);
  4. define('WORKERMAN_ROOT_DIR', __DIR__.'/../../../');
  5. include '../GameBuffer.php';
  6. $sock = stream_socket_client("tcp://115.28.44.100:8282");
  7. if(!$sock)exit("can not create sock\n");
  8. $buf = new GameBuffer();
  9. $buf->body = rand(1,100000000);
  10. fwrite($sock, $buf->getBuffer());
  11. $ret = fread($sock, 1024);
  12. $ret = GameBuffer::decode($ret);
  13. if(isset($ret['to_uid']))
  14. {
  15. echo "login success , your uid is [{$ret['to_uid']}]\n";
  16. }
  17. stream_set_blocking($sock, 0);
  18. stream_set_blocking(STDIN, 0);
  19. $read = array(STDIN, $sock);
  20. $write = $ex = array();
  21. while(1)
  22. {
  23. $read_copy = $read;
  24. if($ret = stream_select($read_copy, $write, $ex, 1000))
  25. {
  26. foreach($read as $fd)
  27. {
  28. // 接收消息
  29. if((int)$fd === (int)$sock)
  30. {
  31. $ret = fread($fd, 102400);
  32. if(!$ret){continue;exit("connection closed\n ");}
  33. $ret = GameBuffer::decode($ret);
  34. echo $ret['from_uid'] , ':', $ret['body'], "\n";
  35. continue;
  36. }
  37. // 向某个uid发送消息 格式为 uid:xxxxxxxx
  38. $ret = fgets(STDIN, 10240);
  39. if(!$ret)continue;
  40. if(preg_match("/(\d+):(.*)/", $ret, $match))
  41. {
  42. $uid = $match[1];
  43. $words = $match[2];
  44. $buf = new GameBuffer();
  45. $buf->header['cmd'] = GameBuffer::CMD_USER;
  46. $buf->header['sub_cmd'] = GameBuffer::SCMD_SAY;
  47. $buf->header['to_uid'] = $uid;
  48. $buf->body = $words;
  49. fwrite($sock, $buf->getBuffer());
  50. continue;
  51. }
  52. // 向所有用户发消息
  53. $buf = new GameBuffer();
  54. $buf->header['cmd'] = GameBuffer::CMD_USER;
  55. $buf->header['sub_cmd'] = GameBuffer::SCMD_BROADCAST;
  56. $buf->body = trim($ret);
  57. fwrite($sock, $buf->getBuffer());
  58. continue;
  59. }
  60. }
  61. }
  62. die;
  63. $buf->header['cmd'] = GameBuffer::CMD_USER;
  64. $buf->header['sub_cmd'] = GameBuffer::SCMD_BROADCAST;
  65. $buf->body = $argv[1];
  66. fwrite($sock, $buf->getBuffer());
  67. while(1)
  68. {
  69. $ret = fread($sock, 1024);
  70. if($ret)
  71. {
  72. var_export(GameBuffer::decode($ret));
  73. }
  74. }