diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserGroupsByTypeAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserGroupsByTypeAction.java new file mode 100755 index 00000000..0d5fdb34 --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserGroupsByTypeAction.java @@ -0,0 +1,55 @@ +/* + * This file is part of the Wildfire Chat package. + * (c) Heavyrain2012 + * + * 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.InputGetUserGroupByType; +import cn.wildfirechat.pojos.InputUserId; +import cn.wildfirechat.pojos.OutputGroupIds; +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.netty.handler.codec.http.FullHttpRequest; +import io.netty.util.internal.StringUtil; + +import java.util.ArrayList; +import java.util.Set; + +@Route(APIPath.Get_User_Groups_By_Type) +@HttpMethod("POST") +public class GetUserGroupsByTypeAction extends AdminAction { + + @Override + public boolean isTransactionAction() { + return true; + } + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputGetUserGroupByType input = getRequestBody(request.getNettyRequest(), InputGetUserGroupByType.class); + if (input != null + && (!StringUtil.isNullOrEmpty(input.getUserId()))) { + + Set groupIds = messagesStore.getUserGroupIds(input.getUserId(), input.getGroupMemberTypes()); + OutputGroupIds outputGroupIds = new OutputGroupIds(); + outputGroupIds.setGroupIds(new ArrayList<>(groupIds)); + RestResult result = RestResult.ok(outputGroupIds); + setResponseContent(result, response); + } else { + setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response); + } + + } + return true; + } +} diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index ec1606b7..481ccbf5 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -1845,6 +1845,45 @@ public class DatabaseStore { return null; } + Set getUserGroupIds(String userId, List memberTypes) { + Connection connection = null; + PreparedStatement statement = null; + ResultSet rs = null; + try { + connection = DBUtil.getConnection(); + String sql = "select _gid from t_group_member where _mid = ? "; + if(!memberTypes.isEmpty()) { + sql += " and _type in ("; + for (int i = 0; i < memberTypes.size(); i++) { + if(i > 0) { + sql += ","; + } + sql += memberTypes.get(i); + } + sql += ")"; + } + statement = connection.prepareStatement(sql); + + statement.setString(1, userId); + + rs = statement.executeQuery(); + Set out = new HashSet<>(); + while (rs.next()) { + String uid = rs.getString(1); + out.add(uid); + } + return out; + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + Utility.printExecption(LOG, e, RDBS_Exception); + } finally { + DBUtil.closeDB(connection, statement, rs); + } + return null; + } + + Set getCommonGroupIds(String userId1, String userId2) { Connection connection = null; PreparedStatement statement = null; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index c74d9d7a..1c521b16 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1944,6 +1944,11 @@ public class MemoryMessagesStore implements IMessagesStore { return databaseStore.getUserGroupIds(userId); } + @Override + public Set getUserGroupIds(String userId, List memberTypes) { + return databaseStore.getUserGroupIds(userId, memberTypes); + } + @Override public Set getCommonGroupIds(String userId1, String userId2) { return databaseStore.getCommonGroupIds(userId1, userId2); diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index f7400984..f6d999bf 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -119,6 +119,7 @@ public interface IMessagesStore { List getGroupInfos(List requests, String fromUser, boolean isAdmin); WFCMessage.GroupInfo getGroupInfo(String groupId); Set getUserGroupIds(String userId); + Set getUserGroupIds(String userId, List types); Set getCommonGroupIds(String userId1, String userId2); ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List members); WFCMessage.GroupMember getGroupMember(String groupId, String memberId); diff --git a/common/src/main/java/cn/wildfirechat/common/APIPath.java b/common/src/main/java/cn/wildfirechat/common/APIPath.java index b941f8a6..a349b289 100644 --- a/common/src/main/java/cn/wildfirechat/common/APIPath.java +++ b/common/src/main/java/cn/wildfirechat/common/APIPath.java @@ -77,6 +77,7 @@ public interface APIPath { String Group_Mute_Member = "/admin/group/manager/mute"; String Group_Allow_Member = "/admin/group/manager/allow"; String Get_User_Groups = "/admin/group/of_user"; + String Get_User_Groups_By_Type = "/admin/group/of_user_by_type"; String Group_Set_Member_Alias = "/admin/group/member/set_alias"; String Group_Set_Member_Extra = "/admin/group/member/set_extra"; String Get_Common_Groups = "/admin/group/common_group"; diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputGetUserGroupByType.java b/common/src/main/java/cn/wildfirechat/pojos/InputGetUserGroupByType.java new file mode 100755 index 00000000..e59eb1a4 --- /dev/null +++ b/common/src/main/java/cn/wildfirechat/pojos/InputGetUserGroupByType.java @@ -0,0 +1,40 @@ +/* + * This file is part of the Wildfire Chat package. + * (c) Heavyrain2012 + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +package cn.wildfirechat.pojos; + +import java.util.List; + +public class InputGetUserGroupByType { + private String userId; + private List groupMemberTypes; + + public InputGetUserGroupByType() { + } + + public InputGetUserGroupByType(String userId, List groupMemberTypes) { + this.userId = userId; + this.groupMemberTypes = groupMemberTypes; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public List getGroupMemberTypes() { + return groupMemberTypes; + } + + public void setGroupMemberTypes(List groupMemberTypes) { + this.groupMemberTypes = groupMemberTypes; + } +} diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java index 2ec2a2fb..72469cf7 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java @@ -2,6 +2,7 @@ package cn.wildfirechat.sdk; import cn.wildfirechat.common.APIPath; import cn.wildfirechat.pojos.*; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; @@ -178,6 +179,12 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputGroupIds.class); } + public static IMResult getUserGroupsByType(String user, List groupMemberType) throws Exception { + String path = APIPath.Get_User_Groups_By_Type; + InputGetUserGroupByType input = new InputGetUserGroupByType(user, groupMemberType); + return AdminHttpUtils.httpJsonPost(path, input, OutputGroupIds.class); + } + public static IMResult getCommonGroups(String user1, String user2) throws Exception { String path = APIPath.Get_Common_Groups; StringPairPojo intput = new StringPairPojo(user1, user2); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index 8c638ae5..cf910910 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -388,7 +388,6 @@ public class Main { System.out.println("success"); } else { System.out.println("send friend request success"); - System.exit(-1); } IMResult updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", true, "{\"from\":1}"); @@ -657,6 +656,14 @@ public class Main { System.exit(-1); } + groupIdsIMResult = GroupAdmin.getUserGroupsByType("user2", Arrays.asList(ProtoConstants.GroupMemberType.GroupMemberType_Manager, ProtoConstants.GroupMemberType.GroupMemberType_Owner)); + if (groupIdsIMResult != null && groupIdsIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { + System.out.println("get user groups by type success"); + } else { + System.out.println("get user groups by type failure"); + System.exit(-1); + } + groupIdsIMResult = GroupAdmin.getCommonGroups("user1", "user2"); if (groupIdsIMResult != null && groupIdsIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get user common groups success");