diff --git a/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java b/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java index 650425241..51c808841 100644 --- a/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java +++ b/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java @@ -43,7 +43,7 @@ public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, Pr if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { - WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, getMemberIdList(request.getAddedMemberList())).getAddGroupNotifyContent(); + WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, getMemberIdList(request.getAddedMemberList())).setExtra(request.getExtra()).getAddGroupNotifyContent(); sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), content); } } diff --git a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java index a4e5ecf8d..5d98e639b 100644 --- a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java @@ -63,7 +63,7 @@ public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, Pr if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent()); } else { - WFCMessage.MessageContent content = new GroupNotificationBinaryContent(groupInfo.getTargetId(), fromUser, groupInfo.getName(), "").getCreateGroupNotifyContent(); + WFCMessage.MessageContent content = new GroupNotificationBinaryContent(groupInfo.getTargetId(), fromUser, groupInfo.getName(), "").setExtra(request.getMemberExtra()).getCreateGroupNotifyContent(); sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), content); } } diff --git a/common/src/main/java/cn/wildfirechat/pojos/GroupNotificationBinaryContent.java b/common/src/main/java/cn/wildfirechat/pojos/GroupNotificationBinaryContent.java index a5e7e6fc5..7d9d1f9bb 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/GroupNotificationBinaryContent.java +++ b/common/src/main/java/cn/wildfirechat/pojos/GroupNotificationBinaryContent.java @@ -13,6 +13,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.protobuf.ByteString; +import io.netty.util.internal.StringUtil; import java.util.List; @@ -32,6 +33,8 @@ public class GroupNotificationBinaryContent { //value2(member or something) private String m; + private String extra; + public GroupNotificationBinaryContent() { } @@ -89,8 +92,18 @@ public void setMs(List ms) { this.ms = ms; } + public GroupNotificationBinaryContent setExtra(String extra) { + this.extra = extra; + return this; + } + public WFCMessage.MessageContent getGroupNotifyContent(int groupContentType) { - return WFCMessage.MessageContent.newBuilder().setType(groupContentType).setData(ByteString.copyFromUtf8(new GsonBuilder().disableHtmlEscaping().create().toJson(this))).build(); + WFCMessage.MessageContent.Builder builder = WFCMessage.MessageContent.newBuilder().setType(groupContentType).setData(ByteString.copyFromUtf8(new GsonBuilder().disableHtmlEscaping().create().toJson(this))); + if(!StringUtil.isNullOrEmpty(extra)) { + builder.setExtra(extra); + } + return builder.build(); + } public WFCMessage.MessageContent getAddGroupNotifyContent() { diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java b/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java index 4b39f262a..92202ef01 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java @@ -17,6 +17,7 @@ public class InputAddGroupMember extends InputGroupBase { private String group_id; private List members; + private String member_extra; public String getGroup_id() { return group_id; @@ -34,6 +35,14 @@ public void setMembers(List members) { this.members = members; } + public String getMember_extra() { + return member_extra; + } + + public void setMemberExtra(String extra) { + this.member_extra = extra; + } + public boolean isValide() { return true; } @@ -41,6 +50,9 @@ public boolean isValide() { public WFCMessage.AddGroupMemberRequest toProtoGroupRequest() { WFCMessage.AddGroupMemberRequest.Builder addGroupBuilder = WFCMessage.AddGroupMemberRequest.newBuilder(); addGroupBuilder.setGroupId(group_id); + if(!StringUtil.isNullOrEmpty(member_extra)) { + addGroupBuilder.setExtra(member_extra); + } for (PojoGroupMember pojoGroupMember : getMembers()) { WFCMessage.GroupMember.Builder groupMemberBuilder = WFCMessage.GroupMember.newBuilder().setMemberId(pojoGroupMember.getMember_id()); if (!StringUtil.isNullOrEmpty(pojoGroupMember.getAlias())) { diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java b/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java index 4c6697489..39cae453a 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java @@ -16,6 +16,7 @@ public class InputCreateGroup extends InputGroupBase { private PojoGroup group; + private String member_extra; public boolean isValide() { return true; @@ -87,6 +88,9 @@ public WFCMessage.CreateGroupRequest toProtoGroupRequest() { WFCMessage.CreateGroupRequest.Builder createGroupReqBuilder = WFCMessage.CreateGroupRequest.newBuilder(); createGroupReqBuilder.setGroup(groupBuilder); + if(!StringUtil.isNullOrEmpty(member_extra)) { + createGroupReqBuilder.setMemberExtra(member_extra); + } if (to_lines != null) { for (Integer line : to_lines ) { @@ -107,4 +111,12 @@ public PojoGroup getGroup() { public void setGroup(PojoGroup group) { this.group = group; } + + public String getMember_extra() { + return member_extra; + } + + public void setMember_extra(String member_extra) { + this.member_extra = member_extra; + } } diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java index 35d1205b9..decb8a4de 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java @@ -2,14 +2,13 @@ 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; import java.util.List; public class GroupAdmin { - public static IMResult createGroup(String operator, PojoGroupInfo group_info, List members, List to_lines, MessagePayload notify_message) throws Exception { + public static IMResult createGroup(String operator, PojoGroupInfo group_info, List members, String member_extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Create_Group; PojoGroup pojoGroup = new PojoGroup(); pojoGroup.setGroup_info(group_info); @@ -17,6 +16,7 @@ public static IMResult createGroup(String operator, Poj InputCreateGroup createGroup = new InputCreateGroup(); createGroup.setGroup(pojoGroup); createGroup.setOperator(operator); + createGroup.setMember_extra(member_extra); createGroup.setTo_lines(to_lines); createGroup.setNotify_message(notify_message); @@ -85,12 +85,13 @@ public static IMResult getGroupMember(String groupId, String me return AdminHttpUtils.httpJsonPost(path, input, PojoGroupMember.class); } - public static IMResult addGroupMembers(String operator, String groupId, List groupMembers, List to_lines, MessagePayload notify_message) throws Exception { + public static IMResult addGroupMembers(String operator, String groupId, List groupMembers, String member_extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Add; InputAddGroupMember addGroupMember = new InputAddGroupMember(); addGroupMember.setGroup_id(groupId); addGroupMember.setMembers(groupMembers); addGroupMember.setOperator(operator); + addGroupMember.setMemberExtra(member_extra); addGroupMember.setTo_lines(to_lines); addGroupMember.setNotify_message(notify_message); return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index 743de5b11..a0f7778c7 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -503,7 +503,7 @@ static void testGroup() throws Exception { member3.setMember_id("user3"); members.add(member3); - IMResult resultCreateGroup = GroupAdmin.createGroup(groupInfo.getOwner(), groupInfo, members, null, null); + IMResult resultCreateGroup = GroupAdmin.createGroup(groupInfo.getOwner(), groupInfo, members, null, null, null); if (resultCreateGroup != null && resultCreateGroup.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("create group success"); } else { @@ -575,7 +575,7 @@ static void testGroup() throws Exception { m.setMember_id("user1"); m.setAlias("hello user1"); - voidIMResult = GroupAdmin.addGroupMembers("user1", groupInfo.getTarget_id(), Arrays.asList(m), null, null); + voidIMResult = GroupAdmin.addGroupMembers("user1", groupInfo.getTarget_id(), Arrays.asList(m), null, null, null); if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("add group member success"); } else { @@ -1065,7 +1065,43 @@ static void testChannelApi() throws Exception { System.exit(-1); } - IMResult voidIMResult = ChannelAdmin.destroyChannel(inputCreateChannel.getTargetId()); + String subscriber = "aaa"; + IMResult voidIMResult = ChannelAdmin.subscribeChannel(inputCreateChannel.getTargetId(), subscriber); + if(voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { + System.out.println("subscribeChannel success"); + } else { + System.out.println("subscriber channel failure"); + System.exit(-1); + } + + Thread.sleep(100); + IMResult booleanIMResult = ChannelAdmin.isUserSubscribedChannel(subscriber, inputCreateChannel.getTargetId()); + if(booleanIMResult != null && booleanIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && booleanIMResult.getResult().value) { + System.out.println("subscribe status is correct"); + } else { + System.out.println("subscribe status is incorrect"); + System.exit(-1); + } + + + voidIMResult = ChannelAdmin.unsubscribeChannel(inputCreateChannel.getTargetId(), subscriber); + if(voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { + System.out.println("unsubscribeChannel success"); + } else { + System.out.println("unsubscriber channel failure"); + System.exit(-1); + } + Thread.sleep(100); + + booleanIMResult = ChannelAdmin.isUserSubscribedChannel(subscriber, inputCreateChannel.getTargetId()); + if(booleanIMResult != null && booleanIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && !booleanIMResult.getResult().value) { + System.out.println("subscribe status is correct"); + } else { + System.out.println("subscribe status is incorrect"); + System.exit(-1); + } + + voidIMResult = ChannelAdmin.destroyChannel(inputCreateChannel.getTargetId()); if(voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("success"); } else { @@ -1442,7 +1478,7 @@ static void testRobot() throws Exception { member3.setMember_id("user3"); members.add(member3); - IMResult resultCreateGroup = robotService.createGroup(groupInfo, members, null, null); + IMResult resultCreateGroup = robotService.createGroup(groupInfo, members, null, null, null); if (resultCreateGroup != null && resultCreateGroup.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("create group success"); } else { @@ -1486,7 +1522,7 @@ static void testRobot() throws Exception { m.setMember_id("user0"); m.setAlias("hello user0"); - voidIMResult = robotService.addGroupMembers(groupInfo.getTarget_id(), Arrays.asList(m), null, null); + voidIMResult = robotService.addGroupMembers(groupInfo.getTarget_id(), Arrays.asList(m), null, null, null); if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("add group member success"); } else { diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java b/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java index ad8898e05..1fccc0745 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java @@ -96,13 +96,14 @@ public IMResult updateProfile(int/*MyInfoType*/ type, String value) throws return robotHttpUtils.httpJsonPost(path, pojo, Void.class); } - public IMResult createGroup(PojoGroupInfo group_info, List members, List to_lines, MessagePayload notify_message) throws Exception { + public IMResult createGroup(PojoGroupInfo group_info, List members, String member_extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Robot_Create_Group; PojoGroup pojoGroup = new PojoGroup(); pojoGroup.setGroup_info(group_info); pojoGroup.setMembers(members); InputCreateGroup createGroup = new InputCreateGroup(); createGroup.setGroup(pojoGroup); + createGroup.setMember_extra(member_extra); createGroup.setTo_lines(to_lines); createGroup.setNotify_message(notify_message); @@ -163,11 +164,12 @@ public IMResult getGroupMember(String groupId, String memberId) return robotHttpUtils.httpJsonPost(path, input, PojoGroupMember.class); } - public IMResult addGroupMembers(String groupId, List groupMembers, List to_lines, MessagePayload notify_message) throws Exception { + public IMResult addGroupMembers(String groupId, List groupMembers, String member_extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Robot_Group_Member_Add; InputAddGroupMember addGroupMember = new InputAddGroupMember(); addGroupMember.setGroup_id(groupId); addGroupMember.setMembers(groupMembers); + addGroupMember.setMemberExtra(member_extra); addGroupMember.setTo_lines(to_lines); addGroupMember.setNotify_message(notify_message); return robotHttpUtils.httpJsonPost(path, addGroupMember, Void.class);