| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725 |
- <?php
- namespace App\Api;
- use PhalApi\Api;
- use App\Domain\Livepk as Domain_Livepk;
- /**
- * Livepk-主播PK
- */
- class Livepk extends Api {
- public function getRules() {
- return array(
- 'getLiveList' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'min' => 1, 'require' => true, 'desc' => '用户ID'),
- 'p' => array('name' => 'p', 'type' => 'int', 'default' => 1, 'desc' => '页码'),
- ),
- 'search' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'min' => 1, 'require' => true, 'desc' => '用户ID'),
- 'key' => array('name' => 'key', 'type' => 'string', 'require' => true, 'desc' => '关键词'),
- 'p' => array('name' => 'p', 'type' => 'int', 'default' => 1, 'desc' => '页码'),
- ),
- 'checkLive' => array(
- 'stream' => array('name' => 'stream', 'type' => 'string', 'require' => true, 'desc' => '连麦主播流名'),
- 'uid_stream' => array('name' => 'uid_stream', 'type' => 'string', 'require' => true, 'desc' => '当前主播流名'),
- ),
-
- 'changeLive' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'min' => 1, 'require' => true, 'desc' => '用户ID'),
- 'pkuid' => array('name' => 'pkuid', 'type' => 'int', 'require' => true, 'desc' => '连麦主播ID'),
- 'type' => array('name' => 'type', 'type' => 'int', 'require' => true, 'desc' => '标识'),
- 'sign' => array('name' => 'sign', 'type' => 'string', 'require' => true, 'desc' => '签名'),
- ),
-
- 'setPK' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'desc' => '用户ID'),
- 'pkuid' => array('name' => 'pkuid', 'type' => 'int', 'desc' => '连麦主播ID'),
- 'sign' => array('name' => 'sign', 'type' => 'string', 'desc' => '签名'),
- ),
-
- 'endPK' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'desc' => '用户ID'),
- 'addtime' => array('name' => 'addtime', 'type' => 'int', 'desc' => '时间戳'),
- 'type' => array('name' => 'type', 'type' => 'int', 'desc' => '标识'),
- 'sign' => array('name' => 'sign', 'type' => 'string','desc' => '签名'),
- ),
-
- 'setThreePK' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'desc' => '用户ID'),
- 'pkuid2' => array('name' => 'pkuid2', 'type' => 'int', 'desc' => '连麦主播ID2'),
- 'pkuid3' => array('name' => 'pkuid3', 'type' => 'int', 'desc' => '连麦主播ID3'),
- 'sign' => array('name' => 'sign', 'type' => 'string', 'desc' => '签名'),
- ),
-
- 'endThreePK' => array(
- 'uid' => array('name' => 'uid', 'type' => 'int', 'desc' => '用户ID'),
- 'addtime' => array('name' => 'addtime', 'type' => 'int', 'desc' => '时间戳'),
- 'type' => array('name' => 'type', 'type' => 'int', 'desc' => '标识'),
- 'sign' => array('name' => 'sign', 'type' => 'string','desc' => '签名'),
- ),
- );
- }
- /**
- * 获取直播中的用户列表
- * @desc 用于获取直播中的用户列表
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string info[].uid 主播ID
- * @return string info[].pkuid PK对象ID,0表示未连麦
- * @return string msg 提示信息
- */
- public function getLiveList() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $uid=\App\checkNull($this->uid);
- $p=\App\checkNull($this->p);
- if(!$p){
- $p=1;
- }
-
- $where="uid!={$uid}";
- $domain = new Domain_Livepk();
- $list = $domain->getLiveList($uid,$where,$p);
-
- foreach($list as $k=>$v){
- $userinfo=\App\getUserInfo($v['uid']);
- $v['sex']=$userinfo['sex'];
- $list[$k]=$v;
- }
- $rs['info']=$list;
- return $rs;
- }
-
- /**
- * 搜索直播用户
- * @desc 用于搜索直播中用户
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string info[].uid 主播ID
- * @return string info[].pkuid PK对象ID,0表示未连麦
- * @return string msg 提示信息
- */
- public function search() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $uid=\App\checkNull($this->uid);
- $key=\App\checkNull($this->key);
- $p=\App\checkNull($this->p);
- if(!$p){
- $p=1;
- }
-
- if($key==''){
- $rs['code']=1001;
- $rs['msg']=\PhalApi\T('请输入您要搜索的主播昵称或ID');
- return $rs;
- }
-
- $list=\PhalApi\DI()->notorm->user
- ->select('id')
- ->where("id!={$uid} and (id='{$key}' or user_nickname like '%{$key}%')")
- ->fetchAll();
- if(!$list){
- return $rs;
- }
- $uids=array_column($list,'id');
-
- $uids_s=implode(',',$uids);
-
- $where="uid!={$uid} and uid in ({$uids_s})";
-
- $domain = new Domain_Livepk();
- $list = $domain->getLiveList($uid,$where,$p);
-
- foreach($list as $k=>$v){
- $userinfo=\App\getUserInfo($v['uid']);
- $v['sex']=$userinfo['sex'];
- $list[$k]=$v;
- }
- $rs['info']=$list;
- return $rs;
- }
- /**
- * 检测要连麦主播是否直播中
- * @desc 用于检测要连麦主播是否直播中
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string msg 提示信息
- */
- public function checkLive() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $stream=\App\checkNull($this->stream);
- $uid_stream=\App\checkNull($this->uid_stream);
-
- $domain = new Domain_Livepk();
- $info = $domain->checkLive($stream);
- if(!$info){
- $rs['code']=1001;
- $rs['msg']=\PhalApi\T('对方已关播');
- return $rs;
- }
- //rtmp播流
- /*$configpri = getConfigPri();
- $nowtime=time();
- $bizid = $configpri['tx_bizid'];
- $push_url_key = $configpri['tx_push_key'];
- $tx_acc_key = $configpri['tx_acc_key'];
- $push = $configpri['tx_push'];
- $pull = $configpri['tx_pull'];
- $now_time2 = $nowtime + 3*60*60;
- $txTime = dechex($now_time2);
-
- $live_code = $uid_stream ;
-
- $txSecret2 = md5($tx_acc_key . $live_code . $txTime);
- $safe_url2 = "?txSecret=" . $txSecret2."&txTime=" .$txTime;
- $play_url = "rtmp://" . $pull . "/live/" .$live_code .$safe_url2. "&bizid=" . $bizid;*/
-
- //trtc播流
- $stream_arr=explode('_', $stream);
- $liveuid=$stream_arr[0];
- $play_url = \App\getTxTrtcUrl($liveuid,$uid_stream);
-
- $info=array(
- "pull" => $play_url
- );
- $rs['info'][0]=$info;
-
- return $rs;
- }
- /**
- * 连麦成功后更新直播信息
- * @desc 用于连麦成功后更新数据库信息
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string msg 提示信息
- */
- public function changeLive() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $uid = \App\checkNull($this->uid);
- $pkuid=\App\checkNull($this->pkuid);
- $type=\App\checkNull($this->type);
- $sign=\App\checkNull($this->sign);
-
- $checkdata=array(
- 'uid'=>$uid,
- 'pkuid'=>$pkuid,
- 'type'=>$type,
- );
-
- $issign=\App\checkSign($checkdata,$sign);
- if(!$issign){
- $rs['code']=1001;
- $rs['msg']=\PhalApi\T('签名错误');
- return $rs;
- }
- $domain = new Domain_Livepk();
- $info = $domain->changeLive($uid,$pkuid,$type);
- if($type == 0) {
- // 断开连麦 - 处理多人房间
- $this->handleLeaveRoom($uid, $pkuid);
- } else {
- // 建立连麦 - 处理多人房间
- $this->handleJoinRoom($uid, $pkuid);
- }
- // if($type==0){
- //
- // $key1='LivePK';
- // $key2='LivePK_gift';
- // $key3='LivePK_timer';
- // $key4='LiveConnect';
- // $key5='LiveConnect_pull';
- //
- // \Phalapi\DI()->redis -> hDel($key1,$uid);
- // \Phalapi\DI()->redis -> hDel($key1,$pkuid);
- //
- // \Phalapi\DI()->redis -> hDel($key2,$uid);
- // \Phalapi\DI()->redis -> hDel($key2,$pkuid);
- //
- // \Phalapi\DI()->redis -> hDel($key3,$uid);
- // \Phalapi\DI()->redis -> hDel($key3,$pkuid);
- //
- // \Phalapi\DI()->redis -> hDel($key4,$uid);
- // \Phalapi\DI()->redis -> hDel($key4,$pkuid);
- //
- // \Phalapi\DI()->redis -> hDel($key5,$uid);
- // \Phalapi\DI()->redis -> hDel($key5,$pkuid);
- //
- // }else{
- // $key4='LiveConnect';
- // \Phalapi\DI()->redis -> hSet($key4,$uid,$pkuid);
- // \Phalapi\DI()->redis -> hSet($key4,$pkuid,$uid);
- //
- // }
- return $rs;
- }
- /**
- * 处理加入房间逻辑
- */
- private function handleJoinRoom($uid, $pkuid) {
- // 检查pkuid是否已在房间中
- $pkuid_room = \PhalApi\DI()->redis->hGet('LiveRoomMaster', $pkuid);
- if($pkuid_room) {
- // pkuid已在房间中,uid加入该房间
- $room_id = $pkuid_room;
- $room_members = \PhalApi\DI()->redis->hGet('LiveRoom', $room_id);
- $members_array = explode(',', $room_members);
- if(!in_array($uid, $members_array)) {
- $members_array[] = $uid;
- $new_members = implode(',', $members_array);
- \PhalApi\DI()->redis->hSet('LiveRoom', $room_id, $new_members);
- \PhalApi\DI()->redis->hSet('LiveRoomMaster', $uid, $room_id);
- }
- } else {
- // 检查uid是否已在房间中
- $uid_room = \PhalApi\DI()->redis->hGet('LiveRoomMaster', $uid);
- if($uid_room) {
- // uid已在房间中,pkuid加入该房间
- $room_id = $uid_room;
- $room_members = \PhalApi\DI()->redis->hGet('LiveRoom', $room_id);
- $members_array = explode(',', $room_members);
- if(!in_array($pkuid, $members_array)) {
- $members_array[] = $pkuid;
- $new_members = implode(',', $members_array);
- \PhalApi\DI()->redis->hSet('LiveRoom', $room_id, $new_members);
- \PhalApi\DI()->redis->hSet('LiveRoomMaster', $pkuid, $room_id);
- }
- } else {
- // 都不在房间中,创建新房间
- $room_id = $uid . '_' . time();
- $members = $uid . ',' . $pkuid;
- \PhalApi\DI()->redis->hSet('LiveRoom', $room_id, $members);
- \PhalApi\DI()->redis->hSet('LiveRoomMaster', $uid, $room_id);
- \PhalApi\DI()->redis->hSet('LiveRoomMaster', $pkuid, $room_id);
- }
- }
- // 保持现有的LiveConnect逻辑
- \PhalApi\DI()->redis->hSet('LiveConnect', $uid, $pkuid);
- \PhalApi\DI()->redis->hSet('LiveConnect', $pkuid, $uid);
- }
- /**
- * 处理离开房间逻辑
- */
- private function handleLeaveRoom($uid, $pkuid) {
- $room_id = \PhalApi\DI()->redis->hGet('LiveRoomMaster', $uid);
- if($room_id) {
- $room_members = \PhalApi\DI()->redis->hGet('LiveRoom', $room_id);
- $members_array = explode(',', $room_members);
- // 移除离开的用户
- $members_array = array_filter($members_array, function($member) use ($uid) {
- return $member != $uid;
- });
- if(count($members_array) < 2) {
- // 房间人数少于2人,解散房间
- $this->dissolveRoom($room_id, $members_array);
- } else {
- // 更新房间成员
- $new_members = implode(',', $members_array);
- \PhalApi\DI()->redis->hSet('LiveRoom', $room_id, $new_members);
- \PhalApi\DI()->redis->hDel('LiveRoomMaster', $uid);
- }
- }
- // 清除现有的连麦相关Redis键
- $this->clearConnectKeys($uid, $pkuid);
- }
- /**
- * 解散房间
- */
- private function dissolveRoom($room_id, $remaining_members) {
- // 清除房间相关Redis键
- \PhalApi\DI()->redis->hDel('LiveRoom', $room_id);
- foreach($remaining_members as $member) {
- \PhalApi\DI()->redis->hDel('LiveRoomMaster', $member);
- // 清除该成员的所有连麦关系
- $all_connects = \PhalApi\DI()->redis->hGetAll('LiveConnect');
- foreach($all_connects as $connect_uid => $connect_pkuid) {
- if($connect_uid == $member || $connect_pkuid == $member) {
- \PhalApi\DI()->redis->hDel('LiveConnect', $connect_uid);
- \PhalApi\DI()->redis->hDel('LiveConnect_pull', $connect_uid);
- }
- }
- }
- }
- /**
- * 清除连麦相关键
- */
- private function clearConnectKeys($uid, $pkuid) {
- $keys = ['LivePK', 'LivePK_gift', 'LivePK_timer', 'LiveConnect', 'LiveConnect_pull'];
- foreach($keys as $key) {
- \PhalApi\DI()->redis->hDel($key, $uid);
- \PhalApi\DI()->redis->hDel($key, $pkuid);
- }
- }
- /**
- * PK开始
- * @desc 用于PK开始处理业务
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string msg 提示信息
- */
- public function setPK() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $uid = \App\checkNull($this->uid);
- $pkuid=\App\checkNull($this->pkuid);
- $sign=\App\checkNull($this->sign);
-
- $checkdata=array(
- 'uid'=>$uid,
- 'pkuid'=>$pkuid,
- );
-
- $issign=\App\checkSign($checkdata,$sign);
- if(!$issign){
- $rs['code']=1001;
- $rs['msg']=\PhalApi\T('签名错误');
- return $rs;
- }
-
- $key1='LivePK';
- $key2='LivePK_gift';
-
- \Phalapi\DI()->redis -> hSet($key1,$uid,$pkuid);
- \Phalapi\DI()->redis -> hSet($key1,$pkuid,$uid);
-
- \Phalapi\DI()->redis -> hSet($key2,$uid,0);
- \Phalapi\DI()->redis -> hSet($key2,$pkuid,0);
- $nowtime=time();
- $key3='LivePK_timer';
-
- \Phalapi\DI()->redis -> hSet($key3,$uid,$nowtime);
-
- $rs['info'][0]['addtime']=$nowtime;
- return $rs;
- }
- /**
- * PK结束
- * @desc 用于PK结束处理业务
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string msg 提示信息
- */
- public function endPK() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
-
-
- $uid = \App\checkNull($this->uid);
- $addtime=\App\checkNull($this->addtime);
-
- //file_put_contents('./endPK.txt',date('Y-m-d H:i:s').' 提交参数信息 endPK:'."\r\n",FILE_APPEND);
- //file_put_contents('./endPK.txt',date('Y-m-d H:i:s').' 提交参数信息 uid:'.json_encode($uid)."\r\n",FILE_APPEND);
- //file_put_contents('./endPK.txt',date('Y-m-d H:i:s').' 提交参数信息 addtime:'.json_encode($addtime)."\r\n",FILE_APPEND);
- $type=\App\checkNull($this->type);
- $sign=\App\checkNull($this->sign);
-
- $checkdata=array(
- 'uid'=>$uid,
- 'addtime'=>$addtime,
- 'type'=>$type,
- );
-
- $issign=\App\checkSign($checkdata,$sign);
- if(!$issign){
- $rs['code']=1001;
- $rs['msg']=\PhalApi\T('签名错误');
- return $rs;
- }
-
- $key1='LivePK';
- $key2='LivePK_gift';
- $key3='LivePK_timer';
-
- $pkuid = \Phalapi\DI()->redis -> hGet($key1,$uid);
- if(!$pkuid){
- $pkuid=0;
- }
-
- if($type==0){
- $pktime=\Phalapi\DI()->redis -> hGet($key3,$uid);
- //file_put_contents('./endPK.txt',date('Y-m-d H:i:s').' 提交参数信息 pktime:'.json_encode($pktime)."\r\n",FILE_APPEND);
- if(!$pktime){
- $pktime=\Phalapi\DI()->redis -> hGet($key3,$pkuid);
- }
- //file_put_contents('./endPK.txt',date('Y-m-d H:i:s').' 提交参数信息 pktime:'.json_encode($pktime)."\r\n",FILE_APPEND);
- if($pktime!=$addtime){
- $rs['code']=1002;
- $rs['msg']=\PhalApi\T('时间不匹配');
- return $rs;
- }
- }
-
-
- $gift_uid=\Phalapi\DI()->redis -> hGet($key2,$uid);
- if(!$gift_uid){
- $gift_uid=0;
- }
- $gift_pkuid=\Phalapi\DI()->redis -> hGet($key2,$pkuid);
- if(!$gift_pkuid){
- $gift_pkuid=0;
- }
-
-
- $win_uid=0;
- if($type==1){
- $win_uid=$pkuid;
- }else if($gift_uid > $gift_pkuid){
- $win_uid=$uid;
- }else if($gift_uid < $gift_pkuid){
- $win_uid=$pkuid;
- }
-
-
-
- \Phalapi\DI()->redis -> hDel($key1,$uid);
- \Phalapi\DI()->redis -> hDel($key1,$pkuid);
-
- \Phalapi\DI()->redis -> hDel($key2,$uid);
- \Phalapi\DI()->redis -> hDel($key2,$pkuid);
-
- \Phalapi\DI()->redis -> hDel($key3,$uid);
- \Phalapi\DI()->redis -> hDel($key3,$pkuid);
-
- $info=[
- 'win_uid'=>$win_uid,
- 'pkuid'=>$pkuid,
- ];
- $rs['info'][0]=$info;
-
- return $rs;
- }
- /**
- * 三人PK开始
- * @desc 用于三人PK开始处理业务
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string msg 提示信息
- */
- public function setThreePK() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $uid = \App\checkNull($this->uid);
- $pkuid2 = \App\checkNull($this->pkuid2);
- $pkuid3 = \App\checkNull($this->pkuid3);
- $sign = \App\checkNull($this->sign);
-
- $checkdata = array(
- 'uid' => $uid,
- 'pkuid2' => $pkuid2,
- 'pkuid3' => $pkuid3,
- );
-
- $issign = \App\checkSign($checkdata, $sign);
- if(!$issign){
- $rs['code'] = 1001;
- $rs['msg'] = \PhalApi\T('签名错误');
- return $rs;
- }
-
- // 检查三人是否都在连麦房间中
- $room_id = \PhalApi\DI()->redis->hGet('LiveRoomMaster', $uid);
- if(!$room_id) {
- $rs['code'] = 1002;
- $rs['msg'] = \PhalApi\T('未在连麦房间中');
- return $rs;
- }
-
- $room_members = \PhalApi\DI()->redis->hGet('LiveRoom', $room_id);
- $members_array = explode(',', $room_members);
-
- if(count($members_array) < 3 || !in_array($pkuid2, $members_array) || !in_array($pkuid3, $members_array)) {
- $rs['code'] = 1003;
- $rs['msg'] = \PhalApi\T('房间成员不足三人或成员不匹配');
- return $rs;
- }
-
- $key1 = 'LivePK_Three';
- $key2 = 'LivePK_Three_gift';
- $nowtime = time();
-
- // 设置三人PK状态
- $pk_data = json_encode(array(
- 'uid1' => $uid,
- 'uid2' => $pkuid2,
- 'uid3' => $pkuid3,
- 'room_id' => $room_id
- ));
-
- \PhalApi\DI()->redis->hSet($key1, $room_id, $pk_data);
-
- // 初始化礼物统计
- \PhalApi\DI()->redis->hSet($key2, $uid, 0);
- \PhalApi\DI()->redis->hSet($key2, $pkuid2, 0);
- \PhalApi\DI()->redis->hSet($key2, $pkuid3, 0);
- $key3 = 'LivePK_Three_timer';
- \PhalApi\DI()->redis->hSet($key3, $room_id, $nowtime);
-
- $rs['info'][0]['addtime'] = $nowtime;
- $rs['info'][0]['room_id'] = $room_id;
- return $rs;
- }
- /**
- * 三人PK结束
- * @desc 用于三人PK结束处理业务
- * @return int code 操作码,0表示成功
- * @return array info
- * @return string msg 提示信息
- */
- public function endThreePK() {
- $rs = array('code' => 0, 'msg' => '', 'info' => array());
-
- $uid = \App\checkNull($this->uid);
- $addtime = \App\checkNull($this->addtime);
- $type = \App\checkNull($this->type);
- $sign = \App\checkNull($this->sign);
-
- $checkdata = array(
- 'uid' => $uid,
- 'addtime' => $addtime,
- 'type' => $type,
- );
-
- $issign = \App\checkSign($checkdata, $sign);
- if(!$issign){
- $rs['code'] = 1001;
- $rs['msg'] = \PhalApi\T('签名错误');
- return $rs;
- }
-
- $room_id = \PhalApi\DI()->redis->hGet('LiveRoomMaster', $uid);
- if(!$room_id) {
- $rs['code'] = 1002;
- $rs['msg'] = \PhalApi\T('未找到房间信息');
- return $rs;
- }
-
- $key1 = 'LivePK_Three';
- $key2 = 'LivePK_Three_gift';
- $key3 = 'LivePK_Three_timer';
-
- $pk_data_str = \PhalApi\DI()->redis->hGet($key1, $room_id);
- if(!$pk_data_str) {
- $rs['code'] = 1003;
- $rs['msg'] = \PhalApi\T('PK信息不存在');
- return $rs;
- }
-
- $pk_data = json_decode($pk_data_str, true);
-
- if($type == 0) {
- $pktime = \PhalApi\DI()->redis->hGet($key3, $room_id);
- if($pktime != $addtime) {
- $rs['code'] = 1004;
- $rs['msg'] = \PhalApi\T('时间不匹配');
- return $rs;
- }
- }
-
- // 获取三人礼物统计
- $gift_uid1 = \PhalApi\DI()->redis->hGet($key2, $pk_data['uid1']) ?: 0;
- $gift_uid2 = \PhalApi\DI()->redis->hGet($key2, $pk_data['uid2']) ?: 0;
- $gift_uid3 = \PhalApi\DI()->redis->hGet($key2, $pk_data['uid3']) ?: 0;
-
- // 计算获胜者
- $win_uid = 0;
- $max_gift = max($gift_uid1, $gift_uid2, $gift_uid3);
-
- if($type == 1) {
- // 手动结束,不计算胜负
- $win_uid = 0;
- } else {
- // 找出礼物最多的用户
- if($gift_uid1 == $max_gift && $gift_uid1 > 0) {
- $win_uid = $pk_data['uid1'];
- } elseif($gift_uid2 == $max_gift && $gift_uid2 > 0) {
- $win_uid = $pk_data['uid2'];
- } elseif($gift_uid3 == $max_gift && $gift_uid3 > 0) {
- $win_uid = $pk_data['uid3'];
- }
-
- // 如果有并列第一,则为平局
- $first_count = 0;
- if($gift_uid1 == $max_gift) $first_count++;
- if($gift_uid2 == $max_gift) $first_count++;
- if($gift_uid3 == $max_gift) $first_count++;
-
- if($first_count > 1) {
- $win_uid = 0; // 平局
- }
- }
-
- // 清除Redis数据
- \PhalApi\DI()->redis->hDel($key1, $room_id);
- \PhalApi\DI()->redis->hDel($key2, $pk_data['uid1']);
- \PhalApi\DI()->redis->hDel($key2, $pk_data['uid2']);
- \PhalApi\DI()->redis->hDel($key2, $pk_data['uid3']);
- \PhalApi\DI()->redis->hDel($key3, $room_id);
-
- $info = [
- 'win_uid' => $win_uid,
- 'uid1' => $pk_data['uid1'],
- 'uid2' => $pk_data['uid2'],
- 'uid3' => $pk_data['uid3'],
- 'gift1' => $gift_uid1,
- 'gift2' => $gift_uid2,
- 'gift3' => $gift_uid3,
- 'room_id' => $room_id
- ];
- $rs['info'][0] = $info;
-
- return $rs;
- }
- }
|