在线状态回调添加其他端的状态

This commit is contained in:
heavyrian2012
2024-03-23 12:32:45 +08:00
parent 0a05503c78
commit 37f1772705
4 changed files with 36 additions and 5 deletions
@@ -17,6 +17,7 @@
package io.moquette.spi.impl; package io.moquette.spi.impl;
import cn.wildfirechat.common.ErrorCode; import cn.wildfirechat.common.ErrorCode;
import cn.wildfirechat.pojos.OutputCheckUserOnline;
import cn.wildfirechat.pojos.UserOnlineStatus; import cn.wildfirechat.pojos.UserOnlineStatus;
import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.proto.WFCMessage;
@@ -266,7 +267,27 @@ public class ProtocolProcessor {
if (!StringUtil.isNullOrEmpty(mUserOnlineStatusCallback)) { if (!StringUtil.isNullOrEmpty(mUserOnlineStatusCallback)) {
mServer.getCallbackScheduler().execute(() -> { mServer.getCallbackScheduler().execute(() -> {
try { try {
HttpUtils.httpJsonPost(mUserOnlineStatusCallback, GsonUtil.gson.toJson(new UserOnlineStatus(userId, clientId, platform, status, packageName)), HttpUtils.HttpPostType.POST_TYPE_User_Online_Event_Callback); int sessionstatus;
Collection<MemorySessionStore.Session> useSessions = m_sessionsStore.sessionForUser(userId);
UserOnlineStatus userOnlineStatus = new UserOnlineStatus(userId, clientId, platform, status, packageName);
userOnlineStatus.sessions = new ArrayList<>();
for (MemorySessionStore.Session session : useSessions) {
if (session.getDeleted() > 0) {
continue;
}
ConnectionDescriptor descriptor = connectionDescriptors.getConnection(session.getClientID());
if (descriptor == null) {
sessionstatus = 1;
} else {
sessionstatus = 0;
}
userOnlineStatus.sessions.add(new OutputCheckUserOnline.Session(userId, session.getClientID(), session.getPlatform(), sessionstatus, session.getLastActiveTime(), session.getAppName()));
}
HttpUtils.httpJsonPost(mUserOnlineStatusCallback, GsonUtil.gson.toJson(userOnlineStatus), HttpUtils.HttpPostType.POST_TYPE_User_Online_Event_Callback);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception);
@@ -141,7 +141,7 @@ public class Qos1PublishHandler extends QosPublishHandler {
status = 0; status = 0;
} }
out.addSession(userId, session.getClientID(), session.getPlatform(), status, session.getLastActiveTime()); out.addSession(userId, session.getClientID(), session.getPlatform(), status, session.getLastActiveTime(), session.getAppName());
} }
callback.onRouteHandled(GsonUtil.gson.toJson(out).getBytes()); callback.onRouteHandled(GsonUtil.gson.toJson(out).getBytes());
@@ -19,18 +19,23 @@ public class OutputCheckUserOnline {
public int platform; public int platform;
public int status; //0 online, 1 have session offline public int status; //0 online, 1 have session offline
public long lastSeen; public long lastSeen;
public String packageName;
public Session(String clientId, String userId, int platform, int status, long lastSeen) { public Session() {
}
public Session(String clientId, String userId, int platform, int status, long lastSeen, String packageName) {
this.clientId = clientId; this.clientId = clientId;
this.userId = userId; this.userId = userId;
this.platform = platform; this.platform = platform;
this.status = status; this.status = status;
this.lastSeen = lastSeen; this.lastSeen = lastSeen;
this.packageName = packageName;
} }
} }
public void addSession(String userId, String clientId, int platform, int status, long lastSeen) { public void addSession(String userId, String clientId, int platform, int status, long lastSeen, String packageName) {
Session session = new Session(clientId, userId, platform, status, lastSeen); Session session = new Session(clientId, userId, platform, status, lastSeen, packageName);
sessions.add(session); sessions.add(session);
} }
@@ -1,5 +1,7 @@
package cn.wildfirechat.pojos; package cn.wildfirechat.pojos;
import java.util.List;
public class UserOnlineStatus { public class UserOnlineStatus {
public static final int ONLINE = 0; public static final int ONLINE = 0;
public static final int OFFLINE = 1; public static final int OFFLINE = 1;
@@ -11,6 +13,9 @@ public class UserOnlineStatus {
public int status; public int status;
public long timestamp; public long timestamp;
public String packageName; public String packageName;
public int customState;
public String customText;
public List<OutputCheckUserOnline.Session> sessions;
public UserOnlineStatus() { public UserOnlineStatus() {
} }