595 lines
24 KiB
PHP
Executable File
595 lines
24 KiB
PHP
Executable File
<?php
|
|
namespace app\im\controller;
|
|
use think\App;
|
|
use app\ApiRest;
|
|
use app\BaseController;
|
|
use app\im\model\ImUser;
|
|
use app\im\model\ImChat;
|
|
use app\im\model\ImMessage;
|
|
use think\Exception;
|
|
|
|
class MessageHandler
|
|
{
|
|
protected $connect_name = 'longbing_im_connect_';
|
|
protected $chat_name = 'longbing_chat_';
|
|
protected $uniacid_wss = 'wss';
|
|
|
|
|
|
// public function __construct ()
|
|
// {
|
|
//
|
|
// }
|
|
//登陆
|
|
public function login($server ,$client_id ,$data)
|
|
{
|
|
//获取参数
|
|
$value = [];
|
|
if(isset($data['data'])) $value = $data['data'];
|
|
if(empty($value)) return ;
|
|
$user_id = null;
|
|
$uniacid = '7777';
|
|
if(isset($value['user_id'])) $user_id = $value['user_id'];
|
|
if(isset($value['uniacid'])) $uniacid = $value['uniacid'];
|
|
if(empty($user_id) || empty($uniacid)) return ;
|
|
//获取用户信息
|
|
$user = $this->getUser($user_id ,$uniacid);
|
|
//判断用户是否存在
|
|
if(empty($user)) {
|
|
return $server->push($client_id ,json_encode(['action' => 'login' ,'status' => false ,'message'=> lang('login error') ,'data' =>[]]));
|
|
}
|
|
//设置用户连接数据
|
|
$user['client_id'] = $client_id;
|
|
$cache_user = $this->setCacheUser($user_id ,$user ,$uniacid);
|
|
//设置用户连接
|
|
$cache_connect = $this->setConnect($client_id ,['user_id' => $user_id ,'uniacid' => $uniacid]);
|
|
//判断缓存是否插入成功
|
|
if(empty($cache_user) || empty($cache_connect)) $server->push($client_id ,json_encode(lang('login error')));
|
|
//返回登陆成功
|
|
$server->push($client_id ,json_encode(['action' => 'login' ,'status' => true ,'message'=> 'login success.' ,'data' =>$user]));
|
|
}
|
|
|
|
//检查登录
|
|
public function checkLogin($client_id ,$data = [])
|
|
{
|
|
$result = false;
|
|
//获取连接信息
|
|
$connect = $this->getConnect($client_id);
|
|
//如果没有登录
|
|
if(empty($connect) || !isset($connect['user_id']) || !isset($connect['uniacid']))
|
|
{
|
|
$user_id = null;
|
|
$uniacid = '7777';
|
|
//判断用户id是否存在
|
|
if(!isset($data['user_id'])) return $result;
|
|
//获取用户id
|
|
$user_id = $data['user_id'];
|
|
|
|
//获取uniacid
|
|
if(isset($data['uniacid'])) $uniacid = $data['uniacid'];
|
|
//获取用户数据
|
|
$user = $this->getUser($user_id ,$uniacid);
|
|
//判断用书是否存在
|
|
|
|
if(empty($user)) return $result;
|
|
//设置用户连接数据
|
|
$user['client_id'] = $client_id;
|
|
$cache_user = $this->setCacheUser($user_id ,$user ,$uniacid);
|
|
//设置用户连接
|
|
$cache_connect = $this->setConnect($client_id ,['user_id' => $user_id ,'uniacid' => $uniacid]);
|
|
|
|
//判断缓存是否插入成功
|
|
if(!empty($cache_user) && !empty($cache_connect)) $result = true;
|
|
}else{
|
|
$result = true;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
//退出
|
|
public function logout($client_id)
|
|
{
|
|
$this->delConnect($client_id);
|
|
}
|
|
//发送消息
|
|
public function sendMessage($server ,$client_id ,$data)
|
|
{
|
|
//登录检查
|
|
if(!$this->checkLogin($client_id ,$data['data'])){
|
|
$server->push($client_id ,json_encode(['action' => 'login' ,'status' => false ,'message'=> 'login error ,please check login param.' ,'data' =>[]]));
|
|
return;
|
|
}
|
|
//获取用户是否登录
|
|
$connect = $this->getConnect($client_id);
|
|
$user = null;
|
|
if(empty($connect) || !isset($connect['user_id']) || !isset($connect['uniacid']))
|
|
{
|
|
return;
|
|
}else{
|
|
$user = $this->getUser($connect['user_id'] ,$connect['uniacid']);
|
|
}
|
|
|
|
//判断用户是否存在
|
|
if(empty($user)) return ;
|
|
//判断连接是否正确
|
|
if(!isset($user['client_id']) || !in_array($user['client_id'], [$client_id]))
|
|
{
|
|
$user['client_id'] = $client_id;
|
|
$this->setCacheUser($connect['user_id'], $user ,'ws');
|
|
}
|
|
//检查消息
|
|
$value['message_type'] = 'text';
|
|
$value['status'] = 1;
|
|
$value['user_id'] = $connect['user_id'];
|
|
$value['uniacid'] = $connect['uniacid'];
|
|
$value['create_time'] = time();
|
|
if(isset($data['data'])){
|
|
$data = $data['data'];
|
|
}else{
|
|
return;
|
|
}
|
|
//判断接受者是否存在
|
|
if(isset($data['target_id'])) {
|
|
$value['target_id'] = $data['target_id'];
|
|
}else{
|
|
return ;
|
|
}
|
|
//判断数据类型是否存在
|
|
if(isset($data['type'])) $value['message_type'] = $data['type'];
|
|
//判断状态是否存在
|
|
if(isset($data['status'])) $value['status'] = $data['status'];
|
|
//判断发送者是否存在
|
|
if(isset($data['user_id'])) $value['user_id'] = $data['user_id'];
|
|
//判断uniacid是否存在
|
|
if(isset($data['uniacid'])) $value['uniacid'] = $data['uniacid'];
|
|
if(isset($data['chat_id']))
|
|
{
|
|
$value['chat_id'] = $data['chat_id'];
|
|
}else{
|
|
// $data = $this->getChat($value['user_id'], $value['target_id'] ,$data['uniacid']);
|
|
$value['chat_id'] = $this->getChatId($value['user_id'], $value['target_id'] ,$data['uniacid'] ,true);
|
|
//$server->push($client_id , json_encode($value ,true));die;
|
|
}
|
|
//判断发送消息是否存在
|
|
if(isset($data['content'])) {
|
|
$value['content'] = $data['content'];
|
|
}else{
|
|
return ;
|
|
}
|
|
|
|
//检查数据(防止伪造数据的存在)
|
|
$target = $this->getUser($value['target_id'] ,$value['uniacid']);
|
|
//判断用户是否存在
|
|
if(empty($target)) return;
|
|
//存储数据
|
|
// $push_data = array(
|
|
// 'action' => 'addMessage',
|
|
// 'event' => 'asyncAddMessage',
|
|
// 'message' => $value
|
|
// );
|
|
// $i = 1000000;
|
|
// while($i>0)
|
|
// {
|
|
// publisher(json_encode($push_data ,true));
|
|
// $i = $i -1;
|
|
// }
|
|
// publisher(json_encode($push_data ,true));
|
|
$resultAddMsg = false ;
|
|
|
|
|
|
//随机模拟发送消息失败情况
|
|
/*mt_srand();
|
|
$demoError = mt_rand(0, 1);
|
|
|
|
if($demoError){
|
|
if(isset($value['chat_id']) && !empty($value['chat_id'])) $resultAddMsg = asyncAddMessage($value);
|
|
}*/
|
|
|
|
if(isset($value['chat_id']) && !empty($value['chat_id'])) $resultAddMsg = asyncAddMessage($value);
|
|
|
|
//By.jingshuixian 如果消息存储失败,直接返回
|
|
if(!$resultAddMsg){
|
|
$server->push($client_id ,json_encode(['action' => 'sendMessage' ,'status' => $resultAddMsg,'data' => $value] ,true));
|
|
return false ;
|
|
}
|
|
|
|
//判断用户是否登录
|
|
if(isset($target['client_id'])) {
|
|
$value['time'] = date('Y-m-d H:i:s', time());
|
|
try{
|
|
$server->push($target['client_id'] , json_encode(['action' => 'getNewMessage' ,'status' => $resultAddMsg , 'data' => $value] ,true));
|
|
}catch (Exception $e){
|
|
//echo "$server->push error" ;
|
|
}
|
|
|
|
//向消息接受者发送未读消息数量
|
|
//$this->getCustomerUnReadMessageCount($server ,$target['client_id'] ,['target_id' => $data['user_id']]);
|
|
$this->getCustomer($server ,$target['client_id'] ,['data' => ['user_id' => $value['target_id'] ,'target_id' => $value['user_id'] ,'uniacid' => $value['uniacid']]]);
|
|
$this->getCustomerUnReadMessageCount($server ,$target['client_id'] ,['data' => ['user_id' => $value['target_id'] ,'target_id' => $value['user_id'] ,'uniacid' => $value['uniacid']]]);
|
|
$this->getUnReadMessageCount($server ,$target['client_id'] ,['data' => ['user_id' => $value['target_id'] ,'target_id' => $value['user_id'] ,'uniacid' => $value['uniacid']]]);
|
|
}else{
|
|
//发送服务通知
|
|
// $push_data = array(
|
|
// 'action' => 'sendMessageWxServiceNotice',
|
|
// 'event' => 'longbingSendMessageWxServiceNotice',
|
|
// 'message' => $value
|
|
// );
|
|
// publisher(json_encode($push_data ,true));
|
|
longbingSendMessageWxServiceNotice($value);
|
|
|
|
}
|
|
$value['status'] = 1;
|
|
$value['creat_time'] = time();
|
|
$value['time'] = date('Y-m-d H:i:s', time());
|
|
$server->push($client_id ,json_encode(['action' => 'sendMessage' ,'status' => $resultAddMsg,'data' => $value] ,true));
|
|
//存储数据
|
|
// $push_data = array(
|
|
// 'action' => 'addMessage',
|
|
// 'event' => 'asyncAddMessage',
|
|
// 'message' => $value
|
|
// );
|
|
// publisher(json_encode($push_data ,true) ,1000);
|
|
//发送用户总的未读数据获取用户
|
|
|
|
}
|
|
//获取用户缓存
|
|
function getCacheUser($user_id ,$uniacid = '7777')
|
|
{
|
|
$key = 'longbing_ws_card_user_' . $user_id;
|
|
if(!hasCache($key ,$uniacid)) return null;
|
|
return getCache($key ,$uniacid);
|
|
}
|
|
|
|
//设置用户缓存数据
|
|
function setCacheUser($user_id ,$value ,$uniacid = '7777')
|
|
{
|
|
$key = 'longbing_ws_card_user_' . $user_id;
|
|
return setCache ( $key, $value, 3600, $uniacid);
|
|
}
|
|
|
|
//获取用户信息
|
|
function getUser($user_id ,$uniacid ='7777')
|
|
{
|
|
//判断缓存是否存在
|
|
$user = $this->getCacheUser($user_id ,$uniacid);
|
|
if(!empty($user)) return $user;
|
|
// //生成查询类
|
|
// $user_model = new ImUser();
|
|
// //获取数据
|
|
// $user = $user_model->getUser(['id' => $user_id ,'uniacid' => $uniacid]);
|
|
$user = longbingGetUser($user_id ,$uniacid);
|
|
if(empty($user)) return null;
|
|
$this->setCacheUser($user_id ,$user ,$uniacid);
|
|
return $user;
|
|
}
|
|
//获取当前连接状态
|
|
function getConnect($client_id ,$uniacid = 'ws')
|
|
{
|
|
$key = $this->connect_name . $client_id;
|
|
$connect = getCache($key ,$uniacid);
|
|
return $connect;
|
|
}
|
|
//设置连接状态
|
|
function setConnect($client_id ,$value , $uniacid = 'ws')
|
|
{
|
|
$key = $this->connect_name . $client_id;
|
|
return setCache ( $key, $value, 3600, $uniacid);
|
|
}
|
|
//注销连接
|
|
function delConnect($client_id ,$uniacid = 'ws')
|
|
{
|
|
$key = $this->connect_name . $client_id;
|
|
$connect = $this->getConnect($client_id ,$uniacid);
|
|
if(empty($connect) || !isset($connect['user_id']) || !isset($connect['uniacid'])) return false;
|
|
$user = $this->getUser($connect['user_id'] ,$connect['uniacid']);
|
|
if(isset($user['client_id'])){
|
|
unset($user['client_id']);
|
|
$this->setCacheUser($connect['user_id'],$user, $connect['uniacid']);
|
|
}
|
|
delCache($key ,$uniacid);
|
|
}
|
|
//获取所有chat
|
|
function getChats($user_id ,$uniacid = '7777' ,$is_update = false)
|
|
{
|
|
// $key = $this->chat_name . $user_id;
|
|
// $chats = [];
|
|
// //判断是否更新
|
|
// if($is_update)
|
|
// {
|
|
// $chat_model = new ImChat();
|
|
// $chats_data = $chat_model->listChatAll($user_id ,$uniacid);
|
|
// foreach($chats_data as $chat)
|
|
// {
|
|
// if(!isset($chat['chat_id']) || !isset($chat['user_id']) || !isset($chat['target_id'])) continue;
|
|
// $customer_id = $chat['user_id'];
|
|
// if(!in_array($chat['user_id'], [$user_id])) $customer_id = $chat['target_id'];
|
|
// $chats[$customer_id] = $chat['chat_id'];
|
|
// }
|
|
// if(!empty($chats)) $this->setChat($user_id ,$chats ,$uniacid);
|
|
// }else{
|
|
// if(hasCache($key ,$uniacid)){
|
|
// $chats = getCache($key ,$uniacid);
|
|
// }else{
|
|
// $chats = $this->getChats($user_id ,$uniacid ,true);
|
|
// }
|
|
// }
|
|
// return $chats;
|
|
$key = $this->chat_name . $user_id;
|
|
$chats = [];
|
|
if(hasCache($key ,$uniacid)){
|
|
$chats = getCache($key ,$uniacid);
|
|
}
|
|
return $chats;
|
|
}
|
|
//获取用户与客户的chat
|
|
function getChatId($user_id ,$customer_id ,$uniacid ,$is_create = false)
|
|
{
|
|
// //获取chats
|
|
// $chats = $this->getChats($user_id ,$uniacid);
|
|
// $chat_id = null;
|
|
// //判断数据是否存在
|
|
// if(!isset($chats[$customer_id])){
|
|
// $this->createChat(['user_id' => $user_id ,'target_id' => $customer_id ,'uniacid' => $uniacid ,'create_time' => time()]);
|
|
// $chat_id = $this->getChatId($user_id ,$customer_id ,$uniacid);
|
|
// }else{
|
|
// $chat_id = $this->getChats($user_id ,$uniacid)[$customer_id];
|
|
// }
|
|
// //返回数据
|
|
// return $chat_id;
|
|
//获取chats
|
|
$chats = $this->getChats($user_id ,$uniacid);
|
|
$chat_id = null;
|
|
//判断数据是否存在
|
|
if(!isset($chats[$customer_id])){
|
|
//从数据库中查询数据
|
|
$chat = $this->getChat($user_id, $customer_id ,$uniacid);
|
|
if(empty($chat))
|
|
{
|
|
if(!empty($is_create)){
|
|
$chat_id = $this->createChat(['user_id' => $user_id ,'target_id' => $customer_id ,'uniacid' => $uniacid ,'create_time' => time()]);
|
|
// $chat_id = $this->getChatId($user_id ,$customer_id ,$uniacid);
|
|
}
|
|
}else{
|
|
$chats[$customer_id] = $chat['chat_id'];
|
|
$this->setChat($user_id, $chats ,$uniacid);
|
|
}
|
|
|
|
}else{
|
|
$chat_id = $this->getChats($user_id ,$uniacid)[$customer_id];
|
|
}
|
|
//返回数据
|
|
return $chat_id;
|
|
}
|
|
|
|
//获取chat
|
|
function getChat($user_id ,$customer_id ,$uniacid = '7777')
|
|
{
|
|
$chat_model = new ImChat();
|
|
$chat = $chat_model->getChat($user_id ,$customer_id ,$uniacid);
|
|
return $chat;
|
|
}
|
|
|
|
//设置Chat
|
|
function setChat($user_id ,$value ,$uniacid ='7777')
|
|
{
|
|
$key = $this->chat_name . $user_id;
|
|
return setCache($key, $value, 60, $uniacid);
|
|
}
|
|
|
|
//创建Chat
|
|
function createChat($data)
|
|
{
|
|
$chat_model = new ImChat();
|
|
$result = $chat_model->createChat($data);
|
|
//$this->getChats($data['user_id'] ,$data['uniacid'] ,true);
|
|
return $result;
|
|
}
|
|
|
|
//获取客户列表
|
|
function listCustomer($data)
|
|
{
|
|
//获取参数列表
|
|
$param = $this->$data;
|
|
//获取用户列表
|
|
$user_id = $param['user_id'];
|
|
//判断用户是否存在
|
|
if(empty($user_id)) return $this->error('not login ,please login again.');
|
|
//生成分页信息
|
|
$page_config = array(
|
|
'page' => 1,
|
|
'page_count' => 10
|
|
);
|
|
//获取分页信息
|
|
if(isset($param['page']) && $param['page'] > 0) $page_config['page'] = $param['page'];
|
|
if(isset($param['page_count']) && $param['page_count'] > 0) $page_config['page_count'] = $param['page_count'];
|
|
//生成查询模型
|
|
$chat_model = new ImChat();
|
|
//生成消息查询模型
|
|
$message_model = new ImMessage();
|
|
//生成用户查询模型
|
|
// $user_model = new ImUser();
|
|
//生成查询
|
|
$page_config['total'] = $chat_model->listChatCount($user_id);
|
|
$chats = $chat_model->listChat($user_id ,$page_config);
|
|
if(!empty($chats))
|
|
{
|
|
foreach($chats as $key => $value)
|
|
{
|
|
$lastmessage = $message_model->lastMessage(['chat_id' => $value['id']]);
|
|
$value['lastmessage'] = $lastmessage;
|
|
$customer_id = null;
|
|
if(!in_array($value['user_id'], [$user_id])) $customer_id = $value['user_id'];
|
|
if(!in_array($value['target_id'], [$user_id])) $customer_id = $value['target_id'];
|
|
// $value['customer'] = $user_model->getUser(['id' => $customer_id]);
|
|
$value['customer'] = longbingGetUser($customer_id ,$value['uniacid']);
|
|
$chats[$key] = $value;
|
|
}
|
|
}
|
|
$page_config['total_page'] = (int)($page_config['total'] / $page_config['page_count']);
|
|
if(($page_config['total'] % $page_config['page_count']) > 0) $page_config['total_page'] = $page_config['total_page'] + 1;
|
|
$result = $page_config;
|
|
$result['chats'] = $chats;
|
|
return $this->success($result);
|
|
}
|
|
|
|
//获取未读消息总数
|
|
public function getUnReadMessageCount($server ,$client_id ,$data)
|
|
{
|
|
//登录检查
|
|
if(!$this->checkLogin($client_id ,$data['data'])){
|
|
$server->push($client_id ,json_encode(['action' => 'login' ,'status' => false ,'message'=> 'login error ,please check login param.' ,'data' =>[]]));
|
|
return;
|
|
}
|
|
//获取用户是否登录
|
|
$connect = $this->getConnect($client_id);
|
|
$user = null;
|
|
if(empty($connect) || !isset($connect['user_id']) || !isset($connect['uniacid']))
|
|
{
|
|
return;
|
|
}else{
|
|
$user = $this->getUser($connect['user_id'] ,$connect['uniacid']);
|
|
}
|
|
//判断用户是否存在
|
|
if(empty($user)) return ;
|
|
//判断连接是否正确
|
|
if(!isset($user['client_id']) || !in_array($user['client_id'], [$client_id]))
|
|
{
|
|
$user['client_id'] = $client_id;
|
|
$this->setCacheUser($connect['user_id'], $user ,'ws');
|
|
}
|
|
//获取未读消息总数
|
|
$message_model = new ImMessage();
|
|
// $server->push($client_id ,json_encode($user));
|
|
$count = $message_model->listMessageCount(['target_id' => $user['id'] ,'status' => 1]);
|
|
// $count = $message_model->listMessageCount(['status' => 1]);
|
|
$server->push($client_id ,json_encode(['action' => 'getUnReadMessageCount' ,'status' => true ,'message'=> '' ,'data' =>['count' => $count]]));
|
|
return;
|
|
}
|
|
//获取用户未读消息数
|
|
public function getCustomerUnReadMessageCount($server ,$client_id ,$data)
|
|
{
|
|
//登录检查
|
|
if(!$this->checkLogin($client_id ,$data['data'])){
|
|
$server->push($client_id ,json_encode(['action' => 'login' ,'status' => false ,'message'=> 'login error ,please check login param.' ,'data' =>[]]));
|
|
return;
|
|
}
|
|
if(!isset($data['data']['target_id'])) return;
|
|
$customer_id = $data['data']['target_id'];
|
|
//获取用户是否登录
|
|
$connect = $this->getConnect($client_id);
|
|
$user = null;
|
|
if(empty($connect) || !isset($connect['user_id']) || !isset($connect['uniacid']))
|
|
{
|
|
return;
|
|
}else{
|
|
$user = $this->getUser($connect['user_id'] ,$connect['uniacid']);
|
|
}
|
|
//判断用户是否存在
|
|
if(empty($user)) return ;
|
|
//判断连接是否正确
|
|
if(!isset($user['client_id']) || !in_array($user['client_id'], [$client_id]))
|
|
{
|
|
$user['client_id'] = $client_id;
|
|
$this->setCacheUser($connect['user_id'], $user ,'ws');
|
|
}
|
|
//获取未读消息总数
|
|
$message_model = new ImMessage();
|
|
$chat_id = $this->getChatId($user['id'] ,$customer_id ,$user['uniacid'] ,true);
|
|
if(empty($chat_id)) return;
|
|
$count = $message_model->listMessageCount(['user_id' => $customer_id,'target_id' => $user['id'] ,'status' => 1]);
|
|
// $count = $message_model->listMessageCount(['status' => 1]);
|
|
$server->push($client_id ,json_encode(['action' => 'getCustomerUnReadMessageCount' ,'status' => true ,'message'=> '' ,'data' =>['count' => $count ,'target_id' => $customer_id ,'user_id' => $user['id']]]));
|
|
return;
|
|
}
|
|
//获取客户信息
|
|
public function getCustomer($server ,$client_id ,$data)
|
|
{
|
|
//登录检查
|
|
if(!$this->checkLogin($client_id ,$data['data'])){
|
|
$server->push($client_id ,json_encode(['action' => 'login' ,'status' => false ,'message'=> 'login error ,please check login param.' ,'data' =>[]]));
|
|
return;
|
|
}
|
|
if(!isset($data['data'])) return;
|
|
if(!isset($data['data']['user_id'])) return;
|
|
if(!isset($data['data']['target_id'])) return;
|
|
if(!isset($data['data']['uniacid'])) return;
|
|
$user_id = $data['data']['user_id'];
|
|
$customer_id = $data['data']['target_id'];
|
|
$uniacid = $data['data']['uniacid'];
|
|
//生成关系操作类
|
|
$chat_model = new ImChat();
|
|
//获取chat_id
|
|
$chat_id = $this->getChatId($user_id ,$customer_id ,$uniacid ,true);
|
|
if(empty($chat_id)) return;
|
|
//获取数据
|
|
$chat = $chat_model->getChatById($chat_id);
|
|
if(empty($chat)) return;
|
|
//获取客户信息
|
|
$customer = $this->getUser($customer_id ,$uniacid);
|
|
$chat['customer'] = $customer;
|
|
$chat['time'] = date('Y-m-d H:i:s', time());
|
|
if(isset($chat['update'])) $chat['time'] = date('Y-m-d H:i:s', $chat['update']);
|
|
|
|
$message_model = new ImMessage();
|
|
//获取最后一条消息
|
|
$last_message = $message_model->lastMessage(['chat_id' => $chat_id]);
|
|
$chat['lastmessage'] = $last_message;
|
|
//获取未读客户数据数量
|
|
$not_rear_message_count = $message_model->listMessageCount(['chat_id' => $chat_id ,'user_id' => $customer_id ,'target_id' =>$user_id ,'status' => 1]);
|
|
$chat['not_read_message_count'] = $not_rear_message_count;
|
|
//返回数据
|
|
$server->push($client_id ,json_encode(['action' => 'getCustomer' ,'status' => true ,'data' => $chat ,'message' => ''] ,true));
|
|
}
|
|
|
|
//检查链接是否正常
|
|
public function checkWs($server ,$client_id ,$data)
|
|
{
|
|
if(!isset($data['data']['check']) || !in_array($data['data']['check'], ['78346+SJDHFA.longbing'])) return ;
|
|
// $server->push($client_id ,json_encode(['action' => 'checkWs' ,'status' => true ,'message'=> '' ,'data' =>['check' => '78346+SJDHFA.longbing']]));
|
|
$server->push($client_id ,json_encode(['action' => 'checkWs' ,'status' => true ,'message' => '' ,'data' => ['check' => '78346+SJDHFA.longbing']]));
|
|
}
|
|
//标记消息已读
|
|
public function readMessage($server ,$client_id ,$data)
|
|
{
|
|
//登录检查
|
|
if(!$this->checkLogin($client_id ,$data['data'])){
|
|
$server->push($client_id ,json_encode(['action' => 'login' ,'status' => false ,'message'=> 'login error ,please check login param.' ,'data' =>[]]));
|
|
return;
|
|
}
|
|
//获取用户是否登录
|
|
$connect = $this->getConnect($client_id);
|
|
$user = null;
|
|
if(empty($connect) || !isset($connect['user_id']) || !isset($connect['uniacid']))
|
|
{
|
|
return;
|
|
}else{
|
|
$user = $this->getUser($connect['user_id'] ,$connect['uniacid']);
|
|
}
|
|
//判断用户是否存在
|
|
if(empty($user)) return ;
|
|
//判断连接是否正确
|
|
if(!isset($user['client_id']) || !in_array($user['client_id'], [$client_id]))
|
|
{
|
|
$user['client_id'] = $client_id;
|
|
$this->setCacheUser($connect['user_id'], $user ,'ws');
|
|
}
|
|
|
|
|
|
if(!isset($data['data']['target_id'])) return ;
|
|
$target_id = $data['data']['target_id'];
|
|
if(isset($data['data']['uniacid'])) $uniacid = $data['data']['uniacid'];
|
|
if(isset($user['uniacid'])) $uniacid = $user['uniacid'];
|
|
$user_id = $user['id'];
|
|
$chat_id = $this->getChatId($user_id, $target_id ,$uniacid , true);
|
|
if(empty($chat_id)) return;
|
|
//设置已读数据
|
|
$message_model = new ImMessage();
|
|
$message_model->readMessage(['chat_id' => $chat_id ,'user_id' => $target_id ,'target_id' => $user_id ,'deleted' => 0]);
|
|
//发数据给自己
|
|
$this->getCustomer($server ,$client_id ,['data' => ['user_id' => $user_id ,'target_id' => $target_id,'uniacid' => $uniacid]]);
|
|
//
|
|
$this->getUnReadMessageCount($server ,$client_id ,['data' => ['user_id' => $user_id,'target_id' => $target_id ,'uniacid' => $uniacid]]);
|
|
|
|
}
|
|
|
|
}
|