From 9a2c53628888837f2e04c0d1863faed415361394 Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Wed, 10 Mar 2021 23:47:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=EF=BC=9A=E6=95=B4=E7=90=86?= =?UTF-8?q?=E6=9C=80=E8=BF=91=E7=A7=81=E8=81=8A=E7=9A=84=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/chatService.ts | 39 +++++++++++++++---------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/game-server/app/services/chatService.ts b/game-server/app/services/chatService.ts index ad342be42..b66b29930 100644 --- a/game-server/app/services/chatService.ts +++ b/game-server/app/services/chatService.ts @@ -80,6 +80,27 @@ async function createGroupMsgData(roleId: string, roleName: string, channel: str return result; } +function createChatRec(sender: boolean, curTime: Date, targetRoleId) { + const result: PrivateChatRec = { + // 接收者没有阅读时间 + targetRoleId, lastChatTime: curTime, lastReadTime: sender ? curTime : null + }; + return result; +} + +async function updateRecentChats(sender: boolean, roleId: string, targetRoleId: string, curTime: Date) { + const { recentPrivateChats } = await ChatInfoModel.findInfo(roleId); + const recIdx = recentPrivateChats.findIndex(chat => { return chat.targetRoleId === targetRoleId }); + if (recIdx === -1) { + recentPrivateChats.push(createChatRec(sender, curTime, targetRoleId)); + } else { + recentPrivateChats[recIdx].lastChatTime = curTime; + // 发送者的最后阅读时间也更新 + recentPrivateChats[recIdx].lastReadTime = sender ? curTime : recentPrivateChats[recIdx].lastReadTime; + } + await ChatInfoModel.updateInfo({ roleId, recentPrivateChats}); +} + /** * @description 数据库中创建私聊数据 * @export @@ -96,22 +117,8 @@ export async function createPrivateMsg(roleId: string, roleName: string, type: n const result: PrivateMessageType = await PrivateMessageModel.createMsg(msgData); const curTime = new Date(); - const { recentPrivateChats: senderRecentChats } = await ChatInfoModel.findInfo(roleId); - const senderRecIdx = senderRecentChats.findIndex(chat => { return chat.targetRoleId === targetRoleId }); - const newSenderRec: PrivateChatRec = { - targetRoleId, lastChatTime: curTime, lastReadTime: curTime - }; - senderRecIdx === -1 ? senderRecentChats.push(newSenderRec) : senderRecentChats[senderRecIdx] = newSenderRec; - await ChatInfoModel.updateInfo({ roleId, recentPrivateChats: senderRecentChats}); - - const { recentPrivateChats: receiverRecentChats } = await ChatInfoModel.findInfo(targetRoleId); - const receiverRecIdx = receiverRecentChats.findIndex(chat => { return chat.targetRoleId === roleId }); - const newReceiverRec: PrivateChatRec = { - targetRoleId: roleId, lastChatTime: curTime, lastReadTime: curTime - }; - receiverRecIdx === -1 ? receiverRecentChats.push(newReceiverRec) : receiverRecentChats[receiverRecIdx].lastChatTime = curTime; - await ChatInfoModel.updateInfo({ roleId: targetRoleId, recentPrivateChats: receiverRecentChats}); - + await updateRecentChats(true, roleId, targetRoleId, curTime); + await updateRecentChats(false, targetRoleId, roleId, curTime); return result; }