From c51bbfcf70a9ed08c1dd5731d01b86a330963e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=86=9B?= <510423039@qq.com> Date: Sat, 16 Apr 2022 12:32:06 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E5=89=8D=E7=AB=AF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=80=80=E5=87=BA=E6=97=B6,=E5=85=B3=E9=97=ADSignalR?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vben271/src/hooks/web/useSignalR.ts | 17 +++++++++++++---- vben271/src/router/index.ts | 10 +++++----- vben271/src/store/modules/user.ts | 4 +++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/vben271/src/hooks/web/useSignalR.ts b/vben271/src/hooks/web/useSignalR.ts index a202ebc8..d51d742a 100644 --- a/vben271/src/hooks/web/useSignalR.ts +++ b/vben271/src/hooks/web/useSignalR.ts @@ -1,12 +1,13 @@ import * as signalR from '@microsoft/signalr'; import { useMessage } from '/@/hooks/web/useMessage'; import { useUserStoreWithOut } from '/@/store/modules/user'; +let connection; export function useSignalR() { /** * 开始连接SignalR */ function startConnect(): void { - let connection = connectionsignalR(); + connection = connectionsignalR(); //接收普通文本消息 connection.on('ReceiveTextMessageAsync', ReceiveTextMessageHandlerAsync); //接收广播消息 @@ -14,16 +15,24 @@ export function useSignalR() { //开始连接 connection.start(); } + /** + * 关闭SignalR连接 + */ + function closeConnect(): void { + if (connection) { + connection.stop(); + } + } /** * 连接signalr */ - function connectionsignalR(): signalR.HubConnection { + function connectionsignalR() { const userStore = useUserStoreWithOut(); const token = userStore.getToken; const url = (import.meta.env.VITE_WEBSOCKE_URL as string) + '/signalr/notification'; - const connection = new signalR.HubConnectionBuilder() + connection = new signalR.HubConnectionBuilder() .withUrl(url, { accessTokenFactory: () => token, skipNegotiation: true, @@ -78,5 +87,5 @@ export function useSignalR() { }); } - return { startConnect }; + return { startConnect, closeConnect }; } diff --git a/vben271/src/router/index.ts b/vben271/src/router/index.ts index 03e599d1..fa5b4aec 100644 --- a/vben271/src/router/index.ts +++ b/vben271/src/router/index.ts @@ -1,8 +1,8 @@ -import { createWebHistory, RouteRecordRaw } from 'vue-router'; -import type { App } from 'vue'; +import { createWebHistory, RouteRecordRaw } from "vue-router"; +import type { App } from "vue"; -import { createRouter, createWebHashHistory } from 'vue-router'; -import { basicRoutes } from './routes'; +import { createRouter, createWebHashHistory } from "vue-router"; +import { basicRoutes } from "./routes"; // 白名单应该包含基本静态路由 const WHITE_NAME_LIST: string[] = []; @@ -18,7 +18,7 @@ export const router = createRouter({ history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH), routes: basicRoutes as unknown as RouteRecordRaw[], strict: true, - scrollBehavior: () => ({ left: 0, top: 0 }), + scrollBehavior: () => ({ left: 0, top: 0 }) }); // reset router diff --git a/vben271/src/store/modules/user.ts b/vben271/src/store/modules/user.ts index b0141cb1..c1bfc442 100644 --- a/vben271/src/store/modules/user.ts +++ b/vben271/src/store/modules/user.ts @@ -20,7 +20,7 @@ import { router } from '/@/router'; import { usePermissionStore } from '/@/store/modules/permission'; import { LoginInput } from '/@/services/ServiceProxies'; import jwt_decode from 'jwt-decode'; - +import { useSignalR } from '/@/hooks/web/useSignalR'; import { useOidcLogout } from '/@/views/sys/login/useLogin'; interface UserState { userInfo: Nullable; @@ -223,6 +223,8 @@ export const useUserStore = defineStore({ content: t('sys.app.logoutMessage'), onOk: async () => { await this.logout(true); + const { closeConnect } = useSignalR(); + closeConnect(); }, }); },