diff --git a/broker/src/main/java/cn/wildfirechat/push/PushMessage.java b/broker/src/main/java/cn/wildfirechat/push/PushMessage.java index 3df03f87..93f12a71 100644 --- a/broker/src/main/java/cn/wildfirechat/push/PushMessage.java +++ b/broker/src/main/java/cn/wildfirechat/push/PushMessage.java @@ -32,6 +32,7 @@ public class PushMessage { public String voipDeviceToken; public boolean isHiddenDetail; public String language; + public long messageId; public PushMessage(String sender, int conversationType, String target, int line, int messageContentType, long serverTime, String senderName, String targetName, int unReceivedMsg, int mentionedType, boolean isHiddenDetail, String language) { this.sender = sender; @@ -49,6 +50,10 @@ public class PushMessage { this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_VOIP_BYE; } else if(cntType == 401) { this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_VOIP_ANSWER; + } else if(cntType == 80) { + this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_RECALLED; + } else if(cntType == 81) { + this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_DELETED; } else { this.pushMessageType = PushServer.PushMessageType.PUSH_MESSAGE_TYPE_NORMAL; } diff --git a/broker/src/main/java/cn/wildfirechat/push/PushServer.java b/broker/src/main/java/cn/wildfirechat/push/PushServer.java index deb1f1ad..a968f69c 100644 --- a/broker/src/main/java/cn/wildfirechat/push/PushServer.java +++ b/broker/src/main/java/cn/wildfirechat/push/PushServer.java @@ -35,6 +35,8 @@ public class PushServer { int PUSH_MESSAGE_TYPE_VOIP_BYE = 2; int PUSH_MESSAGE_TYPE_FRIEND_REQUEST = 3; int PUSH_MESSAGE_TYPE_VOIP_ANSWER = 4; + int PUSH_MESSAGE_TYPE_RECALLED = 5; + int PUSH_MESSAGE_TYPE_DELETED = 6; } private static PushServer INSTANCE = new PushServer(); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index bfc865b0..37446328 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2042,7 +2042,20 @@ public class MemoryMessagesStore implements IMessagesStore { String recalledContent = json.toJSONString(); - message = message.toBuilder().setContent(WFCMessage.MessageContent.newBuilder().setContent(operatorId).setType(80).setData(ByteString.copyFrom(String.valueOf(messageUid).getBytes())).setExtra(recalledContent)).build(); + JSONObject pushData = new JSONObject(); + pushData.put("messageUid", messageUid); + + message = message.toBuilder().setContent(WFCMessage.MessageContent.newBuilder() + .setContent(operatorId) + .clearSearchableContent() + .clearPushContent() + .setPersistFlag(1) + .setExpireDuration(0) + .setMentionedType(0) + .setType(80) + .setData(ByteString.copyFrom(String.valueOf(messageUid).getBytes())) + .setPushData(pushData.toJSONString()) + .setExtra(recalledContent)).build(); messageBundle.setMessage(message); messageBundle.setFromClientId(clientId); 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 8003152f..2c8752ce 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -160,9 +160,9 @@ public class MessagesPublisher { } } - private void publish2Receivers(String sender, int conversationType, String target, int line, long messageHead, Collection receivers, String pushContent, String pushData, String exceptClientId, int pullType, int messageContentType, long serverTime, int mentionType, List mentionTargets, int persistFlag) { + 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) { if (persistFlag == Transparent) { - publishTransparentMessage2Receivers(messageHead, receivers, pullType, exceptClientId); + publishTransparentMessage2Receivers(messageId, receivers, pullType, exceptClientId); return; } @@ -174,7 +174,7 @@ public class MessagesPublisher { WFCMessage.Robot robot = m_messagesStore.getRobot(user); if (robot != null && !StringUtil.isNullOrEmpty(robot.getCallback())) { if (message == null) { - message = m_messagesStore.getMessage(messageHead); + message = m_messagesStore.getMessage(messageId); } final WFCMessage.Message finalMsg = message; Server.getServer().getCallbackScheduler().execute(() -> { @@ -191,9 +191,9 @@ public class MessagesPublisher { } long messageSeq; if (pullType != ProtoConstants.PullType.Pull_ChatRoom) { - messageSeq = m_messagesStore.insertUserMessages(sender, conversationType, target, line, messageContentType, user, messageHead); + messageSeq = m_messagesStore.insertUserMessages(sender, conversationType, target, line, messageContentType, user, messageId); } else { - messageSeq = m_messagesStore.insertChatroomMessages(user, line, messageHead); + messageSeq = m_messagesStore.insertChatroomMessages(user, line, messageId); } Collection sessions = m_sessionsStore.sessionForUser(user); @@ -389,7 +389,7 @@ public class MessagesPublisher { name = fd.getAlias(); } } - this.messageSender.sendPush(sender, conversationType, target, line, messageHead, targetSession.getClientID(), pushContent, pushData, messageContentType, serverTime, name, targetName, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); + this.messageSender.sendPush(sender, conversationType, target, line, messageId, targetSession.getClientID(), pushContent, pushData, messageContentType, serverTime, name, targetName, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); } } 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 7e638640..f8af901f 100755 --- a/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java +++ b/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java @@ -37,11 +37,12 @@ class PersistentQueueMessageSender { this.connectionDescriptorStore = connectionDescriptorStore; } - void sendPush(String sender, int conversationType, String target, int line, long messageHead, String deviceId, String pushContent, String pushData, int messageContentType, long serverTime, String senderName, String targetName, 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, int messageContentType, long serverTime, String senderName, String targetName, 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, targetName, unReceivedMsg, mentionType, isHiddenDetail, language); pushMessage.pushContent = pushContent; pushMessage.pushData = pushData; + pushMessage.messageId = messageId; PushServer.getServer().pushMessage(pushMessage, deviceId, pushContent); }