diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/ChannelSubscriberAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/ChannelSubscriberAction.java new file mode 100755 index 00000000..84a1a1b9 --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/ChannelSubscriberAction.java @@ -0,0 +1,62 @@ +/* + * 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.InputChannelSubscribe; +import cn.wildfirechat.pojos.InputCreateChannel; +import cn.wildfirechat.pojos.InputSubscribeChannel; +import cn.wildfirechat.pojos.OutputCreateChannel; +import cn.wildfirechat.proto.ProtoConstants; +import cn.wildfirechat.proto.WFCMessage; +import com.google.gson.Gson; +import com.xiaoleilu.loServer.RestResult; +import com.xiaoleilu.loServer.action.channel.ChannelAction; +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.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 win.liyufan.im.IMTopic; + +@Route(APIPath.Subscribe_Channel) +@HttpMethod("POST") +public class ChannelSubscriberAction extends AdminAction { + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputSubscribeChannel inputSubscribeChannel = getRequestBody(request.getNettyRequest(), InputSubscribeChannel.class); + if (inputSubscribeChannel != null + && !io.netty.util.internal.StringUtil.isNullOrEmpty(inputSubscribeChannel.getChannelId()) + && !io.netty.util.internal.StringUtil.isNullOrEmpty(inputSubscribeChannel.getUserId())) { + + WFCMessage.ListenChannel.Builder builder = WFCMessage.ListenChannel.newBuilder().setChannelId(inputSubscribeChannel.getChannelId()).setListen(inputSubscribeChannel.getSubscribe()); + sendApiMessage(response, inputSubscribeChannel.getUserId(), IMTopic.ChannelListenTopic, builder.build().toByteArray(), result -> { + ErrorCode errorCode = ErrorCode.fromCode(result[0]); + if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { + return new Result(ErrorCode.ERROR_CODE_SUCCESS); + } else { + return new Result(errorCode); + } + }); + return false; + } else { + setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response); + } + + } + return true; + } +} diff --git a/common/src/main/java/cn/wildfirechat/common/APIPath.java b/common/src/main/java/cn/wildfirechat/common/APIPath.java index cd64000e..4dd73f9f 100644 --- a/common/src/main/java/cn/wildfirechat/common/APIPath.java +++ b/common/src/main/java/cn/wildfirechat/common/APIPath.java @@ -79,6 +79,7 @@ public interface APIPath { String Create_Channel = "/admin/channel/create"; String Destroy_Channel = "/admin/channel/destroy"; String Get_Channel_Info = "/admin/channel/get"; + String Subscribe_Channel = "/admin/channel/subscribe"; String Get_System_Setting = "/admin/system/get_setting"; String Put_System_Setting = "/admin/system/put_setting"; diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputSubscribeChannel.java b/common/src/main/java/cn/wildfirechat/pojos/InputSubscribeChannel.java new file mode 100644 index 00000000..44c711f6 --- /dev/null +++ b/common/src/main/java/cn/wildfirechat/pojos/InputSubscribeChannel.java @@ -0,0 +1,48 @@ +/* + * 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; + +public class InputSubscribeChannel { + private String channelId; + private String userId; + private int subscribe; //1,订阅;0,取消订阅 + + public InputSubscribeChannel() { + } + + public InputSubscribeChannel(String channelId, String userId, int subscribe) { + this.channelId = channelId; + this.userId = userId; + this.subscribe = subscribe; + } + + public String getChannelId() { + return channelId; + } + + public void setChannelId(String channelId) { + this.channelId = channelId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getSubscribe() { + return subscribe; + } + + public void setSubscribe(int subscribe) { + this.subscribe = subscribe; + } +} diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java index c2b995c5..37f1f89d 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java @@ -39,6 +39,18 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, inputChannelId, OutputGetChannelInfo.class); } + public static IMResult subscribeChannel(String channelId, String userId) throws Exception { + String path = APIPath.Subscribe_Channel; + InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 1); + return AdminHttpUtils.httpJsonPost(path, input, Void.class); + } + + public static IMResult unsubscribeChannel(String channelId, String userId) throws Exception { + String path = APIPath.Subscribe_Channel; + InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0); + return AdminHttpUtils.httpJsonPost(path, input, Void.class); + } + //以下仅专业版支持 public static IMResult setConversationTop(String userId, int conversationType, String target, int line, boolean isTop) throws Exception { String key = conversationType + "-" + line + "-" + target; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index fef78e26..14c62aa3 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -1183,8 +1183,8 @@ public class Main { } PojoGroupMember m = new PojoGroupMember(); - m.setMember_id("user1"); - m.setAlias("hello user1"); + m.setMember_id("user0"); + m.setAlias("hello user0"); voidIMResult = robotService.addGroupMembers(groupInfo.getTarget_id(), Arrays.asList(m), null, null); if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { @@ -1390,8 +1390,16 @@ public class Main { System.exit(-1); } + resultVoid = GeneralAdmin.subscribeChannel(channelId, "userId4"); + if (resultVoid != null && resultVoid.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { + System.out.println("subscribe done"); + } else { + System.out.println("subscribe failure"); + System.exit(-1); + } + IMResult resultStringList = channelServiceApi.getSubscriberList(); - if (resultStringList != null && resultStringList.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && resultStringList.getResult().getList().contains("userId2") && resultStringList.getResult().getList().contains("userId3")) { + if (resultStringList != null && resultStringList.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && resultStringList.getResult().getList().contains("userId2") && resultStringList.getResult().getList().contains("userId3") && resultStringList.getResult().getList().contains("userId4")) { System.out.println("get subscriber done"); } else { System.out.println("get subscriber failure");