| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 | <?phpnamespace App\Home\Controllers;use App\Http\Controllers\Controller;use Illuminate\Http\Request;use GatewayWorker\Lib\Gateway;use GuzzleHttp\Client;use App\Model\User;use App\Model\Room;use App\Model\RoomUser;use ErrorException;class UserController extends Controller{    /**     * 获取用户信息     */    public function Info(Request $request)    {        $cmcc_id = urldecode($request->input('user_id'));        $mt = $request->input('mt');        if(!$cmcc_id || !$mt){            $response['code'] = 400;            $response['msg'] = '缺少参数';            return response()->json($response);        }        //获取当前系统是否存在        $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->orWhere("user_id", $cmcc_id)->first();        if(!$user){            //请求用户信息            $client = new Client([                'verify' => false,            ]);            $ip = '211.139.191.175';            $port = '38083';            $req_time = date('YmdHis');            $sign = md5($cmcc_id . $req_time . $mt);            $params['req_param'] = [                "pub_info" => [                    "req_src" => 1,                    "ver" => "1.0",                    "req_time" => $req_time,                    "sign" => $sign,                ],                "page_info" => [                    "current_page" => 1,                    "page_size" => 10,                ],                "busi_info" => [],            ];            // $response = $client->request('POST', "http://{$ip}:{$port}/hgs/uc/queryusergameinfo",[            //     'form_params' => [            //         'username' => $user->name,            //     ]            // ]);            // $cmcc_user = $response->getBody()->getContents();            //判断请求结果 todo ...            //记录用户信息            $date = date("Y-m-d H:i:s");            $user_id = User::insertGetId([                "name" => "测试用户_" . $cmcc_id,                "avatar" => "https://picsum.photos/200/200/?image=". rand(1, 300),                "cmcc_id" => $cmcc_id,                "mt" => $cmcc_id,                "win_count" => 0,                "lose_count" => 0,                "is_login" => 0,                "is_robot" => 0,                "created_at" => $date,                "updated_at" => $date,            ]);            $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->first();        }             if($user->win_count == 0 || ($user->win_count == 0 && $user->lose_count == 0)){            $win_rate = 0;        }else{            $win_rate = $user->win_count / ($user->win_count + $user->lose_count);        }        //测试固定用户信息        $info['user_id'] = $user->user_id;        $info['name'] = $user->name;        $info['avatar'] = $user->avatar;        $info['win_rate'] = $win_rate;        $info['play_next'] = 1;        //设置session        $request->session()->put('user_id', $user->user_id);        $response['code'] = 0;        $response['msg'] = '获取用户信息成功';        $response['info'] = $info;        return response()->json($response);    }    /**     * 绑定Socket     */    public function Bind(Request $request)    {        if(!$request->session()->has('user_id')){            $response['code'] = 400;            $response['msg'] = '请先登录';            return response()->json($response);        }        $user_id = $request->session()->get('user_id');        $client_id = $request->input('client_id');        //注册地址        Gateway::$registerAddress = '127.0.0.1:1238';        //异地登录机制        $user = User::where("user_id", $user_id)->first();        // var_dump($user,$client_id);exit;        if($user->client_id && $user->client_id != $client_id){            $message = [                "type" => "replace_login",                "msg" => "用户在其他地方登录了,当前用户端断开连接",            ];            try {                $is_online = Gateway::isOnline($user->client_id);                if($is_online){                    Gateway::sendToClient($user->client_id, json_encode($message));                    //断开旧ID                    Gateway::closeClient($user->client_id);                }            } catch (ErrorException $e) {                            }        }        //绑定用户ID        Gateway::bindUid($client_id, $user_id);        //更新用户最新client_id        $update_data['client_id'] = $client_id;        User::where("user_id", $user_id)->update($update_data);        $response['info']['in_game'] = 0;   //是否还在对战中        //判断用户是否还在对战        $room_id = RoomUser::where([            "user_id" => $user_id,            "state" => 1,        ])->value("room_id");        //查看房间状态        $is_end = Room::where("room_id", $room_id)->value("is_end");        if($room_id && !$is_end){            Gateway::joinGroup($client_id, $room_id);            $response['info']['in_game'] = 1;            //获取房间玩家信息            if($user->win_count == 0 || ($user->win_count == 0 && $user->lose_count == 0)){                $win_rate = 0;            }else{                $win_rate = $user->win_count / ($user->win_count + $user->lose_count);            }            $info['user'] = [                "user_id" => $user_id,                "name" => $user->name,                "avatar" => $user->avatar,                "win_rate" => $win_rate,            ];            $group_users = Gateway::getUidListByGroup($room_id);            $players = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->whereIn("user_id", array_values($group_users))->get();            $info['players'] = $players;            //发送可以开始消息            $message = [                "type" => 'player_join',                "msg" => "玩家加入房间",                "info" => $info            ];            Gateway::sendToGroup($room_id, json_encode($message));        }elseif($room_id && $is_end){            unset($update_data);            $update_data['state'] = 2;            //更新一下房间状态            RoomUser::where([                "user_id" => $user_id,                "room_id" => $room_id,                "state" => 1,            ])->update($update_data);        }        $response['code'] = 0;        $response['msg'] = '服务连接成功';        return response()->json($response);    }}
 |