| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | 
							- <?php
 
- namespace App\Home\Controllers;
 
- use App\Http\Controllers\Controller;
 
- use Illuminate\Http\Request;
 
- use GatewayWorker\Lib\Gateway;
 
- use App\Model\Question;
 
- use App\Model\Option;
 
- use App\Model\RoomUser;
 
- use App\Model\RoomQuestion;
 
- use App\Model\RoomAnswer;
 
- use App\Model\Room;
 
- use Illuminate\Support\Facades\Redis;
 
- use App\Jobs\Settlement;
 
- class GameController extends Controller
 
- {
 
-     /**
 
-      * 回答问题
 
-      */
 
-     public function Answer(Request $request)
 
-     {
 
-         if(!$request->session()->has('user_id')){
 
-             $response['code'] = 400;
 
-             $response['msg'] = '请先登录';
 
-             return response()->json($response);
 
-         }
 
-         $answer_time = time();
 
-         $question_id = $request->input('question_id');
 
-         $option_id = $request->input('option_id');
 
-         $user_id = $request->session()->get('user_id');
 
-         //注册gateway地址
 
-         Gateway::$registerAddress = '127.0.0.1:1238';
 
-         //获取房间号
 
-         $room_id = RoomUser::where(["user_id"=>$user_id,"state"=>1])->value('room_id');
 
-         if(!$room_id){
 
-             $response['code'] = 400;
 
-             $response['msg'] = '没有加入房间';
 
-             return response()->json($response);
 
-         }
 
-         //判断答案逻辑
 
-         $is_true = Option::where([
 
-           ["question_id", $question_id],
 
-           ["option_id", $option_id],
 
-           ["is_answer", 1],
 
-         ])->count();
 
-         //判断用户回答获取分数
 
-         if($is_true){
 
-             //获取当前题目开始时间
 
-             $start_at = RoomQuestion::where(["question_id" => $question_id, "room_id" => $room_id])->value('start_at');
 
-             $answer_diff = $answer_time - strtotime($start_at);
 
-             switch ($answer_diff) {
 
-                 case '0':
 
-                     $score = 100;
 
-                     break;
 
-                 case '1':
 
-                     $score = 90;
 
-                     break;
 
-                 case '2':
 
-                     $score = 80;
 
-                     break;
 
-                 case '3':
 
-                     $score = 70;
 
-                     break;
 
-                 case '4':
 
-                     $score = 60;
 
-                     break;
 
-                 case '5':
 
-                     $score = 50;
 
-                     break;
 
-                 case '6':
 
-                     $score = 40;
 
-                     break;
 
-                 case '7':
 
-                     $score = 30;
 
-                     break;
 
-                 case '8':
 
-                     $score = 20;
 
-                     break;
 
-                 case '9':
 
-                     $score = 10;
 
-                     break;
 
-                 default:
 
-                     $score = 0;
 
-                     break;
 
-             }
 
-         }else{
 
-             $score = 0;
 
-         }
 
-         //写入记录
 
-         $result = RoomAnswer::insert([
 
-             "question_id" => $question_id,
 
-             "option_id" => $option_id,
 
-             "user_id" => $user_id,
 
-             "room_id" => $room_id,
 
-             "score" => $score,
 
-             "created_at" => date('Y-m-d H:i:s'),
 
-             "updated_at" => date('Y-m-d H:i:s'),
 
-         ]);
 
-         if(!$result){
 
-             //发送消息
 
-             $response['code'] = 400;
 
-             $response['msg'] = '重复回答';
 
-             return response()->json($response);
 
-         }
 
-         if($score){
 
-             //增加总分
 
-             RoomUser::where([
 
-                 "user_id" => $user_id,
 
-                 "room_id" => $room_id,
 
-             ])->increment('score', $score);
 
-         }
 
-         $total_score = (int) RoomUser::where([
 
-             "user_id" => $user_id,
 
-             "room_id" => $room_id,
 
-         ])->value('score');
 
-         $message['score'] = $score;
 
-         $message['total_score'] = $total_score;
 
-         $message['user_id'] = $user_id;
 
-         $message['type'] = 'answer';
 
-         Gateway::sendToGroup($room_id, json_encode($message));
 
-         //获取房间信息,最后一个回答触发结算程序
 
-         $room_user_limit = Room::where("room_id", $room_id)->value("user_limit");
 
-         //获取当前题目回答人数
 
-         $answer_user_count = RoomAnswer::where([
 
-             "room_id" => $room_id,
 
-             "question_id" => $question_id,
 
-         ])->count();
 
-         if($room_user_limit == $answer_user_count){
 
-             if(!isset($start_at)){
 
-                 $start_at = RoomQuestion::where(["question_id" => $question_id, "room_id" => $room_id])->value('start_at');
 
-             }
 
-             $next_date = date('YmdHis', strtotime("{$start_at} +10 seconds"));
 
-             //先删除固定结算任务队列
 
-             Redis::lrem("Game_settlement_{$next_date}", 1, $room_id);
 
-             //执行结算队列
 
-             Settlement::dispatch($room_id)->onQueue('settlement');
 
-         }
 
-         //发送消息
 
-         $response['code'] = 0;
 
-         $response['msg'] = '回答成功';
 
-         //返回回答信息
 
-         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');
 
-         //检查是否在房间中
 
-         $is_in_room = RoomUser::where("user_id", $user_id)->where("state", 1)->count();
 
-         if($is_in_room){
 
-             $response['code'] = 400;
 
-             $response['msg'] = "已在房间中";
 
-             return response()->json($response);
 
-         }
 
-         //删除队列再加入匹配
 
-         Redis::lrem('match_list', 1, $user_id);
 
-         Redis::rpush('match_list', $user_id);
 
-         $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);
 
-     }
 
-   
 
- }
 
 
  |