// 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) => { 
 | 
      // console.log(data); 
 | 
      eventBus.emit("stackerData", data); 
 | 
    }); 
 | 
    connection.on("LineData", (data) => { 
 | 
      eventBus.emit("locationData", data); 
 | 
    }); 
 | 
    connection.on("Logs", (data) => { 
 | 
      eventBus.emit("Logs", data); 
 | 
    }); 
 | 
  }; 
 | 
  
 | 
  //页面销毁 
 | 
  // onUnmounted(() => {}) 
 | 
  return { startSignalr }; 
 | 
} 
 |