const WebSocketUtil: any = (function () {
let url: string
let sessionId: any
let Socket: WebSocket | null = null
let isReconnecting = true
let interval: any = null
function createWebSocket(socketUrl: string, token) {
console.error("调用了createWebSocket")
isReconnecting = true
url = socketUrl
sessionId = token
try {
Socket && Socket.close()
if (!Socket) {
Socket = new WebSocket(`${url + token}`)
Socket.onopen = onopen
Socket.onmessage = onmessage
Socket.onerror = onerror
Socket.onclose = onclose
}
} catch (error) {
console.error(error)
}
}
function onopen() {
sendPing({ heart: `${sessionId}` })
}
function onmessage(event: any) {
window.dispatchEvent(new CustomEvent("onmessage", {
detail: {
data: event.data
}
}))
}
function onerror() {
console.error("websocket连接出错")
Socket?.close()
clearInterval(interval)
if (Socket?.readyState !== Socket?.CLOSED) {
Socket = null
createWebSocket(url, sessionId)
}
}
function onclose() {
console.error("websocket已关闭")
clearInterval(interval)
if (isReconnecting) {
if (Socket?.readyState !== Socket?.CLOSING) {
Socket = null
createWebSocket(url, sessionId)
}
}
}
function connect(message: any) {
setTimeout(() => {
if (Socket?.readyState == Socket?.CONNECTING) {
connect(message)
} else {
Socket?.send(JSON.stringify(message))
}
}, 1000)
}
function sendPing(message: any) {
clearInterval(interval)
Socket?.send(JSON.stringify(message))
interval = setInterval(() => {
Socket?.send(JSON.stringify(message))
}, 5000)
}
function closeSocket() {
clearInterval(interval)
isReconnecting = false
Socket?.close()
Socket = null
}
return {
closeSocket,
onclose,
createWebSocket,
}
})()
export default WebSocketUtil