diff --git a/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java index 7a4b6498..98e9d71f 100644 --- a/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java @@ -21,13 +21,12 @@ import java.util.Set; public class RecallMessageHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.INT64Buf int64Buf, Qos1PublishHandler.IMCallback callback) { - ErrorCode errorCode = m_messagesStore.recallMessage(int64Buf.getId(), fromUser, isAdmin); + ErrorCode errorCode = m_messagesStore.recallMessage(int64Buf.getId(), fromUser, clientID, isAdmin); if(errorCode != ErrorCode.ERROR_CODE_SUCCESS) { return errorCode; } - Set notifyReceivers = new LinkedHashSet<>(); WFCMessage.Message message = m_messagesStore.getMessage(int64Buf.getId()); if (message == null) { return ErrorCode.ERROR_CODE_NOT_EXIST; @@ -35,11 +34,6 @@ public class RecallMessageHandler extends IMHandler { publish(fromUser, clientID, message); - - //等待客户端实现根据撤回消息更新内容,之后可以删掉这段代码 - m_messagesStore.getNotifyReceivers(fromUser, message.toBuilder(), notifyReceivers, false); - this.publisher.publishRecall2Receivers(int64Buf.getId(), fromUser, notifyReceivers, clientID); - return errorCode; } diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 9ad1cbb1..189e8f7b 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1370,7 +1370,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public ErrorCode recallMessage(long messageUid, String operatorId, boolean isAdmin) { + public ErrorCode recallMessage(long messageUid, String operatorId, String clientId, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(MESSAGES_MAP); @@ -1421,8 +1421,14 @@ public class MemoryMessagesStore implements IMessagesStore { return ErrorCode.ERROR_CODE_NOT_RIGHT; } - message = message.toBuilder().setContent(message.getContent().toBuilder().setContent(operatorId).setType(80).clearSearchableContent().setData(ByteString.copyFrom(new StringBuffer().append(messageUid).toString().getBytes())).build()).build(); + String searchContent = message.getContent().getSearchableContent() == null ? "" : message.getContent().getSearchableContent(); + String cont = message.getContent().getContent() == null ? "" : message.getContent().getContent(); + String extra = message.getContent().getExtra() == null ? "" : message.getContent().getExtra(); + String recalledContent = "{\"s\":\"" + message.getFromUser() + "\",\"ts\":" + message.getServerTimestamp() + ",\"t\":" + message.getContent().getType() + ",\"sc\":\"" + searchContent + "\",\"c\":\"" + cont + "\",\"e\":\"" + extra + "\"}"; + + message = message.toBuilder().setContent(message.getContent().toBuilder().setContent(operatorId).setType(80).clearSearchableContent().setData(ByteString.copyFrom(String.valueOf(messageUid).getBytes())).setExtra(recalledContent).build()).build(); messageBundle.setMessage(message); + messageBundle.setFromClientId(clientId); databaseStore.deleteMessage(messageUid); diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 4e9c98d2..2a2f1a0a 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -122,7 +122,7 @@ public interface IMessagesStore { boolean isMemberInGroup(String member, String groupId); ErrorCode canSendMessageInGroup(String member, String groupId); - ErrorCode recallMessage(long messageUid, String operatorId, boolean isAdmin); + ErrorCode recallMessage(long messageUid, String operatorId, String clientId, boolean isAdmin); void clearUserMessages(String userId); diff --git a/broker/src/main/java/win/liyufan/im/MessageBundle.java b/broker/src/main/java/win/liyufan/im/MessageBundle.java index fc962195..fefeb61f 100755 --- a/broker/src/main/java/win/liyufan/im/MessageBundle.java +++ b/broker/src/main/java/win/liyufan/im/MessageBundle.java @@ -64,6 +64,10 @@ public class MessageBundle implements Serializable { return message; } + public void setFromClientId(String fromClientId) { + this.fromClientId = fromClientId; + } + public void setMessage(WFCMessage.Message message) { this.fromUser = message.getFromUser(); this.type = message.getConversation().getType();