|
@@ -594,6 +594,7 @@ const connectionStatus = ref<'disconnected' | 'connecting' | 'connected'>('disco
|
|
|
// 认证 token 相关变量
|
|
// 认证 token 相关变量
|
|
|
const authToken = ref<string | null>(null)
|
|
const authToken = ref<string | null>(null)
|
|
|
const authTokenUpdateTimer = ref<NodeJS.Timeout | null>(null)
|
|
const authTokenUpdateTimer = ref<NodeJS.Timeout | null>(null)
|
|
|
|
|
+const socketCheckTimer = ref<NodeJS.Timeout | null>(null)
|
|
|
|
|
|
|
|
// 同步数据最大保留时间(40分钟)
|
|
// 同步数据最大保留时间(40分钟)
|
|
|
const SYNC_DATA_MAX_AGE = 40 * 60 * 1000 // 40分钟 = 40 * 60 * 1000毫秒
|
|
const SYNC_DATA_MAX_AGE = 40 * 60 * 1000 // 40分钟 = 40 * 60 * 1000毫秒
|
|
@@ -3411,6 +3412,12 @@ onUnmounted(() => {
|
|
|
authTokenUpdateTimer.value = null
|
|
authTokenUpdateTimer.value = null
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 清理 socket 连接检查定时器
|
|
|
|
|
+ if (socketCheckTimer.value) {
|
|
|
|
|
+ clearInterval(socketCheckTimer.value)
|
|
|
|
|
+ socketCheckTimer.value = null
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (providerSocket.value) {
|
|
if (providerSocket.value) {
|
|
|
providerSocket.value.destroy()
|
|
providerSocket.value.destroy()
|
|
|
providerSocket.value = null
|
|
providerSocket.value = null
|
|
@@ -3529,7 +3536,7 @@ const manualReconnect = () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 创建WebSocket连接
|
|
// 创建WebSocket连接
|
|
|
-const createWebSocketConnection = async () => {
|
|
|
|
|
|
|
+const createWebSocketConnection = async (type = 1) => {
|
|
|
if (!api.yweb_socket || isConnecting.value) return
|
|
if (!api.yweb_socket || isConnecting.value) return
|
|
|
|
|
|
|
|
isConnecting.value = true
|
|
isConnecting.value = true
|
|
@@ -3537,7 +3544,7 @@ const createWebSocketConnection = async () => {
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
// 清理之前的连接
|
|
// 清理之前的连接
|
|
|
- if (providerSocket.value) {
|
|
|
|
|
|
|
+ if (providerSocket.value && type == 1) {
|
|
|
providerSocket.value.destroy()
|
|
providerSocket.value.destroy()
|
|
|
providerSocket.value = null
|
|
providerSocket.value = null
|
|
|
}
|
|
}
|
|
@@ -3644,7 +3651,7 @@ const createWebSocketConnection = async () => {
|
|
|
console.log('👉 WebSocket连接断开')
|
|
console.log('👉 WebSocket连接断开')
|
|
|
connectionStatus.value = 'disconnected'
|
|
connectionStatus.value = 'disconnected'
|
|
|
isConnecting.value = false
|
|
isConnecting.value = false
|
|
|
- handleDisconnection()
|
|
|
|
|
|
|
+ createWebSocketConnection(2)
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
|
|
@@ -3653,7 +3660,7 @@ const createWebSocketConnection = async () => {
|
|
|
console.error('👉 WebSocket连接错误:', error)
|
|
console.error('👉 WebSocket连接错误:', error)
|
|
|
connectionStatus.value = 'disconnected'
|
|
connectionStatus.value = 'disconnected'
|
|
|
isConnecting.value = false
|
|
isConnecting.value = false
|
|
|
- handleDisconnection()
|
|
|
|
|
|
|
+ createWebSocketConnection(2)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -3661,8 +3668,11 @@ const createWebSocketConnection = async () => {
|
|
|
console.error('👉 创建WebSocket连接失败:', error)
|
|
console.error('👉 创建WebSocket连接失败:', error)
|
|
|
connectionStatus.value = 'disconnected'
|
|
connectionStatus.value = 'disconnected'
|
|
|
isConnecting.value = false
|
|
isConnecting.value = false
|
|
|
- handleDisconnection()
|
|
|
|
|
|
|
+ createWebSocketConnection(2)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 启动 socket 连接检查定时器
|
|
|
|
|
+ startSocketCheckTimer()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 处理连接断开
|
|
// 处理连接断开
|
|
@@ -3673,7 +3683,7 @@ const handleDisconnection = () => {
|
|
|
|
|
|
|
|
reconnectTimer.value = setTimeout(() => {
|
|
reconnectTimer.value = setTimeout(() => {
|
|
|
createWebSocketConnection()
|
|
createWebSocketConnection()
|
|
|
- }, reconnectInterval.value)
|
|
|
|
|
|
|
+ }, reconnectInterval.value) as unknown as NodeJS.Timeout
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
console.error('👉 WebSocket重连次数已达上限,停止重连')
|
|
console.error('👉 WebSocket重连次数已达上限,停止重连')
|
|
@@ -3682,6 +3692,29 @@ const handleDisconnection = () => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 启动 socket 连接检查定时器
|
|
|
|
|
+const startSocketCheckTimer = () => {
|
|
|
|
|
+ // 清理之前的定时器
|
|
|
|
|
+ if (socketCheckTimer.value) {
|
|
|
|
|
+ clearInterval(socketCheckTimer.value)
|
|
|
|
|
+ socketCheckTimer.value = null
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 每10秒检查一次 socket 连接状态
|
|
|
|
|
+ socketCheckTimer.value = setTimeout(() => {
|
|
|
|
|
+ if (providerSocket.value) {
|
|
|
|
|
+ // 直接检查 providerSocket 的连接状态
|
|
|
|
|
+ // WebsocketProvider 有一个 connected 属性来表示连接状态
|
|
|
|
|
+ const isConnected = (providerSocket.value as any).ws.readyState
|
|
|
|
|
+ console.log('🔍 定时器检查 socket 连接状态:', isConnected)
|
|
|
|
|
+ if (isConnected !== 1) {
|
|
|
|
|
+ console.log('🔍 定时器检查发现 socket 未连接,执行重连')
|
|
|
|
|
+ createWebSocketConnection(2)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }, 10000) as unknown as NodeJS.Timeout
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// 工具函数:格式化时间
|
|
// 工具函数:格式化时间
|
|
|
const formatTime = (totalSec: number) => {
|
|
const formatTime = (totalSec: number) => {
|
|
|
const m = Math.floor(totalSec / 60)
|
|
const m = Math.floor(totalSec / 60)
|