添加踢用户下线api接口

This commit is contained in:
imhao183
2021-01-22 10:23:33 +08:00
parent 2c9e8d66e8
commit 5f7df37664
6 changed files with 130 additions and 0 deletions
@@ -0,0 +1,52 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
package com.xiaoleilu.loServer.action.admin;
import cn.wildfirechat.common.APIPath;
import cn.wildfirechat.common.ErrorCode;
import cn.wildfirechat.pojos.InputOutputUserBlockStatus;
import cn.wildfirechat.pojos.StringPairPojo;
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;
import com.xiaoleilu.loServer.handler.Response;
import io.moquette.persistence.RPCCenter;
import io.moquette.persistence.TargetEntry;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
@Route(APIPath.User_Kickoff_Client)
@HttpMethod("POST")
public class KickoffUserClientAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
StringPairPojo pojo = getRequestBody(request.getNettyRequest(), StringPairPojo.class);
if (pojo != null && !StringUtil.isNullOrEmpty(pojo.getFirst())) {
sessionsStore.kickoffUserClient(pojo.getFirst(), pojo.getSecond());
sendResponse(response, ErrorCode.ERROR_CODE_SUCCESS, null);
} else {
response.setStatus(HttpResponseStatus.OK);
RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER);
response.setContent(new Gson().toJson(result));
}
}
return true;
}
}
@@ -419,6 +419,34 @@ public class MemorySessionStore implements ISessionsStore {
return session;
}
@Override
public void kickoffUserClient(String username, String cid) {
List<String> clientIds = new ArrayList<>();
if(StringUtil.isNullOrEmpty(cid)) {
ConcurrentSkipListSet<String> sessionSet = getUserSessionSet(username);
clientIds.addAll(sessionSet);
} else {
clientIds.add(cid);
}
for (String clientID: clientIds) {
Session session = sessions.get(clientID);
if(session == null) {
ClientSession clientSession = new ClientSession(clientID, this);
session = databaseStore.getSession(username, clientID, clientSession);
if (session == null || session.getDeleted() > 0) {
continue;
}
sessions.put(clientID, session);
}
if (session.getDeleted() == 0) {
session.setDeleted(1);
databaseStore.updateSessionDeleted(username, clientID, 1);
mServer.getProcessor().kickoffSession(session);
}
}
}
@Override
public ErrorCode loadActiveSession(String username, String clientID) {
@@ -51,6 +51,8 @@ public interface ISessionsStore {
void updateSessionToken(Session session, boolean voip);
void clearUserSession(String username);
void kickoffUserClient(String userId, String clientId);
/**
* @param clientID
* the client owning the session.