From 3ac275bd9b2f44539d68db6d0c41417976886c17 Mon Sep 17 00:00:00 2001 From: lq Date: Thu, 26 Jun 2025 09:56:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Enum/MessageTypeEnum.php | 35 +++++++++++ app/Http/Controllers/ImController.php | 17 ++++++ app/Services/Base/BaseService.php | 4 ++ .../GatewayWorker/GatewayClientService.php | 5 +- app/Services/GatewayWorker/ImService.php | 13 +++++ resources/views/chat.blade.php | 58 ++++++++++++++----- routes/api.php | 2 +- 7 files changed, 115 insertions(+), 19 deletions(-) create mode 100644 app/Enum/MessageTypeEnum.php diff --git a/app/Enum/MessageTypeEnum.php b/app/Enum/MessageTypeEnum.php new file mode 100644 index 00000000..6816b7e4 --- /dev/null +++ b/app/Enum/MessageTypeEnum.php @@ -0,0 +1,35 @@ +value => '文本', + self::Image->value => '图片', + self::Audio->value => '音频', + self::Video->value => '视频', + self::Prescription->value => '处方', + self::Case->value => '病例', + self::VideoCall->value => '视频通话', + default => '未知', + }; + } + +} diff --git a/app/Http/Controllers/ImController.php b/app/Http/Controllers/ImController.php index cb5a963c..5039469c 100644 --- a/app/Http/Controllers/ImController.php +++ b/app/Http/Controllers/ImController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Services\GatewayWorker\ImService; use App\Services\GatewayWorker\UserService; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class ImController extends Controller @@ -25,4 +26,20 @@ class ImController extends Controller return jerr($e->getMessage()); } } + + /** + * 发送消息 + * @Method POST + * @return JsonResponse + */ + public function sendMessage() + { + $messageType = request()->post('message_type'); + $data = request()->post('data'); + try { + return jok($this->service->sendMessage($data, $messageType)); + } catch (\Exception $e) { + return jerr($e->getMessage()); + } + } } diff --git a/app/Services/Base/BaseService.php b/app/Services/Base/BaseService.php index d1671069..0d6aad43 100644 --- a/app/Services/Base/BaseService.php +++ b/app/Services/Base/BaseService.php @@ -2,15 +2,19 @@ namespace App\Services\Base; +use App\Models\UserModel; + class BaseService { protected $userId; + protected $userInfo; protected static $instance; public function __construct() { $token = request()->header('token'); $this->userId = $token; + $this->userInfo = UserModel::where('id', $token)->first(); } // 单例 diff --git a/app/Services/GatewayWorker/GatewayClientService.php b/app/Services/GatewayWorker/GatewayClientService.php index a0061a14..3f0d0437 100644 --- a/app/Services/GatewayWorker/GatewayClientService.php +++ b/app/Services/GatewayWorker/GatewayClientService.php @@ -21,7 +21,6 @@ class GatewayClientService { // ds(Gateway::$registerAddress = config('gateway.register_address')); Gateway::$registerAddress = config('gateway.register_address'); - ds(Gateway::getAllUidCount()); return $this; } @@ -72,9 +71,9 @@ class GatewayClientService /** * 发送消息给指定用户 */ - public function sendToUser(int $toUserId, int $fromUserId, string $fromUserName, string $text): void + public function sendToUser(int $toUserId, int $fromUserId, string $fromUserName, string $msgData): void { - $message = $this->buildMessage($fromUserId, $fromUserName, $text); + $message = $this->buildMessage($fromUserId, $fromUserName, $msgData); Gateway::sendToUid($toUserId, $message); } diff --git a/app/Services/GatewayWorker/ImService.php b/app/Services/GatewayWorker/ImService.php index 8b80e4a8..83cbc994 100644 --- a/app/Services/GatewayWorker/ImService.php +++ b/app/Services/GatewayWorker/ImService.php @@ -2,6 +2,7 @@ namespace App\Services\GatewayWorker; +use App\Enum\MessageTypeEnum; use App\Services\Base\BaseService; class ImService extends BaseService @@ -17,4 +18,16 @@ class ImService extends BaseService return ['绑定成功']; } + + public function sendMessage($data, $type = MessageTypeEnum::Text->value) + { + $data['message_type'] = $type; + GatewayClientService::getInstance()->init()->sendToUser( + $this->userId, + $this->userId === 1? 2: 1, + $this->userInfo['nick_name'], + json_encode($data), + ); + return ['发送成功']; + } } diff --git a/resources/views/chat.blade.php b/resources/views/chat.blade.php index 20a720bb..0a5b9a79 100644 --- a/resources/views/chat.blade.php +++ b/resources/views/chat.blade.php @@ -658,24 +658,52 @@ timestamp: Date.now() }; + let token = sessionStorage.getItem('token'); + if (socket && socket.readyState === WebSocket.OPEN) { - socket.send(JSON.stringify(message)); + axios.post('/api/b', message, { + headers: { + 'Authorization': `Bearer ${token}`, // 假设使用 Bearer token + 'Content-Type': 'application/json' // 通常也需要指定内容类型 + } + }) + .then(response => { + console.log('请求成功:', response.data); + // 添加消息到UI(自己的消息) + addMessage({ + userId: currentUser.id, + name: currentUser.name, + avatarColor: currentUser.avatarColor, + text: text, + timestamp: new Date(), + type: 'sent' + }); + // 清空输入框 + messageInput.value = ''; - // 添加消息到UI(自己的消息) - addMessage({ - userId: currentUser.id, - name: currentUser.name, - avatarColor: currentUser.avatarColor, - text: text, - timestamp: new Date(), - type: 'sent' + // 重新聚焦输入框 + messageInput.focus(); + }) + .catch(error => { + console.error('请求出错:', error); }); - - // 清空输入框 - messageInput.value = ''; - - // 重新聚焦输入框 - messageInput.focus(); + // socket.send(JSON.stringify(message)); + // + // // 添加消息到UI(自己的消息) + // addMessage({ + // userId: currentUser.id, + // name: currentUser.name, + // avatarColor: currentUser.avatarColor, + // text: text, + // timestamp: new Date(), + // type: 'sent' + // }); + // + // // 清空输入框 + // messageInput.value = ''; + // + // // 重新聚焦输入框 + // messageInput.focus(); } } diff --git a/routes/api.php b/routes/api.php index 2ec05328..adf06ca5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,7 +13,7 @@ Route::group([ 'prefix' => '', ], function () { cc_auto_route_register([ - 'auth' => \App\Http\Controllers\UserController::class + 'im' => \App\Http\Controllers\ImController::class, ]); });