获取用户状态接口
This commit is contained in:
+34
-3
@@ -9,6 +9,10 @@
|
||||
package com.xiaoleilu.loServer.action.admin;
|
||||
|
||||
import cn.wildfirechat.common.APIPath;
|
||||
import cn.wildfirechat.pojos.BroadMessageResult;
|
||||
import cn.wildfirechat.pojos.OutputCheckUserOnline;
|
||||
import com.google.gson.Gson;
|
||||
import com.xiaoleilu.loServer.RestResult;
|
||||
import com.xiaoleilu.loServer.annotation.HttpMethod;
|
||||
import com.xiaoleilu.loServer.annotation.Route;
|
||||
import com.xiaoleilu.loServer.handler.Request;
|
||||
@@ -16,10 +20,15 @@ import com.xiaoleilu.loServer.handler.Response;
|
||||
import cn.wildfirechat.pojos.InputGetUserInfo;
|
||||
import io.moquette.persistence.RPCCenter;
|
||||
import io.moquette.persistence.TargetEntry;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.handler.codec.http.FullHttpRequest;
|
||||
import io.netty.handler.codec.http.HttpResponseStatus;
|
||||
import io.netty.util.internal.StringUtil;
|
||||
import cn.wildfirechat.common.ErrorCode;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
@Route(APIPath.User_Get_Online_Status)
|
||||
@HttpMethod("POST")
|
||||
public class CheckUserOnlineAction extends AdminAction {
|
||||
@@ -34,12 +43,34 @@ public class CheckUserOnlineAction extends AdminAction {
|
||||
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||
InputGetUserInfo inputUserId = getRequestBody(request.getNettyRequest(), InputGetUserInfo.class);
|
||||
if (inputUserId == null || !StringUtil.isNullOrEmpty(inputUserId.getUserId())) {
|
||||
RPCCenter.getInstance().sendRequest(null, null, RPCCenter.CHECK_USER_ONLINE_REQUEST, inputUserId.getUserId().getBytes(), inputUserId.getUserId(), TargetEntry.Type.TARGET_TYPE_USER, null, true);
|
||||
return true;
|
||||
RPCCenter.getInstance().sendRequest(null, null, RPCCenter.CHECK_USER_ONLINE_REQUEST, inputUserId.getUserId().getBytes(), inputUserId.getUserId(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() {
|
||||
@Override
|
||||
public void onSuccess(byte[] res) {
|
||||
OutputCheckUserOnline out = new Gson().fromJson(new String(res), OutputCheckUserOnline.class);
|
||||
sendResponse(response, null, out);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorCode errorCode) {
|
||||
sendResponse(response, errorCode, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeout() {
|
||||
sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Executor getResponseExecutor() {
|
||||
return command -> {
|
||||
ctx.executor().execute(command);
|
||||
};
|
||||
}
|
||||
}, true);
|
||||
return false;
|
||||
} else {
|
||||
sendResponse(response, ErrorCode.INVALID_PARAMETER, null);
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -128,23 +128,25 @@ public class Qos1PublishHandler extends QosPublishHandler {
|
||||
String userId = new String(payloadContent);
|
||||
|
||||
int status;
|
||||
ClientSession clientSession = m_sessionStore.sessionForClient(userId);
|
||||
if (clientSession == null) {
|
||||
status = 2;
|
||||
} else {
|
||||
ConnectionDescriptor descriptor = connectionDescriptors.getConnection(clientSession.clientID);
|
||||
Collection<MemorySessionStore.Session> useSessions = m_sessionStore.sessionForUser(userId);
|
||||
OutputCheckUserOnline out = new OutputCheckUserOnline();
|
||||
|
||||
for (MemorySessionStore.Session session : useSessions) {
|
||||
if (session.getDeleted() > 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ConnectionDescriptor descriptor = connectionDescriptors.getConnection(session.getClientID());
|
||||
if (descriptor == null) {
|
||||
status = 1;
|
||||
} else {
|
||||
status = 0;
|
||||
}
|
||||
|
||||
out.addSession(userId, session.getClientID(), session.getPlatform(), status, session.getLastActiveTime());
|
||||
}
|
||||
|
||||
OutputCheckUserOnline out = new OutputCheckUserOnline();
|
||||
out.setStatus(status);
|
||||
RestResult result = RestResult.ok(out);
|
||||
|
||||
callback.onRouteHandled(new Gson().toJson(result).getBytes());
|
||||
callback.onRouteHandled(new Gson().toJson(out).getBytes());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -8,14 +8,39 @@
|
||||
|
||||
package cn.wildfirechat.pojos;
|
||||
|
||||
public class OutputCheckUserOnline {
|
||||
private int status; //0 online, 1 have session offline, 2 no session
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
public class OutputCheckUserOnline {
|
||||
public static class Session {
|
||||
public String clientId;
|
||||
public String userId;
|
||||
public int platform;
|
||||
public int status; //0 online, 1 have session offline
|
||||
public long lastSeen;
|
||||
|
||||
public Session(String clientId, String userId, int platform, int status, long lastSeen) {
|
||||
this.clientId = clientId;
|
||||
this.userId = userId;
|
||||
this.platform = platform;
|
||||
this.status = status;
|
||||
this.lastSeen = lastSeen;
|
||||
}
|
||||
}
|
||||
|
||||
public void setStatus(int status) {
|
||||
this.status = status;
|
||||
public void addSession(String userId, String clientId, int platform, int status, long lastSeen) {
|
||||
Session session = new Session(clientId, userId, platform, status, lastSeen);
|
||||
sessions.add(session);
|
||||
}
|
||||
|
||||
private List<Session> sessions = new ArrayList<>();
|
||||
|
||||
public List<Session> getSessions() {
|
||||
return sessions;
|
||||
}
|
||||
|
||||
public void setSessions(List<Session> sessions) {
|
||||
this.sessions = sessions;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,6 +190,14 @@ public class Main {
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
IMResult<OutputCheckUserOnline> outputCheckUserOnline = UserAdmin.checkUserOnlineStatus(userInfo.getUserId());
|
||||
if (outputCheckUserOnline != null && outputCheckUserOnline.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("check user online status success:" + outputCheckUserOnline.getResult().getSessions().size());
|
||||
} else {
|
||||
System.out.println("block user online failure");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
//慎用,这个方法可能功能不完全,如果用户不在需要,建议使用block功能屏蔽用户
|
||||
IMResult<Void> voidIMResult = UserAdmin.destroyUser("user11");
|
||||
if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
|
||||
@@ -58,6 +58,12 @@ public class UserAdmin {
|
||||
return AdminHttpUtils.httpJsonPost(path, null, OutputUserBlockStatusList.class);
|
||||
}
|
||||
|
||||
public static IMResult<OutputCheckUserOnline> checkUserOnlineStatus(String userId) throws Exception {
|
||||
String path = APIPath.User_Get_Online_Status;
|
||||
InputGetUserInfo getUserInfo = new InputGetUserInfo(userId, null, null);
|
||||
return AdminHttpUtils.httpJsonPost(path, getUserInfo, OutputCheckUserOnline.class);
|
||||
}
|
||||
|
||||
public static IMResult<Void> destroyUser(String userId) throws Exception {
|
||||
String path = APIPath.Destroy_User;
|
||||
InputDestroyUser inputDestroyUser = new InputDestroyUser();
|
||||
|
||||
Reference in New Issue
Block a user