qa-prevention-gwj-first-app/store/websocket.js

95 lines
3.7 KiB
JavaScript
Raw Normal View History

2023-11-07 09:43:46 +08:00
import Vue from 'vue'
import Vuex from 'vuex'
import {loginUserId} from "../common/tool";
Vue.use(Vuex)
export default new Vuex.Store({
state: {
socketTask: null,
isOpenSocket:false,
eventlist: {},
unread: []
},
mutations: {
WEBSOCKET_INIT(state, url) {
// 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】
state.socketTask = uni.connectSocket({
url,
// 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】
success(data) {
state.isOpenSocket = false;
// console.log("websocket连接成功");
},
});
// 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】
state.socketTask.onOpen((res) => {
// console.log("WebSocket连接正常打开中...");
state.isOpenSocket = true;
state.socketTask.send({
data: '[join]' + 'mobile-'+loginUserId,
async success() {
// console.log("" + p + "==》消息发送成功");
},
});
// 注:只有连接正常打开中 ,才能正常收到消息
state.socketTask.onMessage((res) => {
// console.log("收到服务器内容:" , JSON.parse(res.data));
state.eventlist = JSON.parse(res.data)
// state.unread.push(JSON.parse(res.data))
if (state.eventlist.USER_ID === loginUserId) {
var innerAudio = uni.createInnerAudioContext();
innerAudio.autoplay = true;
innerAudio.loop = true;
innerAudio.src = '../../static/audio/alarm.mp3';
innerAudio.onPlay(() => {
// console.log('开始播放');
});
innerAudio.onError((e) => {
console.log(e);
// console.log(e.errMsg);
// console.log(e.errCode);
});
if (state.eventlist.MESSAGE) {
uni.showModal({
title: '警告',
content: state.eventlist.MESSAGE,
showCancel: false,
confirmText: '确定',
success: res => {
if (res.confirm) {
innerAudio.stop()
innerAudio = null
}
}
})
}
}
});
});
state.socketTask.onClose((res) => {
state.isOpenSocket = false;
})
},
WEBSOCKET_SEND(state, p) {
state.socketTask.send({
data: p,
async success() {
// console.log("" + p + "==》消息发送成功");
},
});
},
},
actions: {
WEBSOCKET_INIT({
commit
}, url) {
commit('WEBSOCKET_INIT', url)
},
WEBSOCKET_SEND({
commit
}, p) {
commit('WEBSOCKET_SEND', p)
}
}
})