添加获取用户聊天室状态的API

This commit is contained in:
heavyrian2012
2023-11-17 09:06:00 +08:00
parent 63f0fc66ce
commit 724be0b273
7 changed files with 117 additions and 1 deletions
@@ -0,0 +1,61 @@
/*
* 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.InputGetChatroomInfo;
import cn.wildfirechat.pojos.InputUserId;
import cn.wildfirechat.pojos.OutputStringList;
import cn.wildfirechat.pojos.OutputUserChatroom;
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.UserClientEntry;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.util.internal.StringUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Route(APIPath.Chatroom_GetUserChatroom)
@HttpMethod("POST")
public class GetUserChatroomAction extends AdminAction {
@Override
public boolean isTransactionAction() {
return true;
}
@Override
public boolean action(Request request, Response response) {
if (request.getNettyRequest() instanceof FullHttpRequest) {
InputUserId inputUserId = getRequestBody(request.getNettyRequest(), InputUserId.class);
String userId = inputUserId.getUserId();
if (!StringUtil.isNullOrEmpty(userId)) {
OutputUserChatroom outputUserChatroom = messagesStore.getUserChatroom(userId);
RestResult result;
if (outputUserChatroom != null) {
result = RestResult.ok(outputUserChatroom);
} else {
result = RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST);
}
setResponseContent(result, response);
} else {
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
}
}
return true;
}
}
@@ -933,7 +933,29 @@ public class MemoryMessagesStore implements IMessagesStore {
Collection<UserClientEntry> members = chatroomMembers.get(chatroomId);
return members;
}
//Todo chatroom
@Override
public OutputUserChatroom getUserChatroom(String userId) {
String chatroomId = (String) m_Server.getHazelcastInstance().getMap(USER_CHATROOM).get(userId);
if(chatroomId != null) {
MultiMap<String, UserClientEntry> chatroomMembers = m_Server.getHazelcastInstance().getMultiMap(CHATROOM_MEMBER_IDS);
for (UserClientEntry userClientEntry : chatroomMembers.get(chatroomId)) {
if(userClientEntry.userId.equals(userId)) {
OutputUserChatroom outputUserChatroom = new OutputUserChatroom();
outputUserChatroom.userId = userId;
outputUserChatroom.chatroomId = chatroomId;
outputUserChatroom.clientId = userClientEntry.clientId;
MemorySessionStore.Session session = m_Server.getStore().sessionsStore().getSession(userClientEntry.clientId);
if(session != null) {
outputUserChatroom.platform = session.getPlatform();
}
return outputUserChatroom;
}
}
}
return null;
}
@Override
public WFCMessage.PullMessageResult fetchChatroomMessage(String fromUser, String chatroomId, String exceptClientId, long fromMessageId) {
WFCMessage.PullMessageResult.Builder builder = WFCMessage.PullMessageResult.newBuilder();
@@ -17,6 +17,7 @@
package io.moquette.spi;
import cn.wildfirechat.pojos.InputOutputUserInfo;
import cn.wildfirechat.pojos.OutputUserChatroom;
import cn.wildfirechat.pojos.SystemSettingPojo;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
@@ -173,6 +174,7 @@ public interface IMessagesStore {
long insertChatroomMessages(String target, int line, long messageId);
Collection<UserClientEntry> getChatroomMembers(String chatroomId);
OutputUserChatroom getUserChatroom(String userId);
WFCMessage.PullMessageResult fetchChatroomMessage(String fromUser, String chatroomId, String exceptClientId, long fromMessageId);
ErrorCode verifyToken(String userId, String token, List<String> serverIPs, List<Integer> ports);