|
@@ -1495,8 +1495,8 @@ const clearAllSyncStates = () => {
|
|
|
if (props.type == '1' && isCreator.value && docSocket.value) {
|
|
if (props.type == '1' && isCreator.value && docSocket.value) {
|
|
|
console.log('🧹 创建老师退出,清空所有同步状态')
|
|
console.log('🧹 创建老师退出,清空所有同步状态')
|
|
|
docSocket.value.transact(() => {
|
|
docSocket.value.transact(() => {
|
|
|
- // 清空普通消息(Map 结构)
|
|
|
|
|
- const messageMap = docSocket.value?.getMap?.('message')
|
|
|
|
|
|
|
+ // 清空普通消息(Map 结构,messageV2 避免与旧 Array('message') 根类型冲突)
|
|
|
|
|
+ const messageMap = docSocket.value?.getMap?.('messageV2')
|
|
|
if (messageMap) {
|
|
if (messageMap) {
|
|
|
messageMap.delete('latest')
|
|
messageMap.delete('latest')
|
|
|
}
|
|
}
|
|
@@ -3216,7 +3216,9 @@ const messageInit = () => {
|
|
|
// 初始化普通消息数组(只保留最后一条)
|
|
// 初始化普通消息数组(只保留最后一条)
|
|
|
if (!yMessage.value) {
|
|
if (!yMessage.value) {
|
|
|
console.log('初始化普通消息Map')
|
|
console.log('初始化普通消息Map')
|
|
|
- yMessage.value = docSocket.value.getMap('message')
|
|
|
|
|
|
|
+ // 必须使用 messageV2:服务器上旧的 message 是 Array 根类型,
|
|
|
|
|
+ // 同名再 getMap 会导致根类型冲突、后注册的被改名,observe 间歇性失效
|
|
|
|
|
+ yMessage.value = docSocket.value.getMap('messageV2')
|
|
|
yMessage.value.observe((e: any) => {
|
|
yMessage.value.observe((e: any) => {
|
|
|
// Map 的 observe 事件中 keysChanged 包含被更新的 key
|
|
// Map 的 observe 事件中 keysChanged 包含被更新的 key
|
|
|
if (e.keysChanged.has('latest')) {
|
|
if (e.keysChanged.has('latest')) {
|
|
@@ -3366,10 +3368,10 @@ const messageInit = () => {
|
|
|
if (isFirstEnter.value && isCreator.value && docSocket.value) {
|
|
if (isFirstEnter.value && isCreator.value && docSocket.value) {
|
|
|
console.log('🧹 首次进入且为创建者,清空所有同步状态')
|
|
console.log('🧹 首次进入且为创建者,清空所有同步状态')
|
|
|
docSocket.value.transact(() => {
|
|
docSocket.value.transact(() => {
|
|
|
- // 清空普通消息(只保留最后一条的逻辑在 sendMessage 中处理)
|
|
|
|
|
- const messageArray = docSocket.value?.getArray?.('message')
|
|
|
|
|
- if (messageArray) {
|
|
|
|
|
- messageArray.delete(0, messageArray.length)
|
|
|
|
|
|
|
+ // 清空普通消息(Map 结构,最新一条存在 latest key)
|
|
|
|
|
+ const messageMapForClear = docSocket.value?.getMap?.('messageV2')
|
|
|
|
|
+ if (messageMapForClear) {
|
|
|
|
|
+ messageMapForClear.delete('latest')
|
|
|
}
|
|
}
|
|
|
// 清空计时器消息数组
|
|
// 清空计时器消息数组
|
|
|
const timerMessagesArray = docSocket.value?.getArray?.('timerMessages')
|
|
const timerMessagesArray = docSocket.value?.getArray?.('timerMessages')
|