// import sysConfig from '@/config/index' // import tool from '@/utils/tool' import store from "../store/index"; import http from "@/../src/api/http.js"; import * as signalR from "@microsoft/signalr"; import { ElNotification } from "element-plus"; import eventBus from "./eventBus"; // import * as signalrMessage from './mqtt/message' //使用signalr export default function useSignalr() { // const userInfo = tool.data.get('USER_INFO') //用户信息 let openedNotification = null; // 保存当前打开的Notification实例 let socketUrl = "hubs/simple"; //socket地址 // if (sysConfig.VITE_PROXY === 'false') { socketUrl = http.ipAddress + socketUrl; //判断是否要走代理模式,走了的话发布之后直接nginx代理 // } //开始 const startSignalr = () => { //初始化连接 const connection = init(); // 启动连接 connection .start() .then(() => { console.log("启动连接"); }) .catch((err) => { console.log("连接失败", err); }); }; //初始化 const init = () => { console.log("初始化SignalR对象"); // SignalR对象 const connection = new signalR.HubConnectionBuilder() .withUrl(socketUrl, { accessTokenFactory: () => store.getters.getToken(), skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, }) .withAutomaticReconnect({ nextRetryDelayInMilliseconds: () => { return 5000; // 每5秒重连一次 }, }) //自动重新连接 .configureLogging(signalR.LogLevel.Information) .build(); connection.keepAliveIntervalInMilliseconds = 15 * 1000; // 心跳检测15s // connection.serverTimeoutInMilliseconds = 30 * 60 * 1000 // 超时时间30m // 断开连接 connection.onclose(async () => { console.log("断开连接"); }); //断线重新 connection.onreconnected(() => { console.log("断线重新连接成功"); }); //消息处理 receiveMsg(connection); return connection; }; //接收消息处理 const receiveMsg = (connection) => { //接收登出 connection.on("LoginOut", (data) => { // signalrMessage.loginOut(data) }); connection.on("NewMessage", (data) => { eventBus.emit("stackerDataError", data); if (openedNotification === null || openedNotification.closed) { // 上一个Notification已关闭或尚未打开 openedNotification = ElNotification({ title: "成功", message: data, type: "success", onClose: () => { // Notification已关闭 openedNotification = null; // 清空当前打开的Notification实例 console.log("Notification已关闭"); }, }); } }); connection.on("StackerData", (data) => { eventBus.emit("stackerData", data); }); connection.on("LineData", (data) => { eventBus.emit("locationData", data); }); connection.on("Logs", (data) => { eventBus.emit("Logs", data); }); }; //页面销毁 // onUnmounted(() => {}) return { startSignalr }; }