123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <?php
- namespace Cron\Controller;
- use Common\Controller\CronController;
- class PkController extends CronController {
- public function __construct(){
- parent::__construct();
- }
- public function index(){
- $key = 'pk_choose_friend';
- $userRedis = $this->popQueue($key);
- if($userRedis){
- $num = $userRedis['num'];
- $userId = $userRedis['user_id'];
- $recordSource = $userRedis['pk_type'];
- $pkUserInfo = M('User')->where(array('user_id'=>$userId,))->field('user_id,user_status')->find();
- if (!in_array($pkUserInfo['user_status'], array(0,4,5))){
- return FALSE;
- }
- }
- $uid = $this->getSocketOnline($userId,$recordSource);
-
- if ($uid==-1){
- return false;
- }
- if (!$uid){
- if ($num<10){
- $this->pushQueue($key,array('user_id'=>$userId,'num'=>$num+1, 'pk_type'=>$recordSource));
- }
- }else {
- if ($uid<=0){
- return false;
- }
- //添加匹配记录
- $recordId = M('PkRecord')->add(array('user_id'=>$userId,'ref_user_id'=>$uid,'record_source'=>$recordSource,'record_status'=>2,'peer_source'=>2,'operate_dt'=>time()));
- M('User')->where(array('user_id'=>array('IN',array($userId,$uid))))->save(array('user_status'=>2));
- //如果是好友获取昵称
- $userNick = array($userId=>'',$uid=>'');
- if ($userId>$uid){
- $friendInfo =M('Friend')->where(array('user_id'=>$uid,'ref_user_id'=>$userId))->field('user_id,ref_user_id,user_nickname,ref_user_nickname')->find();
- if ($friendInfo!=NULL){
- $userNick = array($userId=>$friendInfo['ref_user_nickname'],$uid=>$friendInfo['user_nickname']);
- }
- }else{
- $friendInfo =M('Friend')->where(array('user_id'=>$userId,'ref_user_id'=>$uid))->field('user_id,ref_user_id,user_nickname,ref_user_nickname')->find();
- if ($friendInfo!=NULL){
- $userNick = array($userId=>$friendInfo['ref_user_nickname'],$uid=>$friendInfo['user_nickname']);
- }
- }
- $join = ' u LEFT JOIN t_user_level ul ON u.user_level=ul.level_id';
- $field = 'user_id,user_name,user_level,user_sex,user_icon,ul.level_name,1 as user_nickname';
- $userInfoArr = M('User')->join($join)->where(array('user_id'=>array('IN',array($userId,$uid))))->field($field)->select();
- foreach ($userInfoArr as $userInfo){
- if ($userInfo['user_id']==$userId){
- $userInfo['user_nickname'] = $userNick[$userId];
- $returnData = array('record_id'=>$recordId,'user_id'=>$userId,'ref_user_id'=>$uid,'peer_info'=>$userInfo);
- $dataSoc = array('code'=>0,'type'=>16,'msg'=>'已匹配上,请准备开始对战!','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $uid);
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $returnData);
- }
- }else{
- $userInfo['user_nickname'] = $userNick[$uid];
- $returnData = array('record_id'=>$recordId,'user_id'=>$userId,'ref_user_id'=>$uid,'peer_info'=>$userInfo);
- $dataSoc = array('code'=>0,'type'=>16,'msg'=>'已匹配上,请准备开始对战!','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $userId);
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $returnData);
- }
- }
- }
- }
- }
-
- public function aa(){
- //$this->flushQueue();
- $res = $this->online();
- $userIdArr = array_keys($res);
- $info = M('User')->where(array('user_id'=>array('IN',implode(',', $userIdArr))))->field('user_id,user_status')->select();
- $this->ajaxReturn($info);
- }
-
- /* public function bb(){
- M('User')->where(array('user_id'=>array('GT',0)))->save(array('user_status'=>0));
- M('PkRecord')->where(array('record_id'=>array('GT',0)))->delete();
- }
-
- public function cc(){
- $msg = I('msg');
- $uid = I('uid');
- if (empty($uid)){
- $this->pushMsg($msg);
- }else{
- $this->pushMsg($msg,$uid);
- }
- } */
-
-
- //获取在线好友
- private function getSocketOnline($userId,$recordSource){
- $res = $this->online();
- if(empty($res)){
- return FALSE;
- }
- if (!isset($res[$userId])){
- return -1;
- }
- unset($res[$userId]);
- $userIdArr = array_keys($res);
- if (empty($userIdArr)){
- return FALSE;
- }
- $redis = $this->getRedis();
- if ($recordSource==2){
- $userInfo = M('User')->where(array('user_id'=>$userId))->field('user_level')->find();
- }
- foreach ($userIdArr as $uid){
- $uidLock = $this->get($uid);
- if ($uidLock){
- continue;
- }else{
- $redis->set($uid,1,3);
- }
- if ($recordSource==2){
- $peerInfo = M('User')->where(array('user_id'=>$uid,'user_level'=>$userInfo['user_level'],'user_status'=>array('IN','0,4,5')))->field('user_id')->find();
- }else{
- $peerInfo = M('User')->where(array('user_id'=>$uid,'user_status'=>array('IN','0,4,5')))->field('user_id')->find();
- }
- if ($peerInfo != NULL){
- M('User')->where(array('user_id'=>$peerInfo['user_id'],))->save(array('user_status'=>2));
- break;
- }
- }
- if ($peerInfo == NULL){
- return FALSE;
- }else{
- return $peerInfo['user_id'];
- }
- }
-
-
- //获取在线好友
- private function getSocketOnlineOld($userId){
- $res = $this->online();
- if(empty($res)){
- return FALSE;
- }
- if (!isset($res[$userId])){
- return -1;
- }
- unset($res[$userId]);
- $userIdArr = array_keys($res);
- if (empty($userIdArr)){
- return FALSE;
- }
- $chunkUserId = array_chunk($userIdArr,200);
- $userInfo = M('User')->where(array('user_id'=>$userId))->field('user_level')->find();
- foreach ($chunkUserId as $userIdRow){
- $peerInfo = M('User')->where(array('user_id'=>array('IN',implode(',', $userIdRow)),'user_level'=>$userInfo['user_level'],'user_status'=>array('IN','0,4,5')))->field('user_id')->find();
- if ($peerInfo != NULL){
- M('User')->where(array('user_id'=>$peerInfo['user_id'],))->save(array('user_status'=>2));
- break;
- }
- }
- if ($peerInfo == NULL){
- return FALSE;
- }else{
- return $peerInfo['user_id'];
- }
- }
- }
|