From a855652c26bb31ffc1844a377ecb9e820b633d60 Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Fri, 18 Apr 2025 11:12:15 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9F=B3=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D?= =?UTF-8?q?=E6=8C=82=E6=96=AD=E6=97=B6=E6=8E=A8=E9=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=BC=80=E5=A7=8B=E9=80=9A=E8=AF=9D=E7=9A=84?= =?UTF-8?q?=E6=B6=88=E6=81=AFUID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/wildfirechat/push/PushMessage.java | 1 + .../moquette/spi/impl/MessagesPublisher.java | 21 ++++++++++++++++--- .../impl/PersistentQueueMessageSender.java | 3 ++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/broker/src/main/java/cn/wildfirechat/push/PushMessage.java b/broker/src/main/java/cn/wildfirechat/push/PushMessage.java index e2088596..4595adde 100644 --- a/broker/src/main/java/cn/wildfirechat/push/PushMessage.java +++ b/broker/src/main/java/cn/wildfirechat/push/PushMessage.java @@ -36,6 +36,7 @@ public class PushMessage { public String language; public boolean republish; public long messageId; + public long callStartUid; public PushMessage(String sender, int conversationType, String target, int line, int messageContentType, long serverTime, String senderName, String senderPortrait, String targetName, String targetPortrait, int unReceivedMsg, int mentionedType, boolean isHiddenDetail, String language) { this.sender = sender; diff --git a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java index 802b0d47..cc9e9569 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -16,6 +16,7 @@ package io.moquette.spi.impl; +import org.json.simple.JSONObject; import cn.wildfirechat.pojos.*; import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; @@ -32,12 +33,14 @@ import io.moquette.spi.ISessionsStore; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.handler.codec.mqtt.*; +import org.json.simple.parser.JSONParser; import win.liyufan.im.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; @@ -156,7 +159,7 @@ public class MessagesPublisher { } } - private void publish2Receivers(String sender, int conversationType, String target, int line, long messageId, Collection receivers, String pushContent, String pushData, String exceptClientId, int pullType, int messageContentType, long serverTime, int mentionType, List mentionTargets, int persistFlag, boolean directing) { + private void publish2Receivers(String sender, int conversationType, String target, int line, long messageId, Collection receivers, String pushContent, String pushData, long callStartUid, String exceptClientId, int pullType, int messageContentType, long serverTime, int mentionType, List mentionTargets, int persistFlag, boolean directing) { if (persistFlag == Transparent) { publishTransparentMessage2Receivers(messageId, receivers, pullType, exceptClientId); return; @@ -420,7 +423,7 @@ public class MessagesPublisher { name = fd.getAlias(); } } - this.messageSender.sendPush(sender, conversationType, target, line, messageId, targetSession.getClientID(), pushContent, pushData, messageContentType, serverTime, name, senderPortrait, targetName, targetPortrait, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); + this.messageSender.sendPush(sender, conversationType, target, line, messageId, targetSession.getClientID(), pushContent, pushData, callStartUid, messageContentType, serverTime, name, senderPortrait, targetName, targetPortrait, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); } } @@ -715,11 +718,23 @@ public class MessagesPublisher { pushContent = null; } + long callStartUid = 0; + if (message.getContent().getType() == 402) { + try { + String str = new String(message.getContent().getData().toByteArray(), StandardCharsets.UTF_8); + JSONObject jsonObject = (JSONObject)(new JSONParser().parse(str)); + if (jsonObject.containsKey("u")) { + callStartUid = (Long)jsonObject.get("u"); + } + } catch (Exception e) {} + } + + publish2Receivers(message.getFromUser(), message.getConversation().getType(), message.getConversation().getTarget(), message.getConversation().getLine(), messageId, receivers, - pushContent, message.getContent().getPushData(), exceptClientId, pullType, message.getContent().getType(), message.getServerTimestamp(), message.getContent().getMentionedType(), message.getContent().getMentionedTargetList(), message.getContent().getPersistFlag(), message.hasToUser() || !message.getToList().isEmpty()); + pushContent, message.getContent().getPushData(), callStartUid, exceptClientId, pullType, message.getContent().getType(), message.getServerTimestamp(), message.getContent().getMentionedType(), message.getContent().getMentionedTargetList(), message.getContent().getPersistFlag(), message.hasToUser() || !message.getToList().isEmpty()); } diff --git a/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java b/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java index 047c50ec..eed05bf9 100755 --- a/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java +++ b/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java @@ -37,12 +37,13 @@ class PersistentQueueMessageSender { this.connectionDescriptorStore = connectionDescriptorStore; } - void sendPush(String sender, int conversationType, String target, int line, long messageId, String deviceId, String pushContent, String pushData, int messageContentType, long serverTime, String senderName, String senderPortrait, String targetName, String targetPortrait, int unReceivedMsg, int mentionType, boolean isHiddenDetail, String language) { + void sendPush(String sender, int conversationType, String target, int line, long messageId, String deviceId, String pushContent, String pushData, long callStartUid, int messageContentType, long serverTime, String senderName, String senderPortrait, String targetName, String targetPortrait, int unReceivedMsg, int mentionType, boolean isHiddenDetail, String language) { LOG.info("Send push to {}, message from {}", deviceId, sender); PushMessage pushMessage = new PushMessage(sender, conversationType, target, line, messageContentType, serverTime, senderName, senderPortrait, targetName, targetPortrait, unReceivedMsg, mentionType, isHiddenDetail, language); pushMessage.pushContent = pushContent; pushMessage.pushData = pushData; pushMessage.messageId = messageId; + pushMessage.callStartUid = callStartUid; PushServer.getServer().pushMessage(pushMessage, deviceId, pushContent); }