import store from "@/store";
|
import config from "@/config/config";
|
import WsSocket from "@/plugins/ws-socket";
|
import { getToken } from "@/utils/auth";
|
import { Notification } from "element-ui";
|
|
// 引入消息处理类
|
import KeyboardEvent from "@/im-server/event/keyboard";
|
import LoginEvent from "@/im-server/event/login";
|
import TalkEvent from "@/im-server/event/talk";
|
import RevokeEvent from "@/im-server/event/revoke";
|
import GroupJoinEvent from "@/im-server/event/group-join";
|
import FriendApplyEvent from "@/im-server/event/friend-apply";
|
|
/**
|
* SocketInstance 连接实例
|
*
|
* 注释: 所有 WebSocket 消息接收处理在此实例中处理
|
*/
|
class SocketInstance {
|
/**
|
* WsSocket 实例
|
*/
|
socket;
|
|
/**
|
* SocketInstance 初始化实例
|
*/
|
constructor() {
|
this.socket = new WsSocket(
|
() => {
|
return `${config.BASE_WS_URL}/` + getToken();
|
},
|
{
|
onError: (evt) => {
|
console.log("Websocket 连接失败回调方法");
|
},
|
// Websocket 连接成功回调方法
|
onOpen: (evt) => {
|
this.updateSocketStatus(true);
|
},
|
// Websocket 断开连接回调方法
|
onClose: (evt) => {
|
this.updateSocketStatus(false);
|
},
|
}
|
);
|
|
this.registerEvents();
|
}
|
|
// 连接 WebSocket 服务
|
connect () {
|
console.log("🔗连接 WebSocket");
|
this.socket.connection();
|
}
|
|
/**
|
* 注册回调消息处理事件
|
*/
|
registerEvents () {
|
this.socket.on("event_talk", (data) => {
|
console.log("接收到消息,event_talk", data);
|
new TalkEvent(data).handle();
|
});
|
|
this.socket.on("event_online_status", (data) => {
|
new LoginEvent(data).handle();
|
});
|
|
this.socket.on("event_keyboard", (data) => {
|
console.log("推送", data);
|
new KeyboardEvent(data).handle();
|
});
|
|
this.socket.on("event_revoke_talk", (data) => {
|
new RevokeEvent(data).handle();
|
});
|
|
this.socket.on("event_friend_apply", (data) => {
|
new FriendApplyEvent(data).handle();
|
});
|
|
this.socket.on("join_group", (data) => {
|
new GroupJoinEvent(data).handle();
|
});
|
|
this.socket.on("event_error", (data) => {
|
Notification({
|
title: "友情提示",
|
message: data.message,
|
type: "warning",
|
});
|
});
|
}
|
|
/**
|
* 更新 WebSocket 连接状态
|
*
|
* @param {Boolean} status 连接状态
|
*/
|
updateSocketStatus (status) {
|
store.commit("UPDATE_SOCKET_STATUS", status);
|
}
|
|
/**
|
* 推送消息
|
*
|
* @param {String} event 事件名
|
* @param {Object} data 数据
|
*/
|
emit (event, data) {
|
this.socket.emit(event, data);
|
}
|
}
|
|
export default new SocketInstance();
|