session()->has('user_id')){ $response['code'] = 400; $response['msg'] = '请先登录'; return response()->json($response); } $room_id = $request->input('room_id'); if(!$room_id){ $response['code'] = 400; $response['msg'] = '缺少房间参数'; return response()->json($response); } //获取当前房间问题 $questions = Redis::smembers($room_id); $question = Question::inRandomOrder()->select('question_id','title')->where("is_released",1)->whereNotIn("question_id", $questions)->first(); $options = Option::select('option_id','title')->where("question_id",$question->question_id)->get($question->question_id); Redis::sadd($room_id, (int) $question->question_id); //设置返回数据 $response['code'] = 0; $response['msg'] = '获取成功'; $response['info']['question'] = $question; $response['info']['options'] = $options; $response['info']['questions_count'] = count($questions) + 1; return response()->json($response); } /** * 回答问题 */ public function Answer(Request $request) { if(!$request->session()->has('user_id')){ $response['code'] = 400; $response['msg'] = '请先登录'; return response()->json($response); } $room_id = $request->input('room_id'); if(!$room_id){ $response['code'] = 400; $response['msg'] = '缺少房间参数'; return response()->json($response); } $message['is_end'] = 0; //是否结束答题标志 $question_id = $request->input('question_id'); $option_id = $request->input('option_id'); $user_id = $request->session()->get('user_id'); //获取当前房间问题条数 $questions = Redis::smembers($room_id); //问题超过或者到第4条为结束标志 if(count($questions) > 4){ $message['is_end'] = 1; } //检测用户断线 Gateway::$registerAddress = '127.0.0.1:1238'; //获取当前组存活用户 $clients = Gateway::getUidListByGroup($room_id); if(count($clients) < 2){ $message['is_end'] = 1; } //判断答案逻辑 $is_true = Option::where([ ["question_id", $question_id], ["option_id", $option_id], ["is_answer", 1], ])->count(); $scores = Redis::get($room_id.'_info'); if($scores){ $scores = json_decode($scores, 1); }else{ $scores = []; } if(!isset($scores[$user_id])){ $scores[$user_id] = 0; } if($is_true){ $scores[$user_id] = (int) $scores[$user_id] + 1; } Redis::set($room_id . '_info', json_encode($scores)); $message['is_true'] = $is_true; $message['scores'] = $scores; $message['user_id'] = $user_id; $message['online'] = count($clients); $message['type'] = 'answer'; //发送消息 Gateway::sendToGroup($room_id, json_encode($message)); $response['code'] = 0; $response['msg'] = '回答成功'; //用户退出房间关闭房间等逻辑 todo ... return response()->json($response); } /** * 加入房间 */ public function Join(Request $request) { if(!$request->session()->has('user_id')){ $response['code'] = 400; $response['msg'] = '请先登录'; return response()->json($response); } $user_id = $request->session()->get('user_id'); $username = $request->session()->get('username'); $avatar = $request->session()->get('avatar'); $client_id = $request->input('client_id'); $data = json_encode(['user_id'=>$user_id,'level'=>'T1','avatar'=>$avatar,'username'=>$username,'client_id'=>$client_id]); Redis::lpush('match_list',$data); $response['code'] = 0; $response['msg'] = "已加入匹配队列"; return response()->json($response); } /** * 退出房间 */ public function Quit(Request $request) { if(!$request->session()->has('user_id')){ $response['code'] = 400; $response['msg'] = '请先登录'; return response()->json($response); } $username = $session->get('username'); $avatar = $session->get('avatar'); $user_id = $request->session()->get('user_id'); $username = $request->session()->get('username'); $avatar = $request->session()->get('avatar'); $client_id = $request->input('client_id'); $data = json_encode(['user_id'=>$user_id,'level'=>'T1','avatar'=>$avatar,'username'=>$username,'client_id'=>$client_id]); Redis::lrem('match_list',1,$data); //删除房间 Redis::del('T1'); $response['code'] = 0; $response['msg'] = "已取消匹配"; return response()->json($response); } }