当客户端更新用户设置时,不需要再通知修改的端重新更新

This commit is contained in:
imhao183
2021-05-14 09:28:05 +08:00
parent cdc7f0893c
commit 40e9d108ad
4 changed files with 17 additions and 10 deletions
@@ -18,7 +18,7 @@ import win.liyufan.im.IMTopic;
public class PutUserSettingHandler extends IMHandler<WFCMessage.ModifyUserSettingReq> {
@Override
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyUserSettingReq request, Qos1PublishHandler.IMCallback callback) {
m_messagesStore.updateUserSettings(fromUser, request);
m_messagesStore.updateUserSettings(fromUser, request, clientID);
return ErrorCode.ERROR_CODE_SUCCESS;
}
}
@@ -2112,7 +2112,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
if (session.getPlatform() == Platform_LINUX || session.getPlatform() == Platform_Windows || session.getPlatform() == Platform_OSX) {
updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(online ? (System.currentTimeMillis() + "|" + session.getPlatform() + "|" + session.getClientID() + "|" + session.getPhoneName()) : "").build());
updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(online ? (System.currentTimeMillis() + "|" + session.getPlatform() + "|" + session.getClientID() + "|" + session.getPhoneName()) : "").build(), session.clientID);
} else {
String value = null;
for (MemorySessionStore.Session s : m_Server.getStore().sessionsStore().sessionForUser(session.username)) {
@@ -2138,11 +2138,11 @@ public class MemoryMessagesStore implements IMessagesStore {
WFCMessage.UserSettingEntry pcentry = getUserSetting(session.getUsername(), kUserSettingPCOnline, "PC");
if (value != null) {
if (pcentry == null || StringUtil.isNullOrEmpty(pcentry.getValue())) {
updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(value).build());
updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue(value).build(), session.clientID);
}
} else {
if (pcentry != null && !StringUtil.isNullOrEmpty(pcentry.getValue())) {
updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue("").build());
updateUserSettings(session.username, WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingPCOnline).setKey("PC").setValue("").build(), session.clientID);
}
}
}
@@ -3143,7 +3143,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request) {
public long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request, String clientId) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
MultiMap<String, WFCMessage.UserSettingEntry> userSettingMap = hzInstance.getMultiMap(USER_SETTING);
@@ -3183,7 +3183,7 @@ public class MemoryMessagesStore implements IMessagesStore {
} else if(request.getScope() == UserSettingScope.kUserSettingHiddenNotificationDetail) {
userPushHiddenDetail.remove(userId);
}
IMHandler.getPublisher().publishNotification(IMTopic.NotifyUserSettingTopic, userId, updateDt);
IMHandler.getPublisher().publishNotification(IMTopic.NotifyUserSettingTopic, userId, updateDt, clientId);
return updateDt;
}
@@ -190,7 +190,7 @@ public interface IMessagesStore {
ErrorCode getUserSettings(String userId, long version, WFCMessage.GetUserSettingResult.Builder builder);
WFCMessage.UserSettingEntry getUserSetting(String userId, int scope, String key);
List<WFCMessage.UserSettingEntry> getUserSetting(String userId, int scope);
long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request);
long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request, String clientId);
void clearUserSettings(String userId);
boolean getUserGlobalSilent(String userId);
@@ -465,14 +465,21 @@ public class MessagesPublisher {
publishNotification(topic, receiver, head, null, null);
}
public void publishNotification(String topic, String receiver, long head, String fromUser, String pushContent) {
publishNotificationLocal(topic, receiver, head, fromUser, pushContent);
public void publishNotification(String topic, String receiver, long head, String exceptClientId) {
publishNotification(topic, receiver, head, null, null, exceptClientId);
}
void publishNotificationLocal(String topic, String receiver, long head, String fromUser, String pushContent) {
public void publishNotification(String topic, String receiver, long head, String fromUser, String pushContent) {
publishNotification(topic, receiver, head, fromUser, pushContent, null);
}
public void publishNotification(String topic, String receiver, long head, String fromUser, String pushContent, String exceptClientId) {
Collection<Session> sessions = m_sessionsStore.sessionForUser(receiver);
String fromUserName = null;
for (Session targetSession : sessions) {
if(targetSession.getClientID().equals(exceptClientId)) {
continue;
}
boolean needPush = !StringUtil.isNullOrEmpty(pushContent);
boolean targetIsActive = this.connectionDescriptors.isConnected(targetSession.getClientSession().clientID);
if (targetIsActive) {