初始化
This commit is contained in:
79
src/composables/useWebSocket.js
Normal file
79
src/composables/useWebSocket.js
Normal file
@@ -0,0 +1,79 @@
|
||||
import { useUserStore } from "@/stores/user"
|
||||
import { useChatStore } from "@/stores/chat"
|
||||
|
||||
export function useWebSocket() {
|
||||
const userStore = useUserStore()
|
||||
const chatStore = useChatStore()
|
||||
|
||||
const connectWebSocket = () => {
|
||||
try {
|
||||
chatStore.connectionStatus = "connecting"
|
||||
|
||||
const wsUrl = "ws://localhost:12080/ws"
|
||||
console.log("连接WebSocket:", wsUrl)
|
||||
|
||||
chatStore.socket = new WebSocket(wsUrl)
|
||||
|
||||
chatStore.socket.onopen = () => {
|
||||
console.log("WebSocket连接已建立")
|
||||
chatStore.connectionStatus = "connected"
|
||||
|
||||
// 发送绑定请求
|
||||
if (userStore.currentUser) {
|
||||
const bindMsg = {
|
||||
request_type: "bind",
|
||||
sender_user_id: userStore.currentUser.id.toString(),
|
||||
}
|
||||
chatStore.socket.send(JSON.stringify(bindMsg))
|
||||
}
|
||||
}
|
||||
|
||||
chatStore.socket.onmessage = (event) => {
|
||||
try {
|
||||
const message = JSON.parse(event.data)
|
||||
console.log("收到消息:", message)
|
||||
|
||||
// 检查是否是系统消息
|
||||
if (message.clientId) return
|
||||
|
||||
chatStore.handleIncomingMessage(message, userStore.currentUser.id)
|
||||
} catch (e) {
|
||||
console.error("解析消息失败:", e)
|
||||
}
|
||||
}
|
||||
|
||||
chatStore.socket.onclose = (event) => {
|
||||
console.log("WebSocket连接已关闭, 代码:", event.code, "原因:", event.reason)
|
||||
chatStore.connectionStatus = "disconnected"
|
||||
|
||||
// 智能重连策略
|
||||
if (event.code !== 1000) {
|
||||
setTimeout(() => {
|
||||
console.log("尝试重新连接WebSocket...")
|
||||
connectWebSocket()
|
||||
}, 3000)
|
||||
}
|
||||
}
|
||||
|
||||
chatStore.socket.onerror = (error) => {
|
||||
console.error("WebSocket错误:", error)
|
||||
chatStore.connectionStatus = "disconnected"
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("连接WebSocket失败:", error)
|
||||
chatStore.connectionStatus = "disconnected"
|
||||
}
|
||||
}
|
||||
|
||||
const disconnectWebSocket = () => {
|
||||
if (chatStore.socket) {
|
||||
chatStore.socket.close()
|
||||
chatStore.socket = null
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
connectWebSocket,
|
||||
disconnectWebSocket,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user