diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java new file mode 100755 index 00000000..c41d81db --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java @@ -0,0 +1,85 @@ +/* + * 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 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 com.xiaoleilu.loServer.pojos.InputAddGroupMember; +import com.xiaoleilu.loServer.pojos.InputCreateGroup; +import com.xiaoleilu.loServer.pojos.OutputCreateGroupResult; +import io.moquette.persistence.RPCCenter; +import io.moquette.persistence.TargetEntry; +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 win.liyufan.im.ErrorCode; +import win.liyufan.im.IMTopic; + +import java.util.concurrent.Executor; + +@Route("admin/group/member") +@HttpMethod("POST") +public class AddGroupMemberAction extends AdminAction { + + @Override + public boolean isTransactionAction() { + return true; + } + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputAddGroupMember inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputAddGroupMember.class); + if (inputAddGroupMember.isValide()) { + RPCCenter.getInstance().sendRequest(inputAddGroupMember.getOperator(), null, IMTopic.AddGroupMemberTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), inputAddGroupMember.getOperator(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() { + @Override + public void onSuccess(byte[] result) { + ByteBuf byteBuf = Unpooled.buffer(); + byteBuf.writeBytes(result); + ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte()); + if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { + sendResponse(response, null, null); + } else { + sendResponse(response, errorCode, null); + } + } + + @Override + public void onError(ErrorCode errorCode) { + sendResponse(response, errorCode, null); + } + + @Override + public void onTimeout() { + sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null); + } + + @Override + public Executor getResponseExecutor() { + return command -> { + ctx.executor().execute(command); + }; + } + }, true); + return false; + } else { + response.setStatus(HttpResponseStatus.OK); + RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER); + response.setContent(new Gson().toJson(result)); + } + } + return true; + } +} diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java new file mode 100755 index 00000000..f38b2de7 --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java @@ -0,0 +1,84 @@ +/* + * 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 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 com.xiaoleilu.loServer.pojos.InputDismissGroupMember; +import com.xiaoleilu.loServer.pojos.InputKickoffGroupMember; +import io.moquette.persistence.RPCCenter; +import io.moquette.persistence.TargetEntry; +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 win.liyufan.im.ErrorCode; +import win.liyufan.im.IMTopic; + +import java.util.concurrent.Executor; + +@Route("admin/group") +@HttpMethod("DELETE") +public class DismissGroupAction extends AdminAction { + + @Override + public boolean isTransactionAction() { + return true; + } + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputDismissGroupMember inputDismissGroup = getRequestBody(request.getNettyRequest(), InputDismissGroupMember.class); + if (inputDismissGroup.isValide()) { + RPCCenter.getInstance().sendRequest(inputDismissGroup.getOperator(), null, IMTopic.AddGroupMemberTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), inputDismissGroup.getOperator(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() { + @Override + public void onSuccess(byte[] result) { + ByteBuf byteBuf = Unpooled.buffer(); + byteBuf.writeBytes(result); + ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte()); + if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { + sendResponse(response, null, null); + } else { + sendResponse(response, errorCode, null); + } + } + + @Override + public void onError(ErrorCode errorCode) { + sendResponse(response, errorCode, null); + } + + @Override + public void onTimeout() { + sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null); + } + + @Override + public Executor getResponseExecutor() { + return command -> { + ctx.executor().execute(command); + }; + } + }, true); + return false; + } else { + response.setStatus(HttpResponseStatus.OK); + RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER); + response.setContent(new Gson().toJson(result)); + } + } + return true; + } +} diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffGroupMemberAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffGroupMemberAction.java new file mode 100755 index 00000000..6508119a --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffGroupMemberAction.java @@ -0,0 +1,84 @@ +/* + * 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 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 com.xiaoleilu.loServer.pojos.InputAddGroupMember; +import com.xiaoleilu.loServer.pojos.InputKickoffGroupMember; +import io.moquette.persistence.RPCCenter; +import io.moquette.persistence.TargetEntry; +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 win.liyufan.im.ErrorCode; +import win.liyufan.im.IMTopic; + +import java.util.concurrent.Executor; + +@Route("admin/group/member") +@HttpMethod("DELETE") +public class KickoffGroupMemberAction extends AdminAction { + + @Override + public boolean isTransactionAction() { + return true; + } + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputKickoffGroupMember inputKickoffGroupMember = getRequestBody(request.getNettyRequest(), InputKickoffGroupMember.class); + if (inputKickoffGroupMember.isValide()) { + RPCCenter.getInstance().sendRequest(inputKickoffGroupMember.getOperator(), null, IMTopic.AddGroupMemberTopic, inputKickoffGroupMember.toProtoGroupRequest().toByteArray(), inputKickoffGroupMember.getOperator(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() { + @Override + public void onSuccess(byte[] result) { + ByteBuf byteBuf = Unpooled.buffer(); + byteBuf.writeBytes(result); + ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte()); + if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { + sendResponse(response, null, null); + } else { + sendResponse(response, errorCode, null); + } + } + + @Override + public void onError(ErrorCode errorCode) { + sendResponse(response, errorCode, null); + } + + @Override + public void onTimeout() { + sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null); + } + + @Override + public Executor getResponseExecutor() { + return command -> { + ctx.executor().execute(command); + }; + } + }, true); + return false; + } else { + response.setStatus(HttpResponseStatus.OK); + RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER); + response.setContent(new Gson().toJson(result)); + } + } + return true; + } +} diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/TransferGroupAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/TransferGroupAction.java new file mode 100755 index 00000000..e40b5fc8 --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/TransferGroupAction.java @@ -0,0 +1,84 @@ +/* + * 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 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 com.xiaoleilu.loServer.pojos.InputDismissGroupMember; +import com.xiaoleilu.loServer.pojos.InputTransferGroup; +import io.moquette.persistence.RPCCenter; +import io.moquette.persistence.TargetEntry; +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 win.liyufan.im.ErrorCode; +import win.liyufan.im.IMTopic; + +import java.util.concurrent.Executor; + +@Route("admin/group/owner") +@HttpMethod("PUT") +public class TransferGroupAction extends AdminAction { + + @Override + public boolean isTransactionAction() { + return true; + } + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputTransferGroup inputDismissGroup = getRequestBody(request.getNettyRequest(), InputTransferGroup.class); + if (inputDismissGroup.isValide()) { + RPCCenter.getInstance().sendRequest(inputDismissGroup.getOperator(), null, IMTopic.AddGroupMemberTopic, inputDismissGroup.toProtoGroupRequest().toByteArray(), inputDismissGroup.getOperator(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() { + @Override + public void onSuccess(byte[] result) { + ByteBuf byteBuf = Unpooled.buffer(); + byteBuf.writeBytes(result); + ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte()); + if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { + sendResponse(response, null, null); + } else { + sendResponse(response, errorCode, null); + } + } + + @Override + public void onError(ErrorCode errorCode) { + sendResponse(response, errorCode, null); + } + + @Override + public void onTimeout() { + sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null); + } + + @Override + public Executor getResponseExecutor() { + return command -> { + ctx.executor().execute(command); + }; + } + }, true); + return false; + } else { + response.setStatus(HttpResponseStatus.OK); + RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER); + response.setContent(new Gson().toJson(result)); + } + } + return true; + } +} diff --git a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputAddGroupMember.java b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputAddGroupMember.java index 15583e9a..42b7f3cc 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputAddGroupMember.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputAddGroupMember.java @@ -50,12 +50,16 @@ public class InputAddGroupMember extends InputGroupBase { addGroupBuilder.addAddedMember(groupMemberBuilder); } - for (Integer line : to_lines - ) { - addGroupBuilder.addToLine(line); + if (to_lines != null) { + for (Integer line : to_lines + ) { + addGroupBuilder.addToLine(line); + } } - addGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + if (notify_message != null) { + addGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + } return addGroupBuilder.build(); } diff --git a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputDismissGroupMember.java b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputDismissGroupMember.java index 2dffc832..cad5a5b0 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputDismissGroupMember.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputDismissGroupMember.java @@ -34,12 +34,16 @@ public class InputDismissGroupMember extends InputGroupBase { WFCMessage.DismissGroupRequest.Builder dismissGroupBuilder = WFCMessage.DismissGroupRequest.newBuilder(); dismissGroupBuilder.setGroupId(group_id); - for (Integer line : to_lines - ) { - dismissGroupBuilder.addToLine(line); + if (to_lines != null) { + for (Integer line : to_lines + ) { + dismissGroupBuilder.addToLine(line); + } } - dismissGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + if (notify_message != null) { + dismissGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + } return dismissGroupBuilder.build(); } diff --git a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputKickoffGroupMember.java b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputKickoffGroupMember.java index 404f9373..c6548920 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputKickoffGroupMember.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputKickoffGroupMember.java @@ -43,12 +43,16 @@ public class InputKickoffGroupMember extends InputGroupBase { removedGroupBuilder.setGroupId(group_id); removedGroupBuilder.addAllRemovedMember(members); - for (Integer line : to_lines - ) { - removedGroupBuilder.addToLine(line); + if (to_lines != null) { + for (Integer line : to_lines + ) { + removedGroupBuilder.addToLine(line); + } } - removedGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + if (notify_message != null) { + removedGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + } return removedGroupBuilder.build(); } diff --git a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputTransferGroup.java b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputTransferGroup.java index 44603e5a..b03d824c 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputTransferGroup.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/pojos/InputTransferGroup.java @@ -26,12 +26,16 @@ public class InputTransferGroup extends InputGroupBase { groupBuilder.setGroupId(group_id); groupBuilder.setNewOwner(new_owner); - for (Integer line : to_lines - ) { - groupBuilder.addToLine(line); + if (to_lines != null) { + for (Integer line : to_lines + ) { + groupBuilder.addToLine(line); + } } - groupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + if (notify_message != null) { + groupBuilder.setNotifyContent(notify_message.toProtoMessageContent()); + } return groupBuilder.build(); }