|
@@ -8,6 +8,8 @@ use Illuminate\Support\Facades\Redis;
|
|
use App\Model\Question;
|
|
use App\Model\Question;
|
|
use App\Model\Option;
|
|
use App\Model\Option;
|
|
use App\Model\User;
|
|
use App\Model\User;
|
|
|
|
+use App\Model\Room;
|
|
|
|
+use App\Model\RoomUser;
|
|
use Ramsey\Uuid\Uuid;
|
|
use Ramsey\Uuid\Uuid;
|
|
use App\Jobs\Distribute;
|
|
use App\Jobs\Distribute;
|
|
|
|
|
|
@@ -52,6 +54,7 @@ class gamematch extends Command
|
|
$user_id = Redis::lpop('match_list');
|
|
$user_id = Redis::lpop('match_list');
|
|
if(!$user_id){
|
|
if(!$user_id){
|
|
if($match_times > 5){
|
|
if($match_times > 5){
|
|
|
|
+ $match_times = 0;
|
|
//获取是否有房间未满人
|
|
//获取是否有房间未满人
|
|
$room_id = $this->get_free_room();
|
|
$room_id = $this->get_free_room();
|
|
if(!$room_id){
|
|
if(!$room_id){
|
|
@@ -68,22 +71,21 @@ class gamematch extends Command
|
|
//发布启动机器人
|
|
//发布启动机器人
|
|
Redis::publish("startRobot", $user->user_id);
|
|
Redis::publish("startRobot", $user->user_id);
|
|
}
|
|
}
|
|
- sleep(1);
|
|
|
|
|
|
+ sleep(3);
|
|
$match_times++;
|
|
$match_times++;
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
$match_times = 0;
|
|
$match_times = 0;
|
|
$info = [];
|
|
$info = [];
|
|
$room_id = $this->get_free_room();
|
|
$room_id = $this->get_free_room();
|
|
- $user = User::select('user_id', 'avatar', 'name', 'win_rate')->where("user_id", $user_id)->first();
|
|
|
|
- $user_client_id = Gateway::getClientIdByUid($user_id);
|
|
|
|
|
|
+ $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count','client_id')->where("user_id", $user_id)->first();
|
|
if($user->is_robot && !$user->is_login){
|
|
if($user->is_robot && !$user->is_login){
|
|
if(Gateway::isUidOnline($user_id)){
|
|
if(Gateway::isUidOnline($user_id)){
|
|
//更新用户登陆状态
|
|
//更新用户登陆状态
|
|
unset($update_data);
|
|
unset($update_data);
|
|
$update_data = [
|
|
$update_data = [
|
|
"is_login" => 1,
|
|
"is_login" => 1,
|
|
- "client_id" => $user_client_id,
|
|
|
|
|
|
+ "client_id" => $user->client_id,
|
|
];
|
|
];
|
|
User::where("user_id", $user_id)->update($update_data);
|
|
User::where("user_id", $user_id)->update($update_data);
|
|
}else{
|
|
}else{
|
|
@@ -94,17 +96,24 @@ class gamematch extends Command
|
|
//获取房间信息
|
|
//获取房间信息
|
|
$room = Room::where("room_id", $room_id)->first();
|
|
$room = Room::where("room_id", $room_id)->first();
|
|
//把当前用户加入当前房间
|
|
//把当前用户加入当前房间
|
|
- Gateway::joinGroup($user_client_id, $room_id);
|
|
|
|
|
|
+ Gateway::joinGroup($user->client_id, $room_id);
|
|
RoomUser::insert([
|
|
RoomUser::insert([
|
|
'user_id' => $user_id,
|
|
'user_id' => $user_id,
|
|
'room_id' => $room_id,
|
|
'room_id' => $room_id,
|
|
'state' => 1,
|
|
'state' => 1,
|
|
|
|
+ 'created_at' => date('Y-m-d H:i:s'),
|
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s'),
|
|
]);
|
|
]);
|
|
|
|
+ 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'] = [
|
|
$info['user'] = [
|
|
"user_id" => $user_id,
|
|
"user_id" => $user_id,
|
|
"name" => $user->name,
|
|
"name" => $user->name,
|
|
"avatar" => $user->avatar,
|
|
"avatar" => $user->avatar,
|
|
- "win_rate" => $user->win_rate,
|
|
|
|
|
|
+ "win_rate" => $win_rate,
|
|
];
|
|
];
|
|
//获取房间玩家信息
|
|
//获取房间玩家信息
|
|
$group_users = Gateway::getUidListByGroup($room_id);
|
|
$group_users = Gateway::getUidListByGroup($room_id);
|
|
@@ -112,7 +121,7 @@ class gamematch extends Command
|
|
//清理不在房间的用户
|
|
//清理不在房间的用户
|
|
RoomUser::whereNotIn('user_id', array_values($group_users))->delete();
|
|
RoomUser::whereNotIn('user_id', array_values($group_users))->delete();
|
|
}
|
|
}
|
|
- $info['players'] = User::select('user_id', 'avatar', 'name', 'win_rate')->whereIn("user_id", array_values($group_users))->get();
|
|
|
|
|
|
+ $info['players'] = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->whereIn("user_id", array_values($group_users))->get();
|
|
//发送可以开始消息
|
|
//发送可以开始消息
|
|
$message = [
|
|
$message = [
|
|
"type" => 'player_join',
|
|
"type" => 'player_join',
|
|
@@ -153,10 +162,9 @@ class gamematch extends Command
|
|
'title' => 'room_' . $user->name . date('YmdHis'),
|
|
'title' => 'room_' . $user->name . date('YmdHis'),
|
|
'is_full' => 0,
|
|
'is_full' => 0,
|
|
'is_end' => 0,
|
|
'is_end' => 0,
|
|
- 'start_at' => 0,
|
|
|
|
'user_limit' => 2,
|
|
'user_limit' => 2,
|
|
'nickname' => $user->name,
|
|
'nickname' => $user->name,
|
|
- 'user_id' => $user_idc,
|
|
|
|
|
|
+ 'user_id' => $user_id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
]);
|
|
]);
|
|
@@ -164,20 +172,27 @@ class gamematch extends Command
|
|
"user_id" => $user_id,
|
|
"user_id" => $user_id,
|
|
"room_id" => $room_id,
|
|
"room_id" => $room_id,
|
|
"state" => 1,
|
|
"state" => 1,
|
|
|
|
+ 'created_at' => date('Y-m-d H:i:s'),
|
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s'),
|
|
]);
|
|
]);
|
|
//把当前用户加入当前房间 保险点获取用户最新 client_id
|
|
//把当前用户加入当前房间 保险点获取用户最新 client_id
|
|
- Gateway::joinGroup($user_client_id, $room_id);
|
|
|
|
|
|
+ Gateway::joinGroup($user->client_id, $room_id);
|
|
echo "玩家新建房间: {$user_id}\n";
|
|
echo "玩家新建房间: {$user_id}\n";
|
|
|
|
+ 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'] = [
|
|
$info['user'] = [
|
|
"user_id" => $user_id,
|
|
"user_id" => $user_id,
|
|
"name" => $user->name,
|
|
"name" => $user->name,
|
|
"avatar" => $user->avatar,
|
|
"avatar" => $user->avatar,
|
|
- "win_rate" => $user->win_rate,
|
|
|
|
|
|
+ "win_rate" => $win_rate,
|
|
];
|
|
];
|
|
//获取房间玩家信息
|
|
//获取房间玩家信息
|
|
$group_users = Gateway::getUidListByGroup($room_id);
|
|
$group_users = Gateway::getUidListByGroup($room_id);
|
|
- $info['players'] = User::select('user_id', 'avatar', 'name', 'win_rate')->whereIn("user_id", array_values($group_users))->get();
|
|
|
|
|
|
+ $info['players'] = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->whereIn("user_id", array_values($group_users))->get();
|
|
//发送可以开始消息
|
|
//发送可以开始消息
|
|
$message = [
|
|
$message = [
|
|
"type" => 'player_join',
|
|
"type" => 'player_join',
|
|
@@ -199,7 +214,7 @@ class gamematch extends Command
|
|
while (1) {
|
|
while (1) {
|
|
$room = Room::select("room_id")->where("is_full",0)->where("is_end","<>",1)->first();
|
|
$room = Room::select("room_id")->where("is_full",0)->where("is_end","<>",1)->first();
|
|
if($room){
|
|
if($room){
|
|
- $users = RommUser::select("user_id")->where("room_id", $room->room_id)->where("state", 1)->get();
|
|
|
|
|
|
+ $users = RoomUser::select("user_id")->where("room_id", $room->room_id)->where("state", 1)->get();
|
|
foreach ($users as $user) {
|
|
foreach ($users as $user) {
|
|
//检查当前room玩家是否还在房间中
|
|
//检查当前room玩家是否还在房间中
|
|
$is_online = Gateway::isUidOnline($user->user_id);
|
|
$is_online = Gateway::isUidOnline($user->user_id);
|