|
@@ -3,10 +3,14 @@
|
|
namespace App\Console\Commands;
|
|
namespace App\Console\Commands;
|
|
|
|
|
|
use App\Models\ImChatModel;
|
|
use App\Models\ImChatModel;
|
|
|
|
+use App\Models\LiveChatModel;
|
|
|
|
+use App\Models\LiveModel;
|
|
|
|
+use App\Models\MessageModel;
|
|
use App\Services\Api\ImChatService;
|
|
use App\Services\Api\ImChatService;
|
|
use App\Services\Api\MemberService;
|
|
use App\Services\Api\MemberService;
|
|
use App\Services\Api\MessageService;
|
|
use App\Services\Api\MessageService;
|
|
use App\Services\ConfigService;
|
|
use App\Services\ConfigService;
|
|
|
|
+use App\Services\LiveService;
|
|
use App\Services\RedisService;
|
|
use App\Services\RedisService;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Console\Command;
|
|
use Monolog\Logger;
|
|
use Monolog\Logger;
|
|
@@ -66,7 +70,7 @@ class SocketServer extends Command
|
|
{
|
|
{
|
|
try {
|
|
try {
|
|
//创建websocket服务器对象,监听0.0.0.0:7104端口
|
|
//创建websocket服务器对象,监听0.0.0.0:7104端口
|
|
- $this->ws = new \Swoole\WebSocket\Server("0.0.0.0", env('SOCKET_PORT', '6620'));
|
|
|
|
|
|
+ $this->ws = new \Swoole\WebSocket\Server("0.0.0.0", env('SOCKET_PORT', '6630'));
|
|
|
|
|
|
//监听WebSocket连接打开事件
|
|
//监听WebSocket连接打开事件
|
|
$this->ws->on('open', [$this, 'open']);
|
|
$this->ws->on('open', [$this, 'open']);
|
|
@@ -120,15 +124,15 @@ class SocketServer extends Command
|
|
$data = $frame->data ? json_decode($frame->data, true) : [];
|
|
$data = $frame->data ? json_decode($frame->data, true) : [];
|
|
$fromUid = isset($data['from_user_id']) ? intval($data['from_user_id']) : 0;
|
|
$fromUid = isset($data['from_user_id']) ? intval($data['from_user_id']) : 0;
|
|
$op = isset($data['op']) ? $data['op'] : '';
|
|
$op = isset($data['op']) ? $data['op'] : '';
|
|
- //$this->sendMsg($frame->fd, $data);
|
|
|
|
|
|
+ $scene = isset($data['scene']) && $data['scene'] ? $data['scene'] : 'chat';
|
|
if (!in_array($op,['video_connect','video']) && !$this->checkSign($data)) {
|
|
if (!in_array($op,['video_connect','video']) && !$this->checkSign($data)) {
|
|
- $this->info("【{$date}】Socket:签名失败【{$frameId}-{$fromUid}】");
|
|
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:签名失败【{$frameId}-{$fromUid}】");
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
$uuid = isset($data['uuid']) ? $data['uuid'] : uniqid();
|
|
$uuid = isset($data['uuid']) ? $data['uuid'] : uniqid();
|
|
$toUid = isset($data['to_user_id']) ? intval($data['to_user_id']) : 0;
|
|
$toUid = isset($data['to_user_id']) ? intval($data['to_user_id']) : 0;
|
|
- $apiUrl = isset($data['api_url']) ? trim($data['api_url']) : '';
|
|
|
|
|
|
+ $apiUrl = env('APP_URL','');
|
|
$chatKey = isset($data['chat_key']) ? trim($data['chat_key']) : '';
|
|
$chatKey = isset($data['chat_key']) ? trim($data['chat_key']) : '';
|
|
$chatKey = $chatKey ? $chatKey : getChatKey($fromUid, $toUid);
|
|
$chatKey = $chatKey ? $chatKey : getChatKey($fromUid, $toUid);
|
|
try {
|
|
try {
|
|
@@ -138,214 +142,157 @@ class SocketServer extends Command
|
|
$fds = $fds? $fds : [];
|
|
$fds = $fds? $fds : [];
|
|
$fds[$op.'_'.$fromUid] = $frameId;
|
|
$fds[$op.'_'.$fromUid] = $frameId;
|
|
RedisService::set("chats:bindFds:{$chatKey}", $fds, 86400);
|
|
RedisService::set("chats:bindFds:{$chatKey}", $fds, 86400);
|
|
- RedisService::set("chats:bind:{$fromUid}", ['fd' => $frameId, 'user_id' => $fromUid, 'uuid' => $uuid, 'chat_key' => $chatKey], 86400);
|
|
|
|
|
|
+ RedisService::set("chats:bind:{$scene}_{$fromUid}", ['fd' => $frameId,'scene'=>$scene, 'user_id' => $fromUid, 'uuid' => $uuid, 'chat_key' => $chatKey], 86400);
|
|
}
|
|
}
|
|
|
|
|
|
switch ($op) {
|
|
switch ($op) {
|
|
- case 'chat': // 文字聊天
|
|
|
|
|
|
+ case 'chat': // 图文聊天
|
|
$msgType = isset($data['msg_type']) ? $data['msg_type'] : 1;
|
|
$msgType = isset($data['msg_type']) ? $data['msg_type'] : 1;
|
|
|
|
+ $chatType = isset($data['chat_type']) ? $data['chat_type'] : 1;
|
|
$message = isset($data['message']) ? trim($data['message']) : '';
|
|
$message = isset($data['message']) ? trim($data['message']) : '';
|
|
|
|
|
|
- // 验证是否还有次数和付费提示 (客服不限制)
|
|
|
|
- if (!$check = ImChatService::make()->checkChat($fromUid, $toUid, 1)) {
|
|
|
|
- $config = ConfigService::make()->getConfigByCode('chat_buy_num_money');
|
|
|
|
- $config = $config ? explode('/', $config) : [];
|
|
|
|
- $money = isset($config[0]) && $config[0] > 0 ? $config[0] : 10;
|
|
|
|
- $num = isset($config[1]) && $config[1] > 0 ? $config[1] : 10;
|
|
|
|
- $tips = "抱歉您的免费次数已经用完,请先余额支付【{$money}元】购买【{$num}次】聊天次数再使用聊天服务。";
|
|
|
|
- $this->info("【{$date}】Socket:次数不足【{$frameId}-{$fromUid}】。");
|
|
|
|
- $this->sendMsg($frameId, ['success' => true, 'op' => 'buy', 'data' => ['type' => 1, 'tips' => $tips], 'message' => '次数不足,需要付费']);
|
|
|
|
|
|
+ // 发送参数验证
|
|
|
|
+ if ($toUid <= 0 || $fromUid <= 0 || empty($message)) {
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:参数错误,from@{$fromUid}-to@{$toUid}。");
|
|
|
|
+ $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '参数错误']);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
- // 发送参数验证
|
|
|
|
- $message = MessageService::make()->filterMessage($message, 1);
|
|
|
|
- if ($toUid <= 0 || $fromUid <= 0 || empty($message)) {
|
|
|
|
- $this->info("【{$date}】Socket:参数错误,from@{$fromUid}-to@{$toUid}。");
|
|
|
|
- $this->sendMsg($frameId, ['success' => false, 'message' => '参数错误']);
|
|
|
|
|
|
+ // 用户私聊
|
|
|
|
+ $fromUserName = $fromAvatar = '';
|
|
|
|
+ $toUserName = $toAvatar = '';
|
|
|
|
+ $fromInfo = MemberService::make()->getCacheInfo(['id'=> $fromUid,'status'=>1]);
|
|
|
|
+ if(empty($fromInfo)){
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:发送用户不存在,from@{$fromUid}-to@{$toUid}。");
|
|
|
|
+ $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '您的账号不可用或已冻结,请联系客服']);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
- $data = [
|
|
|
|
- 'from_user_id' => $fromUid,
|
|
|
|
- 'to_user_id' => $toUid,
|
|
|
|
|
|
+ $toInfo = MemberService::make()->getCacheInfo(['id'=> $toUid,'status'=>1]);
|
|
|
|
+ if(empty($toInfo)){
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:接收用户不存在,from@{$fromUid}-to@{$toUid}。");
|
|
|
|
+ $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '对方账号不可用或无法接收消息']);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if($chatType == 1){
|
|
|
|
+ $fromUserName = isset($fromInfo['nickname'])? $fromInfo['nickname'] : $fromUid;
|
|
|
|
+ $fromAvatar = isset($fromInfo['avatar'])? $fromInfo['avatar'] : '';
|
|
|
|
+ $toUserName = isset($toInfo['nickname'])? $toInfo['nickname'] : $toUid;
|
|
|
|
+ $toAvatar = isset($toInfo['avatar'])? $toInfo['avatar'] : '';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $msgData = [
|
|
|
|
+ 'from_uid' => $fromUid,
|
|
|
|
+ 'to_uid' => $toUid,
|
|
|
|
+ 'type' => 9,
|
|
'msg_type' => $msgType,
|
|
'msg_type' => $msgType,
|
|
|
|
+ 'chat_type' => $chatType,
|
|
|
|
+ 'form_user_name' => $fromUserName,
|
|
|
|
+ 'to_user_name' => $toUserName,
|
|
|
|
+ 'form_user_avatar' => $fromAvatar,
|
|
|
|
+ 'to_user_avatar' => $toAvatar,
|
|
'description' => $msgType == 1 ? mb_substr($message, 0, 20) : '',
|
|
'description' => $msgType == 1 ? mb_substr($message, 0, 20) : '',
|
|
- 'message' => $msgType != 1 && $message ? get_image_path($message) : $message,
|
|
|
|
|
|
+ 'content' => $msgType == 2 && $message ? get_image_path($message) : $message,
|
|
|
|
+ 'goods_id' => isset($data['goods_id'])? intval($data['goods_id']) : 0,
|
|
|
|
+ 'live_id' => isset($data['live_id'])? intval($data['live_id']) : 0,
|
|
'chat_key' => $chatKey,
|
|
'chat_key' => $chatKey,
|
|
'create_time' => time(),
|
|
'create_time' => time(),
|
|
'update_time' => time(),
|
|
'update_time' => time(),
|
|
'is_read' => 2,
|
|
'is_read' => 2,
|
|
- 'from_is_show' => 1,
|
|
|
|
- 'to_is_show' => 1,
|
|
|
|
'status' => 1
|
|
'status' => 1
|
|
];
|
|
];
|
|
- if (!$id = ImChatModel::insertGetId($data)) {
|
|
|
|
- $data = ['success' => false, 'message' => '消息发送失败'];
|
|
|
|
|
|
+ if (!$id = MessageModel::insertGetId($msgData)) {
|
|
|
|
+ $data = ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$msgData, 'message' => '消息发送失败'];
|
|
$this->sendMsg($frameId, $data);
|
|
$this->sendMsg($frameId, $data);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
// 推送消息给对方
|
|
// 推送消息给对方
|
|
- $toInfo = MemberService::make()->getChatInfo($toUid, '', $apiUrl);
|
|
|
|
- $fromInfo = MemberService::make()->getChatInfo($fromUid, '', $apiUrl);
|
|
|
|
- $data['from_nickname'] = isset($fromInfo['nickname']) ? $fromInfo['nickname'] : '';
|
|
|
|
- $data['from_avatar'] = isset($fromInfo['avatar']) ? $fromInfo['avatar'] : '';
|
|
|
|
- $data['to_nickname'] = isset($toInfo['nickname']) ? $toInfo['nickname'] : '';
|
|
|
|
- $data['to_avatar'] = isset($toInfo['avatar']) ? $toInfo['avatar'] : '';
|
|
|
|
- $data['time_text'] = dateFormat($data['create_time']);
|
|
|
|
-
|
|
|
|
- $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '发送成功:' . $frameId]);
|
|
|
|
- $toBindData = RedisService::get("chats:bind:{$toUid}");
|
|
|
|
|
|
+ $msgData['from_user_avatar'] = get_image_url($msgData['from_user_avatar'], $apiUrl);
|
|
|
|
+ $msgData['to_user_avatar'] = get_image_url($msgData['to_user_avatar'], $apiUrl);
|
|
|
|
+ $msgData['content'] = $msgType == 2? get_image_url($msgData['content'], $apiUrl) : $msgData['content'];
|
|
|
|
+ $msgData['time_text'] = dateFormat($msgData['create_time']);
|
|
|
|
+ $msgData['goods'] = [];
|
|
|
|
+ $msgData['live_info'] = [];
|
|
|
|
+
|
|
|
|
+ // 直播间信息
|
|
|
|
+ if($msgData['live_id']){
|
|
|
|
+ $info = LiveModel::with(['member'])->where(['id'=> $msgData['live_id'],'mark'=>1])
|
|
|
|
+ ->select(['id','user_id','play_url','description','status'])
|
|
|
|
+ ->first();
|
|
|
|
+ $info = $info? $info->toArray() : [];
|
|
|
|
+ if($info){
|
|
|
|
+ $member = isset($info['member'])? $info['member'] : [];
|
|
|
|
+ $member['avatar'] = isset($member['avatar']) && $member['avatar']? get_image_url($member['avatar'], $apiUrl) : get_image_url('/images/member/logo.png',$apiUrl);
|
|
|
|
+ $info['member'] = $member;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $msgData['live_info'] = $info;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'scene'=> $scene, 'data' => $data, 'message' => '发送成功:' . $frameId]);
|
|
|
|
+ $toBindData = RedisService::get("chats:bind:{$scene}_{$toUid}");
|
|
$toFd = isset($toBindData['fd']) ? $toBindData['fd'] : 0;
|
|
$toFd = isset($toBindData['fd']) ? $toBindData['fd'] : 0;
|
|
if ($toBindData && $toFd) {
|
|
if ($toBindData && $toFd) {
|
|
- $this->sendMsg($toFd, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '推送消息成功:' . $toFd]);
|
|
|
|
|
|
+ $this->sendMsg($toFd, ['success' => true, 'op' => 'push' ,'scene'=> $scene, 'data' => $msgData, 'message' => '推送消息成功:' . $toFd]);
|
|
$this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】推送消息给【{$toFd}-{$toUid}。");
|
|
$this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】推送消息给【{$toFd}-{$toUid}。");
|
|
}
|
|
}
|
|
|
|
|
|
- // 更新消费的次数
|
|
|
|
- ImChatService::make()->updateChatParams($fromUid, $toUid, 1, 1);
|
|
|
|
-
|
|
|
|
break;
|
|
break;
|
|
- case 'video_connect': // 视频通话连接
|
|
|
|
|
|
+ case 'live': // 直播聊天
|
|
// 推送消息给对方
|
|
// 推送消息给对方
|
|
- $toInfo = MemberService::make()->getChatInfo($toUid, '', $apiUrl);
|
|
|
|
- $fromInfo = MemberService::make()->getChatInfo($fromUid, '', $apiUrl);
|
|
|
|
- $data['from_nickname'] = isset($fromInfo['nickname']) ? $fromInfo['nickname'] : '';
|
|
|
|
- $data['from_avatar'] = isset($fromInfo['avatar']) ? $fromInfo['avatar'] : '';
|
|
|
|
- $data['to_nickname'] = isset($toInfo['nickname']) ? $toInfo['nickname'] : '';
|
|
|
|
- $data['to_avatar'] = isset($toInfo['avatar']) ? $toInfo['avatar'] : '';
|
|
|
|
- $data['time_text'] = dateFormat(time());
|
|
|
|
-
|
|
|
|
- // 推送消息
|
|
|
|
- $fds = RedisService::get("chats:bindFds:{$chatKey}");
|
|
|
|
- $toFds = RedisService::get("chats:bindFds:0_{$toUid}");
|
|
|
|
- $toFds = $toFds? array_values($toFds) : [];
|
|
|
|
- $fds = $fds? array_values($fds) : [];
|
|
|
|
- $fds = $toFds? array_merge($toFds, $fds) : $fds;
|
|
|
|
- $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '发送成功:' . $frameId]);
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},消息群推给,".json_encode($fds));
|
|
|
|
- if ($fds) {
|
|
|
|
- $fds = array_unique($fds);
|
|
|
|
- foreach($fds as $toFd){
|
|
|
|
- if($toFd != $frameId){
|
|
|
|
- $this->sendMsg($toFd, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '推送视频通话消息成功:' . $toFd.'-'.$frameId]);
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$toFd}】@{$data['message']},推送视频消息,来源【{$frameId}】");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},群推结束");
|
|
|
|
- }
|
|
|
|
|
|
+ $msgType = isset($data['msg_type']) ? $data['msg_type'] : 1;
|
|
|
|
+ $liveId = isset($data['live_id']) ? $data['live_id'] : 0;
|
|
|
|
+ $message = isset($data['message']) ? trim($data['message']) : '';
|
|
|
|
|
|
- break;
|
|
|
|
- case 'video': // 视频/语音聊天结束
|
|
|
|
// 发送参数验证
|
|
// 发送参数验证
|
|
- $type = isset($data['type']) ? intval($data['type']) : 1;
|
|
|
|
- $status = isset($data['status']) ? intval($data['status']) : 2;
|
|
|
|
- $videoTime = isset($data['video_time']) ? intval($data['video_time']) : 0;
|
|
|
|
- $message = isset($data['message']) && $data['message'] ? trim($data['message']) : '通话结束';
|
|
|
|
- if ($toUid <= 0 || $fromUid <= 0 || empty($message) || $status <= 0) {
|
|
|
|
- $this->sendMsg($frameId, ['success' => false, 'message' => '参数错误']);
|
|
|
|
|
|
+ if ($toUid <= 0 || $fromUid <= 0 || $liveId<=0 || empty($message)) {
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:参数错误,from@{$fromUid}-to@{$toUid}。");
|
|
|
|
+ $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '参数错误']);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
- $data = [
|
|
|
|
|
|
+
|
|
|
|
+ $msgData = [
|
|
'from_user_id' => $fromUid,
|
|
'from_user_id' => $fromUid,
|
|
'to_user_id' => $toUid,
|
|
'to_user_id' => $toUid,
|
|
- 'msg_type' => 5,
|
|
|
|
- 'description' => $message,
|
|
|
|
|
|
+ 'msg_type' => $msgType,
|
|
|
|
+ 'live_id' => $liveId,
|
|
'message' => $message,
|
|
'message' => $message,
|
|
'chat_key' => $chatKey,
|
|
'chat_key' => $chatKey,
|
|
'create_time' => time(),
|
|
'create_time' => time(),
|
|
'update_time' => time(),
|
|
'update_time' => time(),
|
|
- 'is_read' => 2,
|
|
|
|
- 'from_is_show' => 1,
|
|
|
|
- 'to_is_show' => 1,
|
|
|
|
- 'is_connect' => $status, // 1-接通,2-拒绝,3-取消
|
|
|
|
- 'video_time' => $videoTime, // 通话时长
|
|
|
|
'status' => 1
|
|
'status' => 1
|
|
];
|
|
];
|
|
- if($type == 2){
|
|
|
|
- $data['from_user_id'] = $toUid;
|
|
|
|
- $data['to_user_id'] = $fromUid;
|
|
|
|
- }
|
|
|
|
- if (!$id = ImChatModel::insertGetId($data)) {
|
|
|
|
- $data = ['success' => false, 'message' => '视频消息发送失败'];
|
|
|
|
|
|
+ if (!$id = LiveChatModel::insertGetId($msgData)) {
|
|
|
|
+ $data = ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$msgData, 'message' => '消息发送失败'];
|
|
$this->sendMsg($frameId, $data);
|
|
$this->sendMsg($frameId, $data);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
// 推送消息给对方
|
|
// 推送消息给对方
|
|
- $toInfo = MemberService::make()->getChatInfo($data['to_user_id'], '', $apiUrl);
|
|
|
|
- $fromInfo = MemberService::make()->getChatInfo($data['from_user_id'], '', $apiUrl);
|
|
|
|
- $data['from_nickname'] = isset($fromInfo['nickname']) ? $fromInfo['nickname'] : '';
|
|
|
|
- $data['from_avatar'] = isset($fromInfo['avatar']) ? $fromInfo['avatar'] : '';
|
|
|
|
- $data['to_nickname'] = isset($toInfo['nickname']) ? $toInfo['nickname'] : '';
|
|
|
|
- $data['to_avatar'] = isset($toInfo['avatar']) ? $toInfo['avatar'] : '';
|
|
|
|
- $data['time_text'] = dateFormat($data['create_time']);
|
|
|
|
-
|
|
|
|
- $str = [];
|
|
|
|
- if($videoTime>3600){
|
|
|
|
- $hour = intval($videoTime/3600);
|
|
|
|
- $str[] = $hour<10?'0'.$hour:$hour;
|
|
|
|
- }
|
|
|
|
- if($videoTime%3600 > 0){
|
|
|
|
- $minute = intval($videoTime%3600/60);
|
|
|
|
- $str[] = $minute<10?'0'.$minute:$minute;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if($videoTime%60 > 0){
|
|
|
|
- $second = intval($videoTime%60);
|
|
|
|
- $str[] = $second<10?'0'.$second:$second;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $data['video_time_text'] = $str? implode(':', $str) : '';
|
|
|
|
-
|
|
|
|
- // 推送消息
|
|
|
|
- $fds = RedisService::get("chats:bindFds:{$chatKey}");
|
|
|
|
- $fromFds = RedisService::get("chats:bindFds:0_{$fromUid}");
|
|
|
|
- $toFds = RedisService::get("chats:bindFds:0_{$toUid}");
|
|
|
|
- $fromFds = $fromFds? array_values($fromFds) : [];
|
|
|
|
- $toFds = $toFds? array_values($toFds) : [];
|
|
|
|
- $fds = $fds? array_values($fds) : [];
|
|
|
|
- $fds = $fromFds? array_merge($fromFds, $fds) : $fds;
|
|
|
|
- $fds = $toFds? array_merge($toFds, $fds) : $fds;
|
|
|
|
- $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '发送成功:' . $frameId]);
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},消息群推给,".json_encode($fds));
|
|
|
|
- if ($fds) {
|
|
|
|
- $fds = array_unique($fds);
|
|
|
|
- foreach($fds as $toFd){
|
|
|
|
- if($toFd != $frameId || $type == 2){
|
|
|
|
- $this->sendMsg($toFd, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '推送视频通话消息成功:' . $toFd.'-来源'.$frameId]);
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$toFd}】@{$data['message']},推送视频消息,来源【{$frameId}】");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},消息群推结束");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 如果通话时长
|
|
|
|
- if ($status == 1 && $videoTime > 0) {
|
|
|
|
- // 更新剩余时长
|
|
|
|
- if($type == 2){
|
|
|
|
- ImChatService::make()->updateChatParams($toUid, $fromUid, $videoTime, 2);
|
|
|
|
- }else{
|
|
|
|
- ImChatService::make()->updateChatParams($fromUid, $toUid, $videoTime, 2);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ $msgData['time_text'] = dateFormat($msgData['create_time']);
|
|
|
|
+ $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'scene'=> $scene, 'data' => $msgData, 'message' => '发送成功:' . $frameId]);
|
|
|
|
+ $toBindData = RedisService::get("chats:bind:{$scene}_{$toUid}");
|
|
|
|
+ $toFd = isset($toBindData['fd']) ? $toBindData['fd'] : 0;
|
|
|
|
+ if ($toBindData && $toFd) {
|
|
|
|
+ $this->sendMsg($toFd, ['success' => true, 'op' => 'push' ,'scene'=> $scene, 'data' => $msgData, 'message' => '推送消息成功:' . $toFd]);
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:客户端【{$frameId}-{$fromUid}】推送消息给【{$toFd}-{$toUid}。");
|
|
}
|
|
}
|
|
|
|
|
|
break;
|
|
break;
|
|
- case 'video-login': // 登录
|
|
|
|
case 'login': // 登录
|
|
case 'login': // 登录
|
|
- $this->info("【{$date}】Socket:登录成功【{$frameId}-{$fromUid}-{$op}】。");
|
|
|
|
- $this->sendMsg($frameId, ['success' => true,'op'=> $op, 'message' => '登录成功', 'data' => $data, 't' => time()]);
|
|
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:登录成功【{$frameId}-{$fromUid}-{$op}】。");
|
|
|
|
+ $this->sendMsg($frameId, ['success' => true,'op'=> $op, 'scene'=>$scene, 'message' => '登录成功', 'data' => $data, 't' => time()]);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- $this->sendMsg($frameId, ['success' => false, 'message' => 'ok', 'data' => $data, 't' => time()]);
|
|
|
|
|
|
+ $this->sendMsg($frameId, ['success' => false, 'message' => 'ok', 'scene'=>$scene, 'data' => $data, 't' => time()]);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$frameId}】消息处理成功");
|
|
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:客户端【{$frameId}】消息处理成功");
|
|
} catch (\Exception $exception) {
|
|
} catch (\Exception $exception) {
|
|
- RedisService::set("caches:sockets:error_{$frameId}", ['error' => $exception->getTrace(), 'date' => $date], 7200);
|
|
|
|
- $this->info("【{$date}】Socket:客户端【{$frameId}】消息处理错误 " . $exception->getMessage());
|
|
|
|
|
|
+ RedisService::set("caches:sockets:error_{$frameId}", ['error' => $exception->getMessage(),'trace'=>$exception->getTrace(), 'date' => $date], 7200);
|
|
|
|
+ $this->info("【{$scene} {$date}】Socket:客户端【{$frameId}】消息处理错误 " . $exception->getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|