123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import { patternNginxWsUrl, getWsUrl } from "../../utils/ws"
- // const webSocket = require('ws')
- // const wsUrl = patternNginxWsUrl()
- const wsUrl = getWsUrl()
- const useMessageStore = defineStore('message', {
- status: () => ({
- // 未读消息数量
- messageNum: 0,
- ws: null,
- latestMessage: null,
- heartTimeOut: 40000,
- lockReconnect: false,
- timerReconnect: undefined,
- timerHeart: undefined,
- timerServerHeart: undefined,
- handClose: false,
- messageCount: 0,
- id: undefined,
- token: token
- }),
- actions: {
- getMessageNum(message) {
- this.messageNum++
- this.latestMessage = message
- // console.log(this.messageNum)
- // console.log(this.latestMessage)
- this.messageCount = this.latestMessage.data
- const value = this.messageCount != null ? Number(this.messageCount) : 0
- this.broadcastMessage(value)
- },
- broadcastMessage(count) {
- const event = new CustomEvent('messageChange', { detail: count });
- window.dispatchEvent(event);
- },
- acceptWs: () => {
- },
- async createWebSocket(id, token) {
- // console.log(id, wsUrl, token)
- try {
- this.ws = new WebSocket(wsUrl + id, [token])
- // this.initWebsocket()
- } catch (e) {
- // console.log(e)
- this.reconnection(id, token)
- }
- },
- async connection(id, token) {
- this.id = id
- this.token = token
- // this.getMessageNum('1')
- // console.log(id, wsUrl, token)
- // console.log(window)
- // if("webSocket" in window) {
- await this.createWebSocket(id, token).then(_ => {
- this.initWebsocket()
- })
- // } else {
- // console.log('浏览器不支持websocket')
- // }
- },
- initWebsocket() {
- this.ws.onopen = (e) => {
- this.ws.send("open server")
- console.log("链接成功")
- this.heartCheck()
- }
- this.ws.onmessage = (message) => {
- this.getMessageNum(message)
- this.heartCheck()
- }
- this.ws.onerror = (e) => {
- console.log('链接失败')
- this.reconnection(this.id, this.token)
- }
- this.ws.onclose = (e) => {
- console.log("关闭连接")
- if (!this.handClose) {
- this.reconnection(this.id, this.token)
- }
- }
- },
- clearTimer() {
- this.timerReconnect && clearTimeout(this.timerReconnect)
- this.timerHeart && clearTimeout(this.timerHeart)
- this.timerServerHeart && clearTimeout(this.timerServerHeart)
- },
- reconnection(id, token) {
- console.log("重新连接")
- if (this.lockReconnect) {
- return
- }
- this.lockReconnect = true
- if (this.timerReconnect) {
- this.clearTimer(this.timerReconnect)
- }
- //没连上会一直重连, 设置迟延,避免请求过多
- this.timerReconnect = setTimeout(() => {
- //setTimeout 到点了执行
- this.connection(id, token)
- this.lockReconnect = false
- }, 5000);
- },
- heartCheck() {
- console.log('心跳检测')
- if (this.timerHeart) {
- clearTimeout(this.timerHeart)
- }
- this.timerHeart = setTimeout(() => {
- // console.log("ping")
- this.ws.send("ping")
- this.lockReconnect = false
- }, this.heartTimeOut)
- },
- sendMsg(data) {
- console.log("发送信息")
- if (this.ws.readyState === WebSocket.OPEN) {
- this.ws.send(JSON.stringify(data))
- }
- },
- closeWs() {
- console.log("关闭ws")
- this.handClose = true
- this.clearTimer()
- this.ws.close()
- },
- initMessageCount() {
- }
- }
- })
- export default useMessageStore
|