UserController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace App\Home\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use GatewayWorker\Lib\Gateway;
  6. use GuzzleHttp\Client;
  7. use App\Model\User;
  8. use App\Model\Room;
  9. use App\Model\RoomUser;
  10. class UserController extends Controller
  11. {
  12. /**
  13. * 获取用户信息
  14. */
  15. public function Info(Request $request)
  16. {
  17. $cmcc_id = $request->input('user_id');
  18. $mt = $request->input('mt');
  19. if(!$cmcc_id || !$mt){
  20. $response['code'] = 400;
  21. $response['msg'] = '缺少参数';
  22. return response()->json($response);
  23. }
  24. //请求用户信息
  25. $client = new Client([
  26. 'verify' => false,
  27. ]);
  28. $ip = '211.139.191.175';
  29. $port = '38083';
  30. $req_time = date('YmdHis');
  31. $sign = md5($cmcc_id . $req_time . $mt);
  32. $params['req_param'] = [
  33. "pub_info" => [
  34. "req_src" => 1,
  35. "ver" => "1.0",
  36. "req_time" => $req_time,
  37. "sign" => $sign,
  38. ],
  39. "page_info" => [
  40. "current_page" => 1,
  41. "page_size" => 10,
  42. ],
  43. "busi_info" => [],
  44. ];
  45. // $response = $client->request('POST', "http://{$ip}:{$port}/hgs/uc/queryusergameinfo",[
  46. // 'form_params' => [
  47. // 'username' => $user->name,
  48. // ]
  49. // ]);
  50. // $cmcc_user = $response->getBody()->getContents();
  51. //判断请求结果 todo ...
  52. //记录用户信息 todo ...
  53. //获取当前系统是否存在
  54. $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->first();
  55. if($user){
  56. }else{
  57. $date = date("Y-m-d H:i:s");
  58. //记录用户信息
  59. $user_id = User::insertGetId([
  60. "name" => "测试用户_" . $cmcc_id,
  61. "avatar" => "https://picsum.photos/200/200/?image=". rand(1, 300),
  62. "cmcc_id" => $cmcc_id,
  63. "mt" => $cmcc_id,
  64. "win_count" => 0,
  65. "lose_count" => 0,
  66. "is_login" => 0,
  67. "is_robot" => 0,
  68. "created_at" => $date,
  69. "updated_at" => $date,
  70. ]);
  71. $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->first();
  72. }
  73. if($user->win_count == 0 || ($user->win_count == 0 && $user->lose_count == 0)){
  74. $win_rate = 0;
  75. }else{
  76. $win_rate = $user->win_count / ($user->win_count + $user->lose_count);
  77. }
  78. //测试固定用户信息
  79. $info['user_id'] = $user->user_id;
  80. $info['name'] = $user->name;
  81. $info['avatar'] = $user->avatar;
  82. $info['win_rate'] = $win_rate;
  83. $info['play_next'] = 1;
  84. //设置session
  85. $request->session()->put('user_id', $user->user_id);
  86. $response['code'] = 0;
  87. $response['msg'] = '获取用户信息成功';
  88. $response['info'] = $info;
  89. return response()->json($response);
  90. }
  91. /**
  92. * 绑定Socket
  93. */
  94. public function Bind(Request $request)
  95. {
  96. if(!$request->session()->has('user_id')){
  97. $response['code'] = 400;
  98. $response['msg'] = '请先登录';
  99. return response()->json($response);
  100. }
  101. $user_id = $request->session()->get('user_id');
  102. $client_id = $request->input('client_id');
  103. //注册地址
  104. Gateway::$registerAddress = '127.0.0.1:1238';
  105. //异地登录机制
  106. $user = User::where("user_id", $user_id)->first();
  107. if($user->client_id != $client_id){
  108. $message = [
  109. "type" => "replace_login",
  110. "msg" => "用户在其他地方登录了,当前用户端断开连接",
  111. ];
  112. Gateway::sendToClient($user->client_id, json_encode($message));
  113. //断开旧ID
  114. Gateway::closeClient($user->client_id);
  115. }
  116. //绑定用户ID
  117. Gateway::bindUid($client_id, $user_id);
  118. //更新用户最新client_id
  119. $update_data['client_id'] = $client_id;
  120. User::where("user_id", $user_id)->update($update_data);
  121. $response['info']['in_game'] = 0; //是否还在对战中
  122. //判断用户是否还在对战
  123. $room_id = RoomUser::where([
  124. "user_id" => $user_id,
  125. "state" => 1,
  126. ])->value("room_id");
  127. //查看房间状态
  128. $room_state = Room::where("room_id", $room_id)->value("is_close");
  129. if($room_id && !$room_state){
  130. Gateway::joinGroup($client_id, $room_id);
  131. $response['info']['in_game'] = 1;
  132. }elseif($room_id){
  133. unset($update_data);
  134. $update_data['state'] = 2;
  135. //更新一下房间状态
  136. RoomUser::where([
  137. "user_id" => $user_id,
  138. "room_id" => $room_id,
  139. "state" => 1,
  140. ])->update($update_data);
  141. }
  142. $response['code'] = 0;
  143. $response['msg'] = '服务连接成功';
  144. return response()->json($response);
  145. }
  146. }