This commit is contained in:
li
2026-01-28 23:48:20 +08:00
commit b8cd0c9418
1293 changed files with 184011 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use app\models\process\NumberTab;
use app\models\user\User;
/**
* TODO CancelBet处理类
* Class CancelBetService
* @package app\services\bet
*/
class CancelBetService
{
/**
* TODO 处理cancelBet
* @param array $event
* @param array $tableInfo
* @return array
*/
public static function cancelBet(array $event, array $tableInfo): array{
$numberTabId = intval($event['number_tab_id']);
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
if (!$numberTabInfo || $numberTabId != $numberTabInfo['id']) return ['status' => false, 'msg' => 'cannot_cancel_bet'];
$time = time();
if ($numberTabInfo['bet_status'] != 1 || $time > ($numberTabInfo['bet_start_time'] + $tableInfo['wait_time'])) return ['status' => false, 'msg' => 'cannot_cancel_bet'];
$userInfo = User::get(intval($event['user_id']));
if (!$userInfo) return ['status' => false, 'msg' => 'cannot_cancel_bet'];
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if(!$prevBetInfo) return ['status' => false, 'msg' => 'not_user_bet'];
return Bet::cancelBet($tableInfo,$numberTabInfo,$userInfo,$prevBetInfo);
}
}
+164
View File
@@ -0,0 +1,164 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\SocketSession;
/**
* TODO ToBetBaccaratService
* Class ToBetBaccaratService
* @package app\services\bet
*/
class ToBetBaccaratService
{
/**
* TODO 处理toBetBaccarat
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetBaccarat(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$baccaratType = intval($event['baccarat_type']);
$data = array();
$data['banker_amount'] = isset($event['banker_amount']) && intval($event['banker_amount']) > 0 ? intval($event['banker_amount']) : 0;
$data['player_amount'] = isset($event['player_amount']) && intval($event['player_amount']) > 0 ? intval($event['player_amount']) : 0;
$data['tie_amount'] = isset($event['tie_amount']) && intval($event['tie_amount']) > 0 ? intval($event['tie_amount']) : 0;
$data['banker_pair_amount'] = isset($event['banker_pair_amount']) && intval($event['banker_pair_amount']) > 0 ? intval($event['banker_pair_amount']) : 0;
$data['player_pair_amount'] = isset($event['player_pair_amount']) && intval($event['player_pair_amount']) > 0 ? intval($event['player_pair_amount']) : 0;
$data['luck_six_amount'] = isset($event['luck_six_amount']) && intval($event['luck_six_amount']) > 0 ? intval($event['luck_six_amount']) : 0;
$data['big_amount'] = isset($event['big_amount']) && intval($event['big_amount']) > 0 ? intval($event['big_amount']) : 0;
$data['small_amount'] = isset($event['small_amount']) && intval($event['small_amount']) > 0 ? intval($event['small_amount']) : 0;
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
/***** User Limit Start *****/
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
$betTotalAmount = [];
if($prevBetInfo){
$betTotalAmount['banker_amount'] = $prevBetInfo['banker_amount'] + $data['banker_amount'];
$betTotalAmount['player_amount'] = $prevBetInfo['player_amount'] + $data['player_amount'];
$betTotalAmount['tie_amount'] = $prevBetInfo['tie_amount'] + $data['tie_amount'];
$betTotalAmount['banker_pair_amount'] = $prevBetInfo['banker_pair_amount'] + $data['banker_pair_amount'];
$betTotalAmount['player_pair_amount'] = $prevBetInfo['player_pair_amount'] + $data['player_pair_amount'];
$betTotalAmount['luck_six_amount'] = $prevBetInfo['luck_six_amount'] + $data['luck_six_amount'];
$betTotalAmount['big_amount'] = $prevBetInfo['big_amount'] + $data['big_amount'];
$betTotalAmount['small_amount'] = $prevBetInfo['small_amount'] + $data['small_amount'];
}else{
$betTotalAmount = $data;
}
foreach ($betTotalAmount AS $value){
if ($value > $userInfo['limit_high']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if ($value > 0 && $value < $userInfo['limit_low']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
}
/***** User Limit End *****/
/***** Table Limit Start *****/
$limitMoneyArray = explode('-',$tableInfo['limit_money']);
$limitMoneyTieArray = explode('-',$tableInfo['limit_money_tie']);
$limitMoneyPairArray = explode('-',$tableInfo['limit_money_pair']);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$totalBankerAmount = $prevBetInfo['banker_amount'] + $data['banker_amount'];
$totalPlayerAmount = $prevBetInfo['player_amount'] + $data['player_amount'];
$totalTieAmount = $prevBetInfo['tie_amount'] + $data['tie_amount'];
$totalBPAmount = $prevBetInfo['banker_pair_amount'] + $data['banker_pair_amount'];
$totalPPAmount = $prevBetInfo['player_pair_amount'] + $data['player_pair_amount'];
}else{
$totalBankerAmount = $data['banker_amount'];
$totalPlayerAmount = $data['player_amount'];
$totalTieAmount = $data['tie_amount'];
$totalBPAmount = $data['banker_pair_amount'];
$totalPPAmount = $data['player_pair_amount'];
}
$curNumberTabBankerAmount = $numberTabInfo['banker_amount'] + $data['banker_amount'];
$curNumberTabPlayerAmount = $numberTabInfo['player_amount'] + $data['player_amount'];
$curNumberTabTieAmount = $numberTabInfo['tie_amount'] + $data['tie_amount'];
$curNumberTabBPAmount = $numberTabInfo['banker_pair_amount'] + $data['banker_pair_amount'];
$curNumberTabPPAmount = $numberTabInfo['player_pair_amount'] + $data['player_pair_amount'];
//对冲
// $difference = abs(round(($curNumberTabBankerAmount - $curNumberTabPlayerAmount),2));
// if($difference > $limitMoneyArray[1] || $curNumberTabTieAmount > $limitMoneyTieArray[1] || $curNumberTabBPAmount > $limitMoneyPairArray[1] || $curNumberTabPPAmount > $limitMoneyPairArray[1]){
// $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
// SocketSession::resetRepeat($fd,'user','isToBet');
// return;
// }
// 桌台
if($totalBankerAmount > $limitMoneyArray[1] || $totalPlayerAmount > $limitMoneyArray[1] || $totalTieAmount > $limitMoneyTieArray[1] || $totalBPAmount > $limitMoneyPairArray[1] || $totalPPAmount > $limitMoneyPairArray[1]){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($totalBankerAmount > 0 && $totalBankerAmount < $limitMoneyArray[0]) || ($totalPlayerAmount > 0 && $totalPlayerAmount < $limitMoneyArray[0]) || ($totalTieAmount > 0 && $totalTieAmount < $limitMoneyTieArray[0]) || ($totalBPAmount > 0 && $totalBPAmount < $limitMoneyPairArray[0]) || ($totalPPAmount > 0 && $totalPPAmount < $limitMoneyPairArray[0])){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
//如果桌子设置了单口最高下注,则所有的下注不能超过桌子单口下注限红
if(($tableInfo['limit_money_total'] > 0 && $curNumberTabBankerAmount > $tableInfo['limit_money_total']) || ($tableInfo['limit_money_total'] > 0 && $curNumberTabPlayerAmount > $tableInfo['limit_money_total']) || ($tableInfo['limit_money_tie_total'] > 0 && $curNumberTabTieAmount > $tableInfo['limit_money_tie_total']) || ($tableInfo['limit_money_pair_total'] > 0 && $curNumberTabBPAmount > $tableInfo['limit_money_pair_total']) || ($tableInfo['limit_money_pair_total'] > 0 && $curNumberTabPPAmount > $tableInfo['limit_money_pair_total'])){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** Table Limit End *****/
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,$baccaratType);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'user_id' => $userInfo['id'], 'manager_id' => $userInfo['manager_id'] ,'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
if($userInfo['bet_type'] == 2){
$tableManager = app('swoole.table.manager');
$managerSession = $tableManager->get((string) $userInfo['manager_id']);
if ($managerSession && is_array($managerSession)){
$ws->setSender(0)->to($managerSession['fd'])->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'user_id' => $userInfo['id'], 'manager_id' => $userInfo['manager_id'] ,'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
}
}
$round = array(
'banker_amount' => intval($numberTabInfo['banker_amount'] + $data['banker_amount']),
'player_amount' => intval($numberTabInfo['player_amount'] + $data['player_amount']),
'tie_amount' => intval($numberTabInfo['tie_amount'] + $data['tie_amount']),
'banker_pair_amount' => intval($numberTabInfo['banker_pair_amount'] + $data['banker_pair_amount']),
'player_pair_amount' => intval($numberTabInfo['player_pair_amount'] + $data['player_pair_amount']),
'luck_six_amount' => intval($numberTabInfo['luck_six_amount'] + $data['luck_six_amount']),
'big_amount' => intval($numberTabInfo['big_amount'] + $data['big_amount']),
'small_amount' => intval($numberTabInfo['small_amount'] + $data['small_amount']),
'amount_item' => array(
'banker_amount' => intval($data['banker_amount']),
'player_amount' => intval($data['player_amount']),
'tie_amount' => intval($data['tie_amount']),
'banker_pair_amount' => intval($data['banker_pair_amount']),
'player_pair_amount' => intval($data['player_pair_amount']),
'luck_six_amount' => intval($data['luck_six_amount']),
'big_amount' => intval($data['big_amount']),
'small_amount' => intval($data['small_amount']),
'user_id' => $userInfo['id'],
),
);
$ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]);
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+72
View File
@@ -0,0 +1,72 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use app\models\process\NumberTab;
use app\models\user\User;
use app\models\user\Session;
class ToBetCommonService
{
/**
* TODO toBet检验
* @param array $tableInfo 桌子信息
* @param array $event socket属性
* @param array $data 下注信息
* @return array
*/
public static function toBetCheck(array $tableInfo, array $event, array $data): array
{
/** 通用检验重复部分开始 */
$amount = array_sum($data);
if ($amount == 0){
return ['status' => false, 'msg' => 'to_bet_fail_6'];
}
$numberTabId = isset($event['number_tab_id']) && intval($event['number_tab_id']) > 0 ? intval($event['number_tab_id']) : 0;
$userId = isset($event['user_id']) && intval($event['user_id']) > 0 ? intval($event['user_id']) : 0;
$userInfo = User::get(['id' => $userId, 'status' => 1, 'is_delete' => 0]);
if (!$userInfo) return ['status' => false, 'msg' => 'to_bet_fail_2'];
if($userInfo['bet_type'] == 2){
$session_id = $userInfo['api_token'];
$sessionInfo = Session::get(['session_id' => $session_id]);
if(!$sessionInfo){
return ['status' => false, 'msg' => 'to_bet_fail_9'];
}
if(!$sessionInfo['server_status']){
return ['status' => false, 'msg' => 'to_bet_fail_10'];
}
}
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
if ($numberTabInfo['id'] != $numberTabId){
return ['status' => false, 'msg' => 'to_bet_fail_5'];
}
if ($numberTabInfo['bet_status'] != 1 || time() > ($numberTabInfo['bet_start_time'] + $tableInfo['wait_time'])){
return ['status' => false, 'msg' => 'to_bet_fail_4'];
}
// 超过50局幸运6禁止下注
if ($numberTabInfo['number'] > 50 && isset($event['luck_six_amount']) && $event['luck_six_amount'] > 0){
return ['status' => false, 'msg' => 'to_bet_fail_7'];
}
// 超过30局大小禁止下注
if ($numberTabInfo['number'] > 30 && isset($event['big_amount']) && $event['big_amount'] > 0){
return ['status' => false, 'msg' => 'to_bet_fail_8'];
}
if ($numberTabInfo['number'] > 30 && isset($event['small_amount']) && $event['small_amount'] > 0){
return ['status' => false, 'msg' => 'to_bet_fail_8'];
}
if($userInfo['win_limit'] > 0){
$winTotalToday = Bet::getWinTotalToday($userInfo['id']);
if($winTotalToday >= $userInfo['win_limit']){
return ['status' => false, 'msg' => 'win_limit_tip'];
}
}
if ($userInfo['money'] < $amount){
return ['status' => false, 'msg' => 'to_bet_fail_1'];
}
return ['status' => true, 'numberTabInfo' => $numberTabInfo, 'userInfo' => $userInfo];
/** 通用检验重复部分结束 */
}
}
+106
View File
@@ -0,0 +1,106 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\DiceUtil;
use freedom\utils\SocketSession;
/**
* TODO ToBetDiceService
* Class ToBetDiceService
* @package app\services\bet
*/
class ToBetDiceService{
/**
* TODO 处理骰宝下注
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetDice(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$data = array();
foreach ($event['amount'] as $k => $v){
if (intval($v) > 0){
$data[$k] = intval($v);
}
}
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$beforeAmount = string_to_array($prevBetInfo['dice_amount']);
$betTotalAmount = DiceUtil::amountInc($beforeAmount, $data);
}else{
$betTotalAmount = $data;
}
/***** User Limit Start *****/
$totalAmount = array_sum($betTotalAmount);
if ($totalAmount > $userInfo['limit_high']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if ($totalAmount > 0 && $totalAmount < $userInfo['limit_low']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** User Limit End *****/
/***** Table Limit Start *****/
$totalAmount = array_sum($betTotalAmount);
$limitMoneyArray = explode('-',$tableInfo['limit_money']);
if($totalAmount > $limitMoneyArray[1]){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($totalAmount > 0 && $totalAmount < $limitMoneyArray[0]) ){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
//如果桌子设置了单口最高下注,则所有的下注不能超过桌子单口下注限红
if(($tableInfo['limit_money_total'] > 0 && $totalAmount > $tableInfo['limit_money_total'])){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** Table Limit End *****/
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0);
$numberTabAmount = string_to_array($numberTabInfo['dice_amount']);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
$totalAmountArray = DiceUtil::amountInc($numberTabAmount, $data);
$round = [
'amount_total' => $totalAmountArray,
'amount_item' => $data
];
$ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]);
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+135
View File
@@ -0,0 +1,135 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\SocketSession;
/**
* TODO ToBetDtService
* Class ToBetDtService
* @package app\services\bet
*/
class ToBetDtService
{
/**
* TODO 处理toBetDt
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetDt(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$data = array();
$data['banker_amount'] = isset($event['banker_amount']) && intval($event['banker_amount']) > 0 ? intval($event['banker_amount']) : 0;
$data['player_amount'] = isset($event['player_amount']) && intval($event['player_amount']) > 0 ? intval($event['player_amount']) : 0;
$data['tie_amount'] = isset($event['tie_amount']) && intval($event['tie_amount']) > 0 ? intval($event['tie_amount']) : 0;
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
/***** User Limit Start *****/
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
$betTotalAmount = [];
if($prevBetInfo){
$betTotalAmount['banker_amount'] = $prevBetInfo['banker_amount'] + $data['banker_amount'];
$betTotalAmount['player_amount'] = $prevBetInfo['player_amount'] + $data['player_amount'];
$betTotalAmount['tie_amount'] = $prevBetInfo['tie_amount'] + $data['tie_amount'];
}else{
$betTotalAmount = $data;
}
if($betTotalAmount['banker_amount'] > $userInfo['limit_high'] || $betTotalAmount['player_amount'] > $userInfo['limit_high'] || $betTotalAmount['tie_amount'] > $userInfo['limit_high_tie']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($betTotalAmount['banker_amount'] > 0 && $betTotalAmount['banker_amount'] < $userInfo['limit_low']) || ($betTotalAmount['player_amount'] > 0 && $betTotalAmount['player_amount'] < $userInfo['limit_low']) || ($betTotalAmount['tie_amount'] > 0 && $betTotalAmount['tie_amount'] < $userInfo['limit_low_tie'])){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** User Limit End *****/
/***** Table Limit Start *****/
$limitMoneyArray = explode('-',$tableInfo['limit_money']);
$limitMoneyTieArray = explode('-',$tableInfo['limit_money_tie']);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$totalBankerAmount = $prevBetInfo['banker_amount'] + $data['banker_amount'];
$totalPlayerAmount = $prevBetInfo['player_amount'] + $data['player_amount'];
$totalTieAmount = $prevBetInfo['tie_amount'] + $data['tie_amount'];
}else{
$totalBankerAmount = $data['banker_amount'];
$totalPlayerAmount = $data['player_amount'];
$totalTieAmount = $data['tie_amount'];
}
$curNumberTabBankerAmount = $numberTabInfo['banker_amount'] + $data['banker_amount'];
$curNumberTabPlayerAmount = $numberTabInfo['player_amount'] + $data['player_amount'];
$curNumberTabTieAmount = $numberTabInfo['tie_amount'] + $data['tie_amount'];
//
// $difference = abs(round(($curNumberTabBankerAmount - $curNumberTabPlayerAmount),2));
// if($difference > $limitMoneyArray[1] || $curNumberTabTieAmount > $limitMoneyTieArray[1]){
// $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
// SocketSession::resetRepeat($fd,'user','isToBet');
// return;
// }
if($totalBankerAmount > $limitMoneyArray[1] || $totalPlayerAmount > $limitMoneyArray[1] || $totalTieAmount > $limitMoneyTieArray[1]){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($totalBankerAmount > 0 && $totalBankerAmount < $limitMoneyArray[0]) || ($totalPlayerAmount > 0 && $totalPlayerAmount < $limitMoneyArray[0]) || ($totalTieAmount > 0 && $totalTieAmount < $limitMoneyTieArray[0])){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
//如果桌子设置了单口最高下注,则所有的下注不能超过桌子单口下注限红
if(($tableInfo['limit_money_total'] > 0 && $curNumberTabBankerAmount > $tableInfo['limit_money_total']) || ($tableInfo['limit_money_total'] > 0 && $curNumberTabPlayerAmount > $tableInfo['limit_money_total']) || ($tableInfo['limit_money_tie_total'] > 0 && $curNumberTabTieAmount > $tableInfo['limit_money_tie_total']) ){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** Table Limit End *****/
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
if($userInfo['bet_type'] == 2){
$tableManager = app('swoole.table.manager');
$managerSession = $tableManager->get((string) $userInfo['manager_id']);
if ($managerSession && is_array($managerSession)){
$ws->setSender(0)->to($managerSession['fd'])->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'user_id' => $userInfo['id'], 'manager_id' => $userInfo['manager_id'] ,'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
}
}
$round = array(
'banker_amount' => intval($numberTabInfo['banker_amount'] + $data['banker_amount']),
'player_amount' => intval($numberTabInfo['player_amount'] + $data['player_amount']),
'tie_amount' => intval($numberTabInfo['tie_amount'] + $data['tie_amount']),
'amount_item' => array(
'banker_amount' => intval($data['banker_amount']),
'player_amount' => intval($data['player_amount']),
'tie_amount' => intval($data['tie_amount']),
'user_id' => $userInfo['id'],
),
);
$ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]);
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+189
View File
@@ -0,0 +1,189 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\SocketSession;
/**
* TODO ToBetNnService
* Class ToBetNnService
* @package app\services\bet
*/
class ToBetNnService
{
/**
* TODO 处理toBetNn
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetNn(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$data = array();
$data['amount_player_1'] = isset($event['amount_player_1']) && intval($event['amount_player_1']) > 0 ? intval($event['amount_player_1']) : 0;
$data['amount_player_1_times'] = isset($event['amount_player_1_times']) && intval($event['amount_player_1_times']) > 0 ? intval($event['amount_player_1_times']) : 0;
$data['withhold_player_1_times'] = $data['amount_player_1_times'] * 4;
$data['amount_player_1_banker'] = isset($event['amount_player_1_banker']) && intval($event['amount_player_1_banker']) > 0 ? intval($event['amount_player_1_banker']) : 0;
$data['amount_player_1_banker_times'] = isset($event['amount_player_1_banker_times']) && intval($event['amount_player_1_banker_times']) > 0 ? intval($event['amount_player_1_banker_times']) : 0;
$data['withhold_player_1_banker_times'] = $data['amount_player_1_banker_times'] * 4;
$data['amount_player_2'] = isset($event['amount_player_2']) && intval($event['amount_player_2']) > 0 ? intval($event['amount_player_2']) : 0;
$data['amount_player_2_times'] = isset($event['amount_player_2_times']) && intval($event['amount_player_2_times']) > 0 ? intval($event['amount_player_2_times']) : 0;
$data['withhold_player_2_times'] = $data['amount_player_2_times'] * 4;
$data['amount_player_2_banker'] = isset($event['amount_player_2_banker']) && intval($event['amount_player_2_banker']) > 0 ? intval($event['amount_player_2_banker']) : 0;
$data['amount_player_2_banker_times'] = isset($event['amount_player_2_banker_times']) && intval($event['amount_player_2_banker_times']) > 0 ? intval($event['amount_player_2_banker_times']) : 0;
$data['withhold_player_2_banker_times'] = $data['amount_player_2_banker_times'] * 4;
$data['amount_player_3'] = isset($event['amount_player_3']) && intval($event['amount_player_3']) > 0 ? intval($event['amount_player_3']) : 0;
$data['amount_player_3_times'] = isset($event['amount_player_3_times']) && intval($event['amount_player_3_times']) > 0 ? intval($event['amount_player_3_times']) : 0;
$data['withhold_player_3_times'] = $data['amount_player_3_times'] * 4;
$data['amount_player_3_banker'] = isset($event['amount_player_3_banker']) && intval($event['amount_player_3_banker']) > 0 ? intval($event['amount_player_3_banker']) : 0;
$data['amount_player_3_banker_times'] = isset($event['amount_player_3_banker_times']) && intval($event['amount_player_3_banker_times']) > 0 ? intval($event['amount_player_3_banker_times']) : 0;
$data['withhold_player_3_banker_times'] = $data['amount_player_3_banker_times'] * 4;
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
/***** User Limit Start *****/
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
$betTotalAmount = [];
if($prevBetInfo){
$betTotalAmount['amount_player_1'] = $prevBetInfo['amount_player_1'] + $data['amount_player_1'];
$betTotalAmount['amount_player_2'] = $prevBetInfo['amount_player_2'] + $data['amount_player_2'];
$betTotalAmount['amount_player_3'] = $prevBetInfo['amount_player_3'] + $data['amount_player_3'];
$betTotalAmount['amount_player_1_times'] = $prevBetInfo['amount_player_1_times'] + $data['amount_player_1_times'];
$betTotalAmount['amount_player_2_times'] = $prevBetInfo['amount_player_2_times'] + $data['amount_player_2_times'];
$betTotalAmount['amount_player_3_times'] = $prevBetInfo['amount_player_3_times'] + $data['amount_player_3_times'];
$betTotalAmount['withhold_player_1_times'] = $prevBetInfo['withhold_player_1_times'] + $data['withhold_player_1_times'];
$betTotalAmount['withhold_player_2_times'] = $prevBetInfo['withhold_player_2_times'] + $data['withhold_player_2_times'];
$betTotalAmount['withhold_player_3_times'] = $prevBetInfo['withhold_player_3_times'] + $data['withhold_player_3_times'];
$betTotalAmount['amount_player_1_banker'] = $prevBetInfo['amount_player_1_banker'] + $data['amount_player_1_banker'];
$betTotalAmount['amount_player_2_banker'] = $prevBetInfo['amount_player_2_banker'] + $data['amount_player_2_banker'];
$betTotalAmount['amount_player_3_banker'] = $prevBetInfo['amount_player_3_banker'] + $data['amount_player_3_banker'];
$betTotalAmount['amount_player_1_banker_times'] = $prevBetInfo['amount_player_1_banker_times'] + $data['amount_player_1_banker_times'];
$betTotalAmount['amount_player_2_banker_times'] = $prevBetInfo['amount_player_2_banker_times'] + $data['amount_player_2_banker_times'];
$betTotalAmount['amount_player_3_banker_times'] = $prevBetInfo['amount_player_3_banker_times'] + $data['amount_player_3_banker_times'];
$betTotalAmount['withhold_player_1_banker_times'] = $prevBetInfo['withhold_player_1_banker_times'] + $data['withhold_player_1_banker_times'];
$betTotalAmount['withhold_player_2_banker_times'] = $prevBetInfo['withhold_player_2_banker_times'] + $data['withhold_player_2_banker_times'];
$betTotalAmount['withhold_player_3_banker_times'] = $prevBetInfo['withhold_player_3_banker_times'] + $data['withhold_player_3_banker_times'];
}else{
$betTotalAmount = $data;
}
$withholdKeys = [
'withhold_player_1_times',
'withhold_player_2_times',
'withhold_player_3_times',
'withhold_player_1_banker_times',
'withhold_player_2_banker_times',
'withhold_player_3_banker_times',
];
foreach ($betTotalAmount AS $k => $v){
if ($v > $userInfo['limit_high'] && !in_array($k,$withholdKeys)){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
}
foreach ($betTotalAmount AS $k => $v){
if ($v > 0 && $v < $userInfo['limit_low'] && !in_array($k,$withholdKeys)){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
}
/***** User Limit End *****/
/***** Table Limit Start *****/
$limitMoneyArray = explode('-',$tableInfo['limit_money']);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$total_player_1 = $prevBetInfo['amount_player_1'] + $data['amount_player_1'];
$total_player_2 = $prevBetInfo['amount_player_2'] + $data['amount_player_2'];
$total_player_3 = $prevBetInfo['amount_player_3'] + $data['amount_player_3'];
$total_player_1_times = $prevBetInfo['amount_player_1_times'] + $data['amount_player_1_times'];
$total_player_2_times = $prevBetInfo['amount_player_2_times'] + $data['amount_player_2_times'];
$total_player_3_times = $prevBetInfo['amount_player_3_times'] + $data['amount_player_3_times'];
$total_player_1_withhold = $prevBetInfo['withhold_player_1_times'] + $data['withhold_player_1_times'];
$total_player_2_withhold = $prevBetInfo['withhold_player_2_times'] + $data['withhold_player_2_times'];
$total_player_3_withhold = $prevBetInfo['withhold_player_3_times'] + $data['withhold_player_3_times'];
$total_player_1_banker = $prevBetInfo['amount_player_1_banker'] + $data['amount_player_1_banker'];
$total_player_2_banker = $prevBetInfo['amount_player_2_banker'] + $data['amount_player_2_banker'];
$total_player_3_banker = $prevBetInfo['amount_player_3_banker'] + $data['amount_player_3_banker'];
$total_player_1_banker_times = $prevBetInfo['amount_player_1_banker_times'] + $data['amount_player_1_banker_times'];
$total_player_2_banker_times = $prevBetInfo['amount_player_2_banker_times'] + $data['amount_player_2_banker_times'];
$total_player_3_banker_times = $prevBetInfo['amount_player_3_banker_times'] + $data['amount_player_3_banker_times'];
$total_player_1_banker_times_withhold = $prevBetInfo['withhold_player_1_banker_times'] + $data['withhold_player_1_banker_times'];
$total_player_2_banker_times_withhold = $prevBetInfo['withhold_player_2_banker_times'] + $data['withhold_player_2_banker_times'];
$total_player_3_banker_times_withhold = $prevBetInfo['withhold_player_3_banker_times'] + $data['withhold_player_3_banker_times'];
}else{
$total_player_1 = $data['amount_player_1'];
$total_player_2 = $data['amount_player_2'];
$total_player_3 = $data['amount_player_3'];
$total_player_1_times = $data['amount_player_1_times'];
$total_player_2_times = $data['amount_player_2_times'];
$total_player_3_times = $data['amount_player_3_times'];
$total_player_1_withhold = $data['withhold_player_1_times'];
$total_player_2_withhold = $data['withhold_player_2_times'];
$total_player_3_withhold = $data['withhold_player_3_times'];
$total_player_1_banker = $data['amount_player_1_banker'];
$total_player_2_banker = $data['amount_player_2_banker'];
$total_player_3_banker = $data['amount_player_3_banker'];
$total_player_1_banker_times = $data['amount_player_1_banker_times'];
$total_player_2_banker_times = $data['amount_player_2_banker_times'];
$total_player_3_banker_times = $data['amount_player_3_banker_times'];
$total_player_1_banker_times_withhold = $data['withhold_player_1_banker_times'];
$total_player_2_banker_times_withhold = $data['withhold_player_2_banker_times'];
$total_player_3_banker_times_withhold = $data['withhold_player_3_banker_times'];
}
if($total_player_1 > $limitMoneyArray[1] || $total_player_2 > $limitMoneyArray[1] || $total_player_3 > $limitMoneyArray[1] || $total_player_1_times > $limitMoneyArray[1] || $total_player_2_times > $limitMoneyArray[1] || $total_player_3_times > $limitMoneyArray[1] || $total_player_1_banker > $limitMoneyArray[1] || $total_player_2_banker > $limitMoneyArray[1] || $total_player_3_banker > $limitMoneyArray[1] || $total_player_1_banker_times > $limitMoneyArray[1] || $total_player_2_banker_times > $limitMoneyArray[1] || $total_player_3_banker_times > $limitMoneyArray[1] ){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($total_player_1 > 0 && $total_player_1 < $limitMoneyArray[0]) || ($total_player_2 > 0 && $total_player_2 < $limitMoneyArray[0]) || ($total_player_3 > 0 && $total_player_3 < $limitMoneyArray[0]) || ($total_player_1_times > 0 && $total_player_1_times < $limitMoneyArray[0]) || ($total_player_2_times > 0 && $total_player_2_times < $limitMoneyArray[0]) || ($total_player_3_times > 0 && $total_player_3_times < $limitMoneyArray[0]) || ($total_player_1_banker > 0 && $total_player_1_banker < $limitMoneyArray[0]) || ($total_player_2_banker > 0 && $total_player_2_banker < $limitMoneyArray[0]) || ($total_player_3_banker > 0 && $total_player_3_banker < $limitMoneyArray[0]) || ($total_player_1_banker_times > 0 && $total_player_1_banker_times < $limitMoneyArray[0]) || ($total_player_2_banker_times > 0 && $total_player_2_banker_times < $limitMoneyArray[0]) || ($total_player_3_banker_times > 0 && $total_player_3_banker_times < $limitMoneyArray[0])){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** Table Limit End *****/
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
// 待确定是否推送即时彩池,现不推送
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+70
View File
@@ -0,0 +1,70 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\RouletteUtil;
use freedom\utils\SocketSession;
/**
* TODO ToBetRouletteService
* Class ToBetRouletteService
* @package app\services\bet
*/
class ToBetRouletteService{
/**
* TODO 处理轮盘下注
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetRoulette(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$data = array();
$event_amount = $event['amount'];
$fieldName = 'roulette_'.$event['roulette_type'].'_amount';
foreach ($event_amount as $k => $v){
if (intval($v) > 0){
$data[$k] = intval($v);
}
}
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$beforeAmount = string_to_array($prevBetInfo[$fieldName]);
$betTotalAmount = RouletteUtil::amountInc($beforeAmount, $data);
}else{
$betTotalAmount = $data;
}
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0,$fieldName);
$numberTabAmount = string_to_array($numberTabInfo[$fieldName]);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => [$fieldName => $betTotalAmount], 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
$totalAmountArray = RouletteUtil::amountInc($numberTabAmount, $data);
$round = [
'amount_total' => $totalAmountArray,
'amount_item' => $data
];
$ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]);
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+190
View File
@@ -0,0 +1,190 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\SocketSession;
/**
* TODO ToBetTcService
* Class ToBetTcService
* @package app\services\bet
*/
class ToBetTcService
{
/**
* TODO 处理toBetTc
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetTc(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$data = array();
$data['amount_player_1'] = isset($event['amount_player_1']) && intval($event['amount_player_1']) > 0 ? intval($event['amount_player_1']) : 0;
$data['amount_player_1_times'] = isset($event['amount_player_1_times']) && intval($event['amount_player_1_times']) > 0 ? intval($event['amount_player_1_times']) : 0;
$data['withhold_player_1_times'] = $data['amount_player_1_times'] * 19;
$data['amount_player_1_banker'] = isset($event['amount_player_1_banker']) && intval($event['amount_player_1_banker']) > 0 ? intval($event['amount_player_1_banker']) : 0;
$data['amount_player_1_banker_times'] = isset($event['amount_player_1_banker_times']) && intval($event['amount_player_1_banker_times']) > 0 ? intval($event['amount_player_1_banker_times']) : 0;
$data['withhold_player_1_banker_times'] = $data['amount_player_1_banker_times'] * 19;
$data['amount_player_2'] = isset($event['amount_player_2']) && intval($event['amount_player_2']) > 0 ? intval($event['amount_player_2']) : 0;
$data['amount_player_2_times'] = isset($event['amount_player_2_times']) && intval($event['amount_player_2_times']) > 0 ? intval($event['amount_player_2_times']) : 0;
$data['withhold_player_2_times'] = $data['amount_player_2_times'] * 19;
$data['amount_player_2_banker'] = isset($event['amount_player_2_banker']) && intval($event['amount_player_2_banker']) > 0 ? intval($event['amount_player_2_banker']) : 0;
$data['amount_player_2_banker_times'] = isset($event['amount_player_2_banker_times']) && intval($event['amount_player_2_banker_times']) > 0 ? intval($event['amount_player_2_banker_times']) : 0;
$data['withhold_player_2_banker_times'] = $data['amount_player_2_banker_times'] * 19;
$data['amount_player_3'] = isset($event['amount_player_3']) && intval($event['amount_player_3']) > 0 ? intval($event['amount_player_3']) : 0;
$data['amount_player_3_times'] = isset($event['amount_player_3_times']) && intval($event['amount_player_3_times']) > 0 ? intval($event['amount_player_3_times']) : 0;
$data['withhold_player_3_times'] = $data['amount_player_3_times'] * 19;
$data['amount_player_3_banker'] = isset($event['amount_player_3_banker']) && intval($event['amount_player_3_banker']) > 0 ? intval($event['amount_player_3_banker']) : 0;
$data['amount_player_3_banker_times'] = isset($event['amount_player_3_banker_times']) && intval($event['amount_player_3_banker_times']) > 0 ? intval($event['amount_player_3_banker_times']) : 0;
$data['withhold_player_3_banker_times'] = $data['amount_player_3_banker_times'] * 19;
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
/***** User Limit Start *****/
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
$betTotalAmount = [];
if($prevBetInfo){
$betTotalAmount['amount_player_1'] = $prevBetInfo['amount_player_1'] + $data['amount_player_1'];
$betTotalAmount['amount_player_2'] = $prevBetInfo['amount_player_2'] + $data['amount_player_2'];
$betTotalAmount['amount_player_3'] = $prevBetInfo['amount_player_3'] + $data['amount_player_3'];
$betTotalAmount['amount_player_1_times'] = $prevBetInfo['amount_player_1_times'] + $data['amount_player_1_times'];
$betTotalAmount['amount_player_2_times'] = $prevBetInfo['amount_player_2_times'] + $data['amount_player_2_times'];
$betTotalAmount['amount_player_3_times'] = $prevBetInfo['amount_player_3_times'] + $data['amount_player_3_times'];
$betTotalAmount['withhold_player_1_times'] = $prevBetInfo['withhold_player_1_times'] + $data['withhold_player_1_times'];
$betTotalAmount['withhold_player_2_times'] = $prevBetInfo['withhold_player_2_times'] + $data['withhold_player_2_times'];
$betTotalAmount['withhold_player_3_times'] = $prevBetInfo['withhold_player_3_times'] + $data['withhold_player_3_times'];
$betTotalAmount['amount_player_1_banker'] = $prevBetInfo['amount_player_1_banker'] + $data['amount_player_1_banker'];
$betTotalAmount['amount_player_2_banker'] = $prevBetInfo['amount_player_2_banker'] + $data['amount_player_2_banker'];
$betTotalAmount['amount_player_3_banker'] = $prevBetInfo['amount_player_3_banker'] + $data['amount_player_3_banker'];
$betTotalAmount['amount_player_1_banker_times'] = $prevBetInfo['amount_player_1_banker_times'] + $data['amount_player_1_banker_times'];
$betTotalAmount['amount_player_2_banker_times'] = $prevBetInfo['amount_player_2_banker_times'] + $data['amount_player_2_banker_times'];
$betTotalAmount['amount_player_3_banker_times'] = $prevBetInfo['amount_player_3_banker_times'] + $data['amount_player_3_banker_times'];
$betTotalAmount['withhold_player_1_banker_times'] = $prevBetInfo['withhold_player_1_banker_times'] + $data['withhold_player_1_banker_times'];
$betTotalAmount['withhold_player_2_banker_times'] = $prevBetInfo['withhold_player_2_banker_times'] + $data['withhold_player_2_banker_times'];
$betTotalAmount['withhold_player_3_banker_times'] = $prevBetInfo['withhold_player_3_banker_times'] + $data['withhold_player_3_banker_times'];
}else{
$betTotalAmount = $data;
}
$withholdKeys = [
'withhold_player_1_times',
'withhold_player_2_times',
'withhold_player_3_times',
'withhold_player_1_banker_times',
'withhold_player_2_banker_times',
'withhold_player_3_banker_times',
];
foreach ($betTotalAmount AS $k => $v){
if ($v > $userInfo['limit_high'] && !in_array($k,$withholdKeys)){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
}
foreach ($betTotalAmount AS $k => $v){
if ($v > 0 && $v < $userInfo['limit_low'] && !in_array($k,$withholdKeys)){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
}
/***** User Limit End *****/
/***** Table Limit Start *****/
$limitMoneyArray = explode('-',$tableInfo['limit_money']);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$total_player_1 = $prevBetInfo['amount_player_1'] + $data['amount_player_1'];
$total_player_2 = $prevBetInfo['amount_player_2'] + $data['amount_player_2'];
$total_player_3 = $prevBetInfo['amount_player_3'] + $data['amount_player_3'];
$total_player_1_times = $prevBetInfo['amount_player_1_times'] + $data['amount_player_1_times'];
$total_player_2_times = $prevBetInfo['amount_player_2_times'] + $data['amount_player_2_times'];
$total_player_3_times = $prevBetInfo['amount_player_3_times'] + $data['amount_player_3_times'];
$total_player_1_withhold = $prevBetInfo['withhold_player_1_times'] + $data['withhold_player_1_times'];
$total_player_2_withhold = $prevBetInfo['withhold_player_2_times'] + $data['withhold_player_2_times'];
$total_player_3_withhold = $prevBetInfo['withhold_player_3_times'] + $data['withhold_player_3_times'];
$total_player_1_banker = $prevBetInfo['amount_player_1_banker'] + $data['amount_player_1_banker'];
$total_player_2_banker = $prevBetInfo['amount_player_2_banker'] + $data['amount_player_2_banker'];
$total_player_3_banker = $prevBetInfo['amount_player_3_banker'] + $data['amount_player_3_banker'];
$total_player_1_banker_times = $prevBetInfo['amount_player_1_banker_times'] + $data['amount_player_1_banker_times'];
$total_player_2_banker_times = $prevBetInfo['amount_player_2_banker_times'] + $data['amount_player_2_banker_times'];
$total_player_3_banker_times = $prevBetInfo['amount_player_3_banker_times'] + $data['amount_player_3_banker_times'];
$total_player_1_banker_times_withhold = $prevBetInfo['withhold_player_1_banker_times'] + $data['withhold_player_1_banker_times'];
$total_player_2_banker_times_withhold = $prevBetInfo['withhold_player_2_banker_times'] + $data['withhold_player_2_banker_times'];
$total_player_3_banker_times_withhold = $prevBetInfo['withhold_player_3_banker_times'] + $data['withhold_player_3_banker_times'];
}else{
$total_player_1 = $data['amount_player_1'];
$total_player_2 = $data['amount_player_2'];
$total_player_3 = $data['amount_player_3'];
$total_player_1_times = $data['amount_player_1_times'];
$total_player_2_times = $data['amount_player_2_times'];
$total_player_3_times = $data['amount_player_3_times'];
$total_player_1_withhold = $data['withhold_player_1_times'];
$total_player_2_withhold = $data['withhold_player_2_times'];
$total_player_3_withhold = $data['withhold_player_3_times'];
$total_player_1_banker = $data['amount_player_1_banker'];
$total_player_2_banker = $data['amount_player_2_banker'];
$total_player_3_banker = $data['amount_player_3_banker'];
$total_player_1_banker_times = $data['amount_player_1_banker_times'];
$total_player_2_banker_times = $data['amount_player_2_banker_times'];
$total_player_3_banker_times = $data['amount_player_3_banker_times'];
$total_player_1_banker_times_withhold = $data['withhold_player_1_banker_times'];
$total_player_2_banker_times_withhold = $data['withhold_player_2_banker_times'];
$total_player_3_banker_times_withhold = $data['withhold_player_3_banker_times'];
}
if($total_player_1 > $limitMoneyArray[1] || $total_player_2 > $limitMoneyArray[1] || $total_player_3 > $limitMoneyArray[1] || $total_player_1_times > $limitMoneyArray[1] || $total_player_2_times > $limitMoneyArray[1] || $total_player_3_times > $limitMoneyArray[1] || $total_player_1_banker > $limitMoneyArray[1] || $total_player_2_banker > $limitMoneyArray[1] || $total_player_3_banker > $limitMoneyArray[1] || $total_player_1_banker_times > $limitMoneyArray[1] || $total_player_2_banker_times > $limitMoneyArray[1] || $total_player_3_banker_times > $limitMoneyArray[1]){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($total_player_1 > 0 && $total_player_1 < $limitMoneyArray[0]) || ($total_player_2 > 0 && $total_player_2 < $limitMoneyArray[0]) || ($total_player_3 > 0 && $total_player_3 < $limitMoneyArray[0]) || ($total_player_1_times > 0 && $total_player_1_times < $limitMoneyArray[0]) || ($total_player_2_times > 0 && $total_player_2_times < $limitMoneyArray[0]) || ($total_player_3_times > 0 && $total_player_3_times < $limitMoneyArray[0]) || ($total_player_1_banker > 0 && $total_player_1_banker < $limitMoneyArray[0]) || ($total_player_2_banker > 0 && $total_player_2_banker < $limitMoneyArray[0]) || ($total_player_3_banker > 0 && $total_player_3_banker < $limitMoneyArray[0]) || ($total_player_1_banker_times > 0 && $total_player_1_banker_times < $limitMoneyArray[0]) || ($total_player_2_banker_times > 0 && $total_player_2_banker_times < $limitMoneyArray[0]) || ($total_player_3_banker_times > 0 && $total_player_3_banker_times < $limitMoneyArray[0]) ){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** Table Limit End *****/
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
// 待确定是否推送即时彩池,现不推送
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+120
View File
@@ -0,0 +1,120 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use freedom\utils\SocketSession;
/**
* TODO ToBetToningService
* Class ToBetToningService
* @package app\services\bet
*/
class ToBetToningService
{
/**
* TODO 处理色碟下注
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toBetToning(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$data = array();
$data['toning_zero'] = isset($event['toning_zero']) && intval($event['toning_zero']) > 0 ? intval($event['toning_zero']) : 0;
$data['toning_four'] = isset($event['toning_four']) && intval($event['toning_four']) > 0 ? intval($event['toning_four']) : 0;
$data['toning_one'] = isset($event['toning_one']) && intval($event['toning_one']) > 0 ? intval($event['toning_one']) : 0;
$data['toning_three'] = isset($event['toning_three']) && intval($event['toning_three']) > 0 ? intval($event['toning_three']) : 0;
$data['toning_big'] = isset($event['toning_big']) && intval($event['toning_big']) > 0 ? intval($event['toning_big']) : 0;
$data['toning_small'] = isset($event['toning_small']) && intval($event['toning_small']) > 0 ? intval($event['toning_small']) : 0;
$data['toning_singular'] = isset($event['toning_singular']) && intval($event['toning_singular']) > 0 ? intval($event['toning_singular']) : 0;
$data['toning_plural'] = isset($event['toning_plural']) && intval($event['toning_plural']) > 0 ? intval($event['toning_plural']) : 0;
$seat_num = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$time = time();
$toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data);
if ($toBetCheck['status'] == false){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$numberTabInfo = $toBetCheck['numberTabInfo'];
$userInfo = $toBetCheck['userInfo'];
$amount = array_sum($data);
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
$betTotalAmount = [];
if($prevBetInfo){
$betArray = string_to_array($prevBetInfo['toning_amount']);
$betTotalAmount['toning_zero'] = $betArray['toning_zero'] + $data['toning_zero'];
$betTotalAmount['toning_four'] = $betArray['toning_four'] + $data['toning_four'];
$betTotalAmount['toning_one'] = $betArray['toning_one'] + $data['toning_one'];
$betTotalAmount['toning_three'] = $betArray['toning_three'] + $data['toning_three'];
$betTotalAmount['toning_big'] = $betArray['toning_big'] + $data['toning_big'];
$betTotalAmount['toning_small'] = $betArray['toning_small'] + $data['toning_small'];
$betTotalAmount['toning_singular'] = $betArray['toning_singular'] + $data['toning_singular'];
$betTotalAmount['toning_plural'] = $betArray['toning_plural'] + $data['toning_plural'];
}else{
$betTotalAmount = $data;
}
/***** User Limit Start *****/
$totalAmount = array_sum($betTotalAmount);
if ($totalAmount > $userInfo['limit_high']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if ($totalAmount > 0 && $totalAmount < $userInfo['limit_low']){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_user']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
/***** User Limit End *****/
/***** Table Limit Start *****/
$totalAmount = array_sum($betTotalAmount);
$limitMoneyArray = explode('-',$tableInfo['limit_money']);
if($totalAmount > $limitMoneyArray[1]){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'exceeds_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
if(($totalAmount > 0 && $totalAmount < $limitMoneyArray[0]) ){
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'under_limit_table']);
SocketSession::resetRepeat($fd,'user','isToBet');
return;
}
$res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0);
$numberTabAmount = string_to_array($numberTabInfo['toning_amount']);
if($res){
$ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']);
$round = array(
'toning_zero' => isset($numberTabAmount['toning_zero']) ? intval($numberTabAmount['toning_zero'] + $data['toning_zero']) : $data['toning_zero'],
'toning_four' => isset($numberTabAmount['toning_four']) ? intval($numberTabAmount['toning_four'] + $data['toning_four']) : $data['toning_four'],
'toning_one' => isset($numberTabAmount['toning_one']) ? intval($numberTabAmount['toning_one'] + $data['toning_one']) : $data['toning_one'],
'toning_three' => isset($numberTabAmount['toning_three']) ? intval($numberTabAmount['toning_three'] + $data['toning_three']) : $data['toning_three'],
'toning_big' => isset($numberTabAmount['toning_big']) ? intval($numberTabAmount['toning_big'] + $data['toning_big']) : $data['toning_big'],
'toning_small' => isset($numberTabAmount['toning_small']) ? intval($numberTabAmount['toning_small'] + $data['toning_small']) : $data['toning_small'],
'toning_singular' => isset($numberTabAmount['toning_singular']) ? intval($numberTabAmount['toning_singular'] + $data['toning_singular']) : $data['toning_singular'],
'toning_plural' => isset($numberTabAmount['toning_plural']) ? intval($numberTabAmount['toning_plural'] + $data['toning_plural']) : $data['toning_plural'],
'amount_item' => array(
'toning_zero' => $data['toning_zero'],
'toning_four' => $data['toning_four'],
'toning_one' => $data['toning_one'],
'toning_three' => $data['toning_three'],
'toning_big' => $data['toning_big'],
'toning_small' => $data['toning_small'],
'toning_singular' => $data['toning_singular'],
'toning_plural' => $data['toning_plural'],
'user_id' => $userInfo['id'],
),
);
$ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]);
}else{
$ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']);
}
SocketSession::resetRepeat($fd,'user','isToBet');
}
}
+64
View File
@@ -0,0 +1,64 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use app\models\process\NumberTab;
use app\models\user\User;
use freedom\utils\SocketSession;
/**
* TODO ToSeatService
* Class ToSeatService
* @package app\services\bet
*/
class ToLeaveSeatService
{
/**
* TODO 处理toSeat
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toLeaveSeat(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$numberTabId = isset($event['number_tab_id']) && intval($event['number_tab_id']) > 0 ? intval($event['number_tab_id']) : 0;
$userId = isset($event['user_id']) && intval($event['user_id']) > 0 ? intval($event['user_id']) : 0;
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
/** 验证是否和当前铺同一铺 */
if ($numberTabInfo['id'] != $numberTabId){
$ws->emit('toLeaveSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_leave_seat_fail_1']);
SocketSession::resetRepeat($fd,'user','isToLeaveSeat');
return;
}
$userInfo = User::get(['id' => $userId, 'status' => 1, 'is_delete' => 0]);
/** 验证会员有效 */
if (!$userInfo || $userInfo['bet_type'] != 2){
$ws->emit('toLeaveSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_leave_seat_fail_2']);
SocketSession::resetRepeat($fd,'user','isToLeaveSeat');
return;
}
/** 验证本局是否下注 */
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo){
$ws->emit('toLeaveSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_leave_seat_fail_3']);
SocketSession::resetRepeat($fd,'user','isToLeaveSeat');
return;
}
$res = Bet::toLeaveSeat($userInfo,$numberTabInfo);
if ($res){
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
$table_seat_info = json_decode($numberTabInfo['seat_json'],true);
$leaveMsg = ['user_id' => $userInfo['id'], 'manager_id' => $userInfo['manager_id']];
$ws->to(SocketSession::HOUSE_NAME)->emit('toLeaveSeat',['status' => true, 'table_id' => $tableInfo['id'],'leaveMsg' => $leaveMsg, 'table_seat_info' => $table_seat_info[$userInfo['manager_id']], 'msg' => 'to_leave_seat_success']);
}else{
$ws->emit('toLeaveSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_leave_seat_fail']);
}
SocketSession::resetRepeat($fd,'user','isToLeaveSeat');
}
}
+76
View File
@@ -0,0 +1,76 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use app\models\process\NumberTab;
use app\models\user\User;
use freedom\utils\SocketSession;
/**
* TODO ToRobService
* Class ToRobService
* @package app\services\bet
*/
class ToRobService
{
/**
* TODO 处理toRob
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toTob(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$numberTabId = isset($event['number_tab_id']) && intval($event['number_tab_id']) > 0 ? intval($event['number_tab_id']) : 0;
$userId = isset($event['user_id']) && intval($event['user_id']) > 0 ? intval($event['user_id']) : 0;
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
/** 验证是否和当前铺同一铺 */
if ($numberTabInfo['id'] != $numberTabId){
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail_4']);
SocketSession::resetRepeat($fd,'user','isToRob');
return;
}
/** 验证是否抢庄时间 */
if ($numberTabInfo['rob_status'] != 1 || time() > $numberTabInfo['rob_start_time'] + $tableInfo['rob_time']){
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail_3']);
SocketSession::resetRepeat($fd,'user','isToRob');
return;
}
$userInfo = User::get(['id' => $userId, 'status' => 1, 'is_delete' => 0]);
/** 验证会员有效 */
if (!$userInfo){
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail_2']);
SocketSession::resetRepeat($fd,'user','isToRob');
return;
}
/** 十万会员不能抢庄 */
if($userInfo['is_sw'] == 1){
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail_5']);
SocketSession::resetRepeat($fd,'user','isToRob');
return;
}
/** 会员金额必须大于桌子抢庄金额 */
if($userInfo['money'] < $tableInfo['limit_banker_amount']){
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail_1']);
SocketSession::resetRepeat($fd,'user','isToRob');
return;
}
/** 验证当前局是否有人已经抢庄 */
if($numberTabInfo['rob_banker_id'] > 0){
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail_6']);
SocketSession::resetRepeat($fd,'user','isToRob');
return;
}
$res = Bet::toRob($userInfo,$numberTabInfo);
if ($res){
$RobMsg = ['rob_banker_id' => $userInfo['id'], 'rob_banker_username' => $userInfo['username']];
$ws->to(SocketSession::HOUSE_NAME)->emit('toRob',['status' => true, 'table_id' => $tableInfo['id'], 'RobMsg' => $RobMsg, 'msg' => '抢庄成功']);
}else{
$ws->emit('toRob',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_rob_fail']);
}
SocketSession::resetRepeat($fd,'user','isToRob');
}
}
+81
View File
@@ -0,0 +1,81 @@
<?php
namespace app\services\bet;
use app\models\bet\Bet;
use app\models\process\NumberTab;
use app\models\user\User;
use freedom\utils\SocketSession;
/**
* TODO ToSeatService
* Class ToSeatService
* @package app\services\bet
*/
class ToSeatService
{
/**
* TODO 处理toSeat
* @param array $event
* @param array $tableInfo
* @return void
*/
public static function toSeat(array $event, array $tableInfo){
$ws = app('\think\swoole\WebSocket');
$fd = $ws->getSender();
$numberTabId = isset($event['number_tab_id']) && intval($event['number_tab_id']) > 0 ? intval($event['number_tab_id']) : 0;
$userId = isset($event['user_id']) && intval($event['user_id']) > 0 ? intval($event['user_id']) : 0;
$seatNum = isset($event['seat_num']) && intval($event['seat_num']) > 0 ? intval($event['seat_num']) : 0;
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
/** 验证是否和当前铺同一 */
if ($numberTabInfo['id'] != $numberTabId){
$ws->emit('toSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_seat_fail_1']);
SocketSession::resetRepeat($fd,'user','isToSeat');
return;
}
$userInfo = User::get(['id' => $userId, 'status' => 1, 'is_delete' => 0]);
/** 验证会员有效 */
if (!$userInfo || $userInfo['bet_type'] != 2){
$ws->emit('toSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_seat_fail_2']);
SocketSession::resetRepeat($fd,'user','isToSeat');
return;
}
/** 验证座位号参数 */
$table_seat_num = $tableInfo['seat_num'] >= 4 ? $tableInfo['seat_num'] + 1 : $tableInfo['seat_num'];
if($seatNum < 1 || $seatNum > $table_seat_num){
$ws->emit('toSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_seat_fail_3']);
SocketSession::resetRepeat($fd,'user','isToSeat');
return;
}
$seatJson = $numberTabInfo['seat_json'];
$seatArr = json_decode($seatJson,true);
/** 验证座位是否有玩家 */
if(isset($seatArr[$userInfo['manager_id']])){
if($seatArr[$userInfo['manager_id']][$seatNum] && $seatArr[$userInfo['manager_id']][$seatNum] != $userId){
$ws->emit('toSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_seat_fail_4']);
SocketSession::resetRepeat($fd,'user','isToSeat');
return;
}
}
$prevBetInfo = Bet::getPrevBetInfo($userInfo['id'],$numberTabInfo['id']);
if($prevBetInfo && $prevBetInfo['seat_num'] != $seatNum){
$ws->emit('toSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_seat_fail_5']);
SocketSession::resetRepeat($fd,'user','isToSeat');
return;
}
$res = Bet::toSeat($userInfo,$numberTabInfo,$tableInfo,$seatNum);
if ($res){
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
$table_seat_info = json_decode($numberTabInfo['seat_json'],true);
$SeatMsg = ['user_id' => $userInfo['id'], 'username' => $userInfo['username'],'manager_id' => $userInfo['manager_id'],'seat_num' => $seatNum];
$ws->to(SocketSession::HOUSE_NAME)->emit('toSeat',['status' => true, 'table_id' => $tableInfo['id'], 'SeatMsg' => $SeatMsg, 'table_seat_info' => $table_seat_info[$userInfo['manager_id']], 'msg' => 'to_seat_success']);
}else{
$ws->emit('toSeat',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_seat_fail']);
}
SocketSession::resetRepeat($fd,'user','isToSeat');
}
}