feat:跟新组织架构
This commit is contained in:
@@ -33,13 +33,14 @@ class MQTTClient {
|
||||
this.client.on("error", (error) => reject(error))
|
||||
|
||||
// 消息分发
|
||||
this.client.on("message", (topic, payload) => {
|
||||
this.client.on("message", (topic, payload) => {
|
||||
try {
|
||||
const message = JSON.parse(payload.toString())
|
||||
// const message = JSON.parse(payload.toString())
|
||||
// 遍历所有订阅主题,执行通配符匹配
|
||||
this.messageHandlers.forEach((handlers, subTopic) => {
|
||||
if (this.topicMatch(subTopic, topic)) {
|
||||
handlers.forEach((handler) => handler(message, topic))
|
||||
// handlers.forEach((handler) => handler(message, topic))
|
||||
handlers.forEach((handler) => handler(payload, topic))
|
||||
}
|
||||
})
|
||||
} catch (err) {
|
||||
|
||||
@@ -99,11 +99,13 @@ service.interceptors.request.use(
|
||||
|
||||
service.interceptors.response.use(
|
||||
(response) => {
|
||||
console.log(response,'response')
|
||||
// 1. 检查响应是否存在
|
||||
if (!response) {
|
||||
ElMessage.error('无响应数据');
|
||||
return Promise.reject(new Error('无响应数据'));
|
||||
}
|
||||
console.log(response.data,'response.data')
|
||||
// 2. 安全获取响应数据和状态码
|
||||
const responseData = response.data || {};
|
||||
const statusCode = response.status;
|
||||
@@ -124,6 +126,7 @@ service.interceptors.response.use(
|
||||
return Promise.resolve(responseData);
|
||||
|
||||
case 401:
|
||||
console.log('未授权', responseData)
|
||||
return handleUnauthorized().then(() => {
|
||||
return Promise.reject({ code: 401, message: '未授权' });
|
||||
});
|
||||
@@ -143,6 +146,13 @@ service.interceptors.response.use(
|
||||
console.error('请求错误:', error);
|
||||
let { message } = error;
|
||||
let code = error?.response?.status || -1;
|
||||
console.log(code,'code')
|
||||
|
||||
if(code == 401) {
|
||||
return handleUnauthorized().then(() => {
|
||||
return Promise.reject({ code: 401, message: '未授权' });
|
||||
});
|
||||
}
|
||||
|
||||
if (message == 'Network Error') {
|
||||
message = '后端接口连接异常';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { mqttClient } from "./mqtt";
|
||||
import { getWhiteboardShapes, getWhiteboardHistory } from "@/views/custom/api";
|
||||
import { useMeterStore } from '@/stores/modules/meter';
|
||||
import { encode, decode } from '@msgpack/msgpack'
|
||||
|
||||
const meterStore = useMeterStore();
|
||||
meterStore.initUdid();
|
||||
@@ -42,12 +43,15 @@ export const WhiteboardSync = {
|
||||
|
||||
// 订阅当前房间
|
||||
const topic = `xSynergy/ROOM/${roomUid}/whiteboard/#`;
|
||||
mqttClient.subscribe(topic, async (shapeData) => {
|
||||
mqttClient.subscribe(topic, async (shapeData) => {
|
||||
// console.log(shapeData, 'shapeData++格式装换')
|
||||
const shapeDataNew = decode(shapeData);
|
||||
// console.log(shapeDataNew, '格式解码')
|
||||
try {
|
||||
isRemote = true;
|
||||
// 如果 shape 来自本地用户,则跳过
|
||||
if (shapeData.user_uid === localUid) return;
|
||||
const res = await getWhiteboardHistory({ after_timestamp: shapeData.created_at }, roomUid);
|
||||
if (shapeDataNew.user_uid === localUid) return;
|
||||
const res = await getWhiteboardHistory({ after_timestamp: shapeDataNew.created_at }, roomUid);
|
||||
if (res.meta.code === 200) {
|
||||
canvasInstance.addShape(res.data.shapes);
|
||||
} else {
|
||||
@@ -62,7 +66,7 @@ export const WhiteboardSync = {
|
||||
|
||||
console.log("✅ 已订阅:", topic);
|
||||
} catch (err) {
|
||||
console.log("初始化多人同步失败:",err)
|
||||
console.log("初始化多人同步失败:", err)
|
||||
// console.error("❌ 连接或订阅失败:", err);
|
||||
}
|
||||
|
||||
@@ -72,10 +76,9 @@ export const WhiteboardSync = {
|
||||
if (isRemote || !['pencil', 'line', 'rectangle', 'circle', 'eraser'].includes(shape.type)) return;
|
||||
|
||||
// 如果是本地用户自己的 shape,则不调用接口
|
||||
if (shape.user_uid && shape.user_uid === localUid) return;
|
||||
|
||||
shape.room_uid = roomUid;
|
||||
if (shape.user_uid && shape.user_uid === localUid) return;
|
||||
|
||||
shape.room_uid = roomUid;
|
||||
try {
|
||||
await getWhiteboardShapes(shape, roomUid);
|
||||
} catch (err) {
|
||||
@@ -85,7 +88,7 @@ export const WhiteboardSync = {
|
||||
|
||||
// 监听画布事件:清空
|
||||
canvas.on('clear', async () => {
|
||||
if (!isRemote) {
|
||||
if (!isRemote) {
|
||||
try {
|
||||
// TODO: 调用接口,后端再发 MQTT
|
||||
// await clearWhiteboard(roomUid);
|
||||
|
||||
Reference in New Issue
Block a user