diff --git a/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java b/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java index a24fbd55..f9cb30ac 100644 --- a/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java @@ -14,10 +14,18 @@ import io.netty.buffer.ByteBuf; import cn.wildfirechat.common.ErrorCode; import win.liyufan.im.IMTopic; +import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; + @Handler(IMTopic.DeleteFriendTopic) public class DeleteFriendHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { - return m_messagesStore.deleteFriend(fromUser, request.getId()); + long[] head = new long[2]; + ErrorCode errorCode = m_messagesStore.deleteFriend(fromUser, request.getId(), head); + if (errorCode == ERROR_CODE_SUCCESS) { + publisher.publishNotification(IMTopic.NotifyFriendTopic, fromUser, head[0]); + publisher.publishNotification(IMTopic.NotifyFriendTopic, request.getId(), head[1]); + } + 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 b8f0d0ea..a9c25122 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1829,7 +1829,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public ErrorCode deleteFriend(String userId, String friendUid) { + public ErrorCode deleteFriend(String userId, String friendUid, long[] head) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); Collection user1Friends = friendsMap.get(userId); @@ -1839,8 +1839,10 @@ public class MemoryMessagesStore implements IMessagesStore { for (FriendData data : user1Friends) { if (data.getFriendUid().equals(friendUid)) { + long ts = System.currentTimeMillis(); + head[0] = ts; data.setState(1); - data.setTimestamp(System.currentTimeMillis()); + data.setTimestamp(ts); databaseStore.persistOrUpdateFriendData(data); break; } @@ -1854,7 +1856,9 @@ public class MemoryMessagesStore implements IMessagesStore { user2Friends) { if (data.getFriendUid().equals(userId)) { data.setState(1); - data.setTimestamp(System.currentTimeMillis()); + long ts = System.currentTimeMillis(); + head[1] = ts; + data.setTimestamp(ts); databaseStore.persistOrUpdateFriendData(data); break; } diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 46d1f62c..253743e9 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -154,7 +154,7 @@ public interface IMessagesStore { ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head); ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin); - ErrorCode deleteFriend(String userId, String friendUid); + ErrorCode deleteFriend(String userId, String friendUid, long[] head); ErrorCode blackUserRequest(String fromUser, String targetUserId, int status, long[] head); ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[] head); boolean isBlacked(String fromUser, String userId);