diff --git a/broker/src/main/java/com/xiaoleilu/loServer/RestResult.java b/broker/src/main/java/com/xiaoleilu/loServer/RestResult.java
index c74c9cfa..2ca0d50b 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/RestResult.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/RestResult.java
@@ -8,7 +8,7 @@
package com.xiaoleilu.loServer;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
public class RestResult {
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/Action.java b/broker/src/main/java/com/xiaoleilu/loServer/action/Action.java
index c91e14d7..55a1911e 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/Action.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/Action.java
@@ -10,7 +10,6 @@ package com.xiaoleilu.loServer.action;
import com.google.gson.Gson;
import com.xiaoleilu.loServer.RestResult;
-import com.xiaoleilu.loServer.action.admin.GetIMTokenAction;
import com.xiaoleilu.loServer.annotation.RequireAuthentication;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
@@ -21,10 +20,9 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
-import win.liyufan.im.DBUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
/**
* 请求处理接口
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java
index 652a78c6..b1e30245 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java
@@ -25,7 +25,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import java.util.Base64;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java
index e4be716c..d10edc2c 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java
@@ -26,7 +26,7 @@ import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import java.util.Base64;
import java.util.concurrent.Executor;
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
index 4024897e..1d396d16 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java
@@ -16,15 +16,13 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputAddGroupMember;
-import cn.wildfirechat.pojos.InputCreateGroup;
-import cn.wildfirechat.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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java
index 55bf2d4e..adcb7b7e 100644
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java
@@ -13,11 +13,10 @@ import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.action.Action;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
-import cn.wildfirechat.pojos.InputCreateUser;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
import org.apache.commons.codec.digest.DigestUtils;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.RateLimiter;
abstract public class AdminAction extends Action {
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlockUserAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlockUserAction.java
index ef431137..07e039c1 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlockUserAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlockUserAction.java
@@ -20,7 +20,7 @@ import io.moquette.persistence.TargetEntry;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("admin/user/status")
@HttpMethod("POST")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserOnlineAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserOnlineAction.java
index 8ddffc77..76e6e50f 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserOnlineAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserOnlineAction.java
@@ -13,12 +13,11 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputGetUserInfo;
-import cn.wildfirechat.pojos.OutputCreateUser;
import io.moquette.persistence.RPCCenter;
import io.moquette.persistence.TargetEntry;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("/admin/user/onlinestatus")
@HttpMethod("POST")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChatroomAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChatroomAction.java
index 5582c25f..ffcc15c0 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChatroomAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChatroomAction.java
@@ -21,7 +21,7 @@ import io.moquette.spi.impl.Utils;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("/admin/chatroom")
@HttpMethod("PUT")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateGroupAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateGroupAction.java
index 58640edb..f707835a 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateGroupAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateGroupAction.java
@@ -23,7 +23,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateRobotAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateRobotAction.java
index 4ee5c8f7..33b2f668 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateRobotAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateRobotAction.java
@@ -20,7 +20,7 @@ import cn.wildfirechat.pojos.OutputCreateRobot;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.UUIDGenerator;
@Route("admin/robot/create")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateUserAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateUserAction.java
index 698333a7..b2a31161 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateUserAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateUserAction.java
@@ -20,7 +20,7 @@ import cn.wildfirechat.pojos.OutputCreateUser;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.UUIDGenerator;
@Route("admin/user/create")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestoryChatroomAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestoryChatroomAction.java
index 4a2144a7..020708e0 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestoryChatroomAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestoryChatroomAction.java
@@ -19,7 +19,7 @@ import io.moquette.spi.impl.Utils;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("/admin/chatroom")
@HttpMethod("DELETE")
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
index 4f7c2cd5..c73c12c1 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java
@@ -16,14 +16,13 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputDismissGroupMember;
-import cn.wildfirechat.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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java
index 86d47def..3b89155e 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java
@@ -16,7 +16,6 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputFriendRequest;
-import cn.wildfirechat.pojos.OutputCreateGroupResult;
import io.moquette.persistence.RPCCenter;
import io.moquette.persistence.TargetEntry;
import io.netty.buffer.ByteBuf;
@@ -24,7 +23,7 @@ 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.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomInfoAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomInfoAction.java
index 97443883..757c8705 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomInfoAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomInfoAction.java
@@ -19,7 +19,7 @@ import cn.wildfirechat.pojos.OutputGetChatroomInfo;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("/admin/chatroom")
@HttpMethod("GET")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetIMTokenAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetIMTokenAction.java
index eaa2b3db..efba5303 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetIMTokenAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetIMTokenAction.java
@@ -18,7 +18,7 @@ import cn.wildfirechat.pojos.OutputGetIMTokenData;
import io.moquette.persistence.RPCCenter;
import io.moquette.persistence.TargetEntry;
import io.netty.handler.codec.http.FullHttpRequest;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.Base64;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserAction.java
index cc1eac06..e63eaecd 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserAction.java
@@ -17,11 +17,10 @@ import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputCreateUser;
import cn.wildfirechat.pojos.InputGetUserInfo;
-import cn.wildfirechat.pojos.OutputCreateUser;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("admin/user/info")
@HttpMethod("POST")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockStatusAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockStatusAction.java
index 488a7e66..1abb45a4 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockStatusAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockStatusAction.java
@@ -15,12 +15,11 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputGetUserInfo;
-import cn.wildfirechat.pojos.OutputCreateUser;
import cn.wildfirechat.pojos.OutputUserStatus;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("admin/user/checkstatus")
@HttpMethod("POST")
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
index 001bd04d..fdc585b4 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffGroupMemberAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffGroupMemberAction.java
@@ -15,7 +15,6 @@ 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 cn.wildfirechat.pojos.InputAddGroupMember;
import cn.wildfirechat.pojos.InputKickoffGroupMember;
import io.moquette.persistence.RPCCenter;
import io.moquette.persistence.TargetEntry;
@@ -23,7 +22,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/RecallMessageAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/RecallMessageAction.java
index cdf6faa5..ead483d3 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/RecallMessageAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/RecallMessageAction.java
@@ -23,7 +23,7 @@ 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.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SendMessageAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SendMessageAction.java
index c321babd..2f244a66 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SendMessageAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SendMessageAction.java
@@ -24,7 +24,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordAddAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordAddAction.java
index e2387cdd..98d6b2ef 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordAddAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordAddAction.java
@@ -15,10 +15,9 @@ import com.xiaoleilu.loServer.annotation.Route;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputOutputSensitiveWords;
-import cn.wildfirechat.pojos.InputOutputUserBlockStatus;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("admin/sensitive/add")
@HttpMethod("POST")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordDeleteAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordDeleteAction.java
index 193e5cdb..eab64355 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordDeleteAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordDeleteAction.java
@@ -17,7 +17,7 @@ import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputOutputSensitiveWords;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("admin/sensitive/del")
@HttpMethod("POST")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordQueryAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordQueryAction.java
index c1c0dc12..5cdfcb10 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordQueryAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordQueryAction.java
@@ -14,7 +14,7 @@ import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputOutputSensitiveWords;
import io.netty.handler.codec.http.FullHttpRequest;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import java.util.List;
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
index a08e8980..c7163de9 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/TransferGroupAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/TransferGroupAction.java
@@ -15,7 +15,6 @@ 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 cn.wildfirechat.pojos.InputDismissGroupMember;
import cn.wildfirechat.pojos.InputTransferGroup;
import io.moquette.persistence.RPCCenter;
import io.moquette.persistence.TargetEntry;
@@ -23,7 +22,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java
index 1860df88..c5227afd 100644
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java
@@ -14,14 +14,13 @@ import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.action.Action;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
-import io.moquette.persistence.RPCCenter;
import io.moquette.spi.impl.Utils;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
import org.apache.commons.codec.digest.DigestUtils;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.RateLimiter;
abstract public class ChannelAction extends Action {
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/channel/SendMessageAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/channel/SendMessageAction.java
index f4e69598..ded36852 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/channel/SendMessageAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/channel/SendMessageAction.java
@@ -24,7 +24,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetUserAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetUserAction.java
index 12a12365..7d0323cc 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetUserAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetUserAction.java
@@ -17,11 +17,10 @@ import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
import cn.wildfirechat.pojos.InputCreateUser;
import cn.wildfirechat.pojos.InputGetUserInfo;
-import cn.wildfirechat.pojos.OutputCreateUser;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
@Route("admin/robot/user_info")
@HttpMethod("POST")
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java
index 0406bbc7..455082bd 100644
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java
@@ -14,14 +14,13 @@ import com.xiaoleilu.loServer.RestResult;
import com.xiaoleilu.loServer.action.Action;
import com.xiaoleilu.loServer.handler.Request;
import com.xiaoleilu.loServer.handler.Response;
-import io.moquette.persistence.RPCCenter;
import io.moquette.spi.impl.Utils;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.internal.StringUtil;
import org.apache.commons.codec.digest.DigestUtils;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.RateLimiter;
import java.io.UnsupportedEncodingException;
diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/SendMessageAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/SendMessageAction.java
index 891261f8..c3b8531b 100755
--- a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/SendMessageAction.java
+++ b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/SendMessageAction.java
@@ -23,7 +23,7 @@ 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 common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.concurrent.Executor;
diff --git a/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java b/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java
index 6150b7c1..e9903fca 100644
--- a/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java
@@ -12,10 +12,10 @@ import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
import static win.liyufan.im.IMTopic.HandleFriendRequestTopic;
@Handler(IMTopic.AddFriendRequestTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java b/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java
index 89462871..bac1452e 100644
--- a/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java
+++ b/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java
@@ -12,10 +12,10 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(value = IMTopic.AddGroupMemberTopic)
public class AddGroupMember extends GroupHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java b/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java
index ce9e5279..ffb731f9 100644
--- a/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java
@@ -11,10 +11,10 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.BlackListUserTopic)
public class BlackListRequestHandler extends GroupHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java b/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java
index 75dc0cfe..52839ec3 100644
--- a/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java
+++ b/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java
@@ -9,10 +9,9 @@
package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
-import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import static win.liyufan.im.IMTopic.PutUserSettingTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java b/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java
index 98c2e9f5..c220e072 100644
--- a/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.List;
diff --git a/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java
index 505d4ab4..ca7b6c55 100644
--- a/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java
@@ -10,10 +10,9 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import com.hazelcast.util.StringUtil;
-import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import static win.liyufan.im.IMTopic.PutUserSettingTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java
index 053804de..1532c573 100644
--- a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java
@@ -12,7 +12,7 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(value = IMTopic.CreateGroupTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java b/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java
index 62546750..95a2cd7e 100644
--- a/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.DeleteFriendTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java
index 2e053af2..e838f744 100644
--- a/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java
@@ -13,7 +13,7 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import static win.liyufan.im.IMTopic.DismissGroupTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/DistoryChannelHandler.java b/broker/src/main/java/io/moquette/imhandler/DistoryChannelHandler.java
index ddb400cd..ac0501d6 100644
--- a/broker/src/main/java/io/moquette/imhandler/DistoryChannelHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/DistoryChannelHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import static win.liyufan.im.IMTopic.PutUserSettingTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java b/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java
index dd064bc2..0966acfc 100644
--- a/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java
@@ -12,7 +12,7 @@ import cn.wildfirechat.proto.WFCMessage;
import com.xiaoleilu.loServer.model.FriendData;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.List;
diff --git a/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java b/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java
index f9d6babd..7cf45b5f 100644
--- a/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.List;
diff --git a/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java
index 763ded48..eb79c72a 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.ChannelPullTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java
index 4d8a8734..522f5970 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.GetChatroomInfoTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java b/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java
index ea4e3786..c7a3b4a4 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.GetChatroomMemberTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java
index 58d3625c..bdf622f7 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.List;
diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java
index 2cd3be02..6d48f193 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java
@@ -11,13 +11,13 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.ArrayList;
import java.util.List;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.GetGroupMemberTopic)
public class GetGroupMemberHandler extends IMHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java
index a18bdfce..ec597e26 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java
@@ -14,7 +14,7 @@ import com.xiaoleilu.loServer.action.UploadFileAction;
import io.moquette.server.config.MediaServerConfig;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.GetQiniuUploadTokenTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java
index f017e9c7..54616f16 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java
@@ -13,7 +13,7 @@ import io.moquette.persistence.MemorySessionStore;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.moquette.spi.impl.security.TokenAuthenticator;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.GetTokenTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java
index 67080e96..ec0a4e90 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java
@@ -11,10 +11,10 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.GetUserInfoTopic)
public class GetUserInfoHandler extends IMHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java b/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java
index 6e72dca2..15c1a952 100644
--- a/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java
@@ -11,10 +11,10 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.GetUserSettingTopic)
public class GetUserSettingHandler extends IMHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java b/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java
index 846411ba..cf06afed 100644
--- a/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java
@@ -12,11 +12,11 @@ import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import win.liyufan.im.MessageShardingUtil;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.HandleFriendRequestTopic)
public class HandleFriendRequestHandler extends IMHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/IMHandler.java b/broker/src/main/java/io/moquette/imhandler/IMHandler.java
index 9cf153ab..f60bade1 100755
--- a/broker/src/main/java/io/moquette/imhandler/IMHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/IMHandler.java
@@ -23,24 +23,19 @@ import io.netty.buffer.Unpooled;
import io.netty.util.internal.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.RateLimiter;
import win.liyufan.im.Utility;
-import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
-import java.util.Spliterator;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.function.Consumer;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_OVER_FREQUENCY;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_OVER_FREQUENCY;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
/**
* 请求处理接口
diff --git a/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java b/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java
index 3d784e0d..28e46c6b 100644
--- a/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java b/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java
index 88e719bd..68a05004 100644
--- a/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java
+++ b/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java
@@ -13,7 +13,7 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import static win.liyufan.im.IMTopic.KickoffGroupMemberTopic;
@Handler(value = KickoffGroupMemberTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java b/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java
index 75b5e83c..012d0c5b 100644
--- a/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java
@@ -8,11 +8,10 @@
package io.moquette.imhandler;
-import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(value = IMTopic.LoadRemoteMessagesTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java
index 529a7de9..f4be4436 100644
--- a/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java
@@ -9,10 +9,9 @@
package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
-import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import static win.liyufan.im.IMTopic.ModifyChannelInfoTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java
index b34e40bd..71f30385 100644
--- a/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java
@@ -12,10 +12,10 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.ModifyGroupAliasTopic)
public class ModifyGroupAliasHandler extends GroupHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java
index 991e7ac2..4aff8108 100644
--- a/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java
@@ -12,11 +12,11 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import static cn.wildfirechat.proto.ProtoConstants.ModifyGroupInfoType.Modify_Group_Name;
import static cn.wildfirechat.proto.ProtoConstants.ModifyGroupInfoType.Modify_Group_Portrait;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
import static win.liyufan.im.IMTopic.ModifyGroupInfoTopic;
@Handler(value = ModifyGroupInfoTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java
index e237bfa3..998c3d4d 100644
--- a/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.ModifyMyInfoTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/PullMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/PullMessageHandler.java
index 51f8c02c..8f89fbf5 100644
--- a/broker/src/main/java/io/moquette/imhandler/PullMessageHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/PullMessageHandler.java
@@ -10,10 +10,9 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
-import com.google.protobuf.InvalidProtocolBufferException;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(value = IMTopic.PullMessageTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java b/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java
index 262ebb44..b20522e0 100644
--- a/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.PutUserSettingTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java b/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java
index 9b83a0bf..802c2afa 100644
--- a/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.QuitChatroomTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java
index 8b8ca0fb..5e1ddd39 100644
--- a/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java
@@ -12,7 +12,7 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import static win.liyufan.im.IMTopic.QuitGroupTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java
index 1f8534d3..d8a00c6f 100644
--- a/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.LinkedHashSet;
diff --git a/broker/src/main/java/io/moquette/imhandler/RouteHandler.java b/broker/src/main/java/io/moquette/imhandler/RouteHandler.java
index 71f9bf0e..7eec7c55 100644
--- a/broker/src/main/java/io/moquette/imhandler/RouteHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/RouteHandler.java
@@ -13,7 +13,7 @@ import com.hazelcast.core.Member;
import io.moquette.spi.ClientSession;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import static io.moquette.BrokerConstants.HZ_Cluster_Node_External_IP;
diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java
index 1cd6539d..0f88e72c 100644
--- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java
@@ -14,10 +14,9 @@ import com.hazelcast.util.StringUtil;
import io.moquette.BrokerConstants;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import win.liyufan.im.MessageShardingUtil;
-import win.liyufan.im.SensitiveFilter;
import java.util.Set;
diff --git a/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java b/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java
index a74122f6..8f3b93ae 100644
--- a/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java
@@ -11,10 +11,10 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.SetFriendAliasTopic)
public class SetFriendAliasRequestHandler extends GroupHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java b/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java
index 7cec78df..4664d618 100644
--- a/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java
@@ -11,10 +11,10 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.RriendRequestUnreadSyncTopic)
public class SyncFriendRequestUnreadHandler extends GroupHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java b/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java
index b9d5d6a4..94605663 100644
--- a/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java
@@ -9,10 +9,9 @@
package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
-import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
@Handler(IMTopic.TransferChannelInfoTopic)
diff --git a/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java
index 188ec279..f3ceb6e0 100644
--- a/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java
@@ -12,10 +12,10 @@ import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
@Handler(IMTopic.TransferGroupTopic)
public class TransferGroupHandler extends GroupHandler {
diff --git a/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java
index 823d3831..c884b17e 100644
--- a/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java
@@ -13,7 +13,7 @@ import cn.wildfirechat.proto.WFCMessage;
import io.moquette.persistence.MemorySessionStore;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
diff --git a/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java b/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java
index 62cef9b7..9b29679c 100644
--- a/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java
+++ b/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java
@@ -11,7 +11,7 @@ package io.moquette.imhandler;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import java.util.List;
diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
index af9a41f0..702dd74c 100755
--- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
+++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
@@ -23,6 +23,7 @@ import com.hazelcast.core.*;
import com.hazelcast.util.StringUtil;
import com.xiaoleilu.loServer.model.FriendData;
import cn.wildfirechat.pojos.InputOutputUserBlockStatus;
+import common.cn.wildfirechat.ErrorCode;
import io.moquette.server.Server;
import io.moquette.spi.IMatchingCondition;
import io.moquette.spi.IMessagesStore;
diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java
index ae0b824b..ee8e0b1e 100755
--- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java
+++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java
@@ -23,12 +23,9 @@ import io.moquette.spi.ClientSession;
import io.moquette.spi.IMessagesStore.StoredMessage;
import io.moquette.spi.ISessionsStore;
-import io.netty.util.internal.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import win.liyufan.im.ErrorCode;
-import win.liyufan.im.UserSettingScope;
-import win.liyufan.im.Utility;
+import common.cn.wildfirechat.ErrorCode;
import java.util.*;
import java.util.concurrent.*;
diff --git a/broker/src/main/java/io/moquette/persistence/RPCCenter.java b/broker/src/main/java/io/moquette/persistence/RPCCenter.java
index 620059db..e6159d82 100644
--- a/broker/src/main/java/io/moquette/persistence/RPCCenter.java
+++ b/broker/src/main/java/io/moquette/persistence/RPCCenter.java
@@ -12,7 +12,7 @@ import io.moquette.persistence.remote.*;
import io.moquette.server.Server;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/broker/src/main/java/io/moquette/server/ConnectionDescriptorStore.java b/broker/src/main/java/io/moquette/server/ConnectionDescriptorStore.java
index af7b342a..6f02d73d 100644
--- a/broker/src/main/java/io/moquette/server/ConnectionDescriptorStore.java
+++ b/broker/src/main/java/io/moquette/server/ConnectionDescriptorStore.java
@@ -27,7 +27,7 @@ import io.netty.handler.codec.mqtt.MqttMessage;
import io.netty.handler.codec.mqtt.MqttMessageType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java
index e8f4d6b8..b72240e8 100755
--- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java
+++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java
@@ -25,7 +25,7 @@ import io.moquette.spi.impl.subscriptions.Topic;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.mqtt.MqttQoS;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import java.util.Collection;
import java.util.List;
diff --git a/broker/src/main/java/io/moquette/spi/ISessionsStore.java b/broker/src/main/java/io/moquette/spi/ISessionsStore.java
index 46fd9d9c..fc035767 100755
--- a/broker/src/main/java/io/moquette/spi/ISessionsStore.java
+++ b/broker/src/main/java/io/moquette/spi/ISessionsStore.java
@@ -19,10 +19,9 @@ package io.moquette.spi;
import cn.wildfirechat.proto.WFCMessage;
import io.moquette.persistence.MemorySessionStore.Session;
import io.moquette.spi.IMessagesStore.StoredMessage;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import java.util.Collection;
-import java.util.List;
import java.util.Queue;
/**
diff --git a/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java b/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java
index b6996b4f..8c296309 100755
--- a/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java
+++ b/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java
@@ -19,9 +19,9 @@ package io.moquette.spi.impl;
import static io.moquette.spi.impl.Utils.readBytesAndRewind;
import static io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader.from;
import static io.netty.handler.codec.mqtt.MqttQoS.AT_MOST_ONCE;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_NOT_IMPLEMENT;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_OVER_FREQUENCY;
-import static win.liyufan.im.ErrorCode.ERROR_CODE_SUCCESS;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_NOT_IMPLEMENT;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_OVER_FREQUENCY;
+import static common.cn.wildfirechat.ErrorCode.ERROR_CODE_SUCCESS;
import java.io.IOException;
import java.util.*;
@@ -56,7 +56,7 @@ import io.netty.channel.Channel;
import io.netty.handler.codec.mqtt.MqttFixedHeader;
import io.netty.handler.codec.mqtt.MqttMessageType;
import io.netty.handler.codec.mqtt.MqttPublishMessage;
-import win.liyufan.im.ErrorCode;
+import common.cn.wildfirechat.ErrorCode;
import win.liyufan.im.IMTopic;
import win.liyufan.im.RateLimiter;
import win.liyufan.im.Utility;
diff --git a/broker/src/main/java/win/liyufan/im/ErrorCode.java b/common/src/main/java/common/cn/wildfirechat/ErrorCode.java
similarity index 98%
rename from broker/src/main/java/win/liyufan/im/ErrorCode.java
rename to common/src/main/java/common/cn/wildfirechat/ErrorCode.java
index f67a2c96..48b42786 100755
--- a/broker/src/main/java/win/liyufan/im/ErrorCode.java
+++ b/common/src/main/java/common/cn/wildfirechat/ErrorCode.java
@@ -6,7 +6,7 @@
* file that was distributed with this source code.
*/
-package win.liyufan.im;
+package common.cn.wildfirechat;
public enum ErrorCode {
//General error
diff --git a/pom.xml b/pom.xml
index b9a19bf6..e21a6844 100755
--- a/pom.xml
+++ b/pom.xml
@@ -35,8 +35,9 @@
broker
wildfire_jmeter
client
- distribution
common
+ sdk
+ distribution
diff --git a/sdk/pom.xml b/sdk/pom.xml
new file mode 100644
index 00000000..03d6ac95
--- /dev/null
+++ b/sdk/pom.xml
@@ -0,0 +1,93 @@
+
+
+
+ wildfirechat-parent
+ cn.wildfirechat
+ 0.20
+
+ 4.0.0
+
+ sdk
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.2
+
+
+
+ commons-io
+ commons-io
+ 2.5
+
+
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.5
+
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.7.5
+
+
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+
+ uk.org.lidalia
+ slf4j-test
+ 1.0.0-jdk6
+ test
+
+
+
+ com.google.code.findbugs
+ annotations
+ 2.0.3
+ provided
+
+
+
+ org.mockito
+ mockito-all
+ 1.9.5
+ jar
+ test
+
+
+
+ com.github.qcloudsms
+ qcloudsms
+ 1.0.5
+
+
+
+ commons-codec
+ commons-codec
+ 1.10
+
+
+
+ cn.wildfirechat
+ common
+ ${project.version}
+
+
+
+
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/ChatAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/ChatAdmin.java
new file mode 100644
index 00000000..8455cb29
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/ChatAdmin.java
@@ -0,0 +1,25 @@
+package cn.wildfirechat.sdk;
+
+import cn.wildfirechat.sdk.model.*;
+
+public class ChatAdmin {
+ public static void init(String url, String secret) {
+ HttpUtils.init(url, secret);
+ }
+
+ public static IMResult getUserByName(String mobile) throws Exception {
+ String path = "/admin/user/info";
+ UserName name = new UserName(mobile);
+ return HttpUtils.httpJsonPost(path, name, User.class);
+ }
+
+ public static IMResult createUser(User user) throws Exception {
+ String path = "/admin/user/create";
+ return HttpUtils.httpJsonPost(path, user, UserId.class);
+ }
+
+ public static IMResult getUserToken(String userId, String clientId) throws Exception {
+ String path = "/admin/user/token";
+ return HttpUtils.httpJsonPost(path, new GetTokenRequest(userId, clientId), Token.class);
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/HttpUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/HttpUtils.java
new file mode 100644
index 00000000..be9b8c5c
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/HttpUtils.java
@@ -0,0 +1,109 @@
+package cn.wildfirechat.sdk;
+
+import cn.wildfirechat.sdk.model.IMResult;
+import com.google.gson.Gson;
+import ikidou.reflect.TypeBuilder;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.lang.reflect.Type;
+import java.nio.charset.Charset;
+
+
+public class HttpUtils {
+ private static final Logger LOG = LoggerFactory.getLogger(HttpUtils.class);
+
+ private static String adminUrl;
+ private static String adminSecret;
+
+ static void init(String url, String secret) {
+ adminUrl = url;
+ adminSecret = secret;
+ }
+
+ static IMResult httpJsonPost(String path, Object object, Class clazz) throws Exception{
+ if (isNullOrEmpty(adminUrl) || isNullOrEmpty(path)) {
+ LOG.error("Not init IM SDK correctly. Do you forget init it?");
+ throw new Exception("SDK url or secret lack!");
+ }
+
+ String url = adminUrl + path;
+ HttpPost post = null;
+ try {
+ HttpClient httpClient = HttpClientBuilder.create().build();
+
+ int nonce = (int)(Math.random() * 100000 + 3);
+ long timestamp = System.currentTimeMillis();
+ String str = nonce + "|" + adminSecret + "|" + timestamp;
+ String sign = DigestUtils.sha1Hex(str);
+
+
+ post = new HttpPost(url);
+ post.setHeader("Content-type", "application/json; charset=utf-8");
+ post.setHeader("Connection", "Keep-Alive");
+ post.setHeader("nonce", nonce + "");
+ post.setHeader("timestamp", "" + timestamp);
+ post.setHeader("sign", sign);
+
+ String jsonStr = new Gson().toJson(object);
+ LOG.info("http request content: {}", jsonStr);
+
+ StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
+ entity.setContentEncoding("UTF-8");
+ entity.setContentType("application/json");
+ post.setEntity(entity);
+ HttpResponse response = httpClient.execute(post);
+
+ int statusCode = response.getStatusLine().getStatusCode();
+ if(statusCode != HttpStatus.SC_OK){
+ LOG.info("Request error: "+statusCode);
+ throw new Exception("Http request error with code:" + statusCode);
+ }else{
+ BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity()
+ .getContent(),"utf-8"));
+ StringBuffer sb = new StringBuffer();
+ String line;
+ String NL = System.getProperty("line.separator");
+ while ((line = in.readLine()) != null) {
+ sb.append(line + NL);
+ }
+
+ in.close();
+
+ String content = sb.toString();
+ LOG.info("http request response content: {}", content);
+
+ return fromJsonObject(content, clazz);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }finally{
+ if(post != null){
+ post.releaseConnection();
+ }
+ }
+ }
+
+ private static IMResult fromJsonObject(String content, Class clazz) {
+ Type type = TypeBuilder
+ .newInstance(IMResult.class)
+ .addTypeParam(clazz)
+ .build();
+ return new Gson().fromJson(content, type);
+ }
+
+ private static boolean isNullOrEmpty(String str) {
+ return str == null || str.isEmpty();
+ }
+
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/GetTokenRequest.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/GetTokenRequest.java
new file mode 100755
index 00000000..885ff81f
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/GetTokenRequest.java
@@ -0,0 +1,27 @@
+package cn.wildfirechat.sdk.model;
+
+public class GetTokenRequest {
+ private String userId;
+ private String clientId;
+
+ public GetTokenRequest(String userId, String clientId) {
+ this.userId = userId;
+ this.clientId = clientId;
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java
new file mode 100755
index 00000000..b3001549
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java
@@ -0,0 +1,38 @@
+package cn.wildfirechat.sdk.model;
+
+import common.cn.wildfirechat.ErrorCode;
+
+public class IMResult {
+
+ public int code;
+ public String msg;
+ public T result;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public ErrorCode getErrorCode() {
+ return ErrorCode.fromCode(code);
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public T getResult() {
+ return result;
+ }
+
+ public void setResult(T result) {
+ this.result = result;
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/SendMessageResult.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/SendMessageResult.java
new file mode 100644
index 00000000..aeb2152c
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/SendMessageResult.java
@@ -0,0 +1,30 @@
+package cn.wildfirechat.sdk.model;
+
+public class SendMessageResult {
+ private long messageUid;
+ private long timestamp;
+
+ public SendMessageResult() {
+ }
+
+ public SendMessageResult(long messageUid, long timestamp) {
+ this.messageUid = messageUid;
+ this.timestamp = timestamp;
+ }
+
+ public long getMessageUid() {
+ return messageUid;
+ }
+
+ public void setMessageUid(long messageUid) {
+ this.messageUid = messageUid;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/Token.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/Token.java
new file mode 100644
index 00000000..69a7443a
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/Token.java
@@ -0,0 +1,22 @@
+package cn.wildfirechat.sdk.model;
+
+public class Token {
+ private String token;
+ private String userId;
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/User.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/User.java
new file mode 100644
index 00000000..20e59fe0
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/User.java
@@ -0,0 +1,121 @@
+package cn.wildfirechat.sdk.model;
+
+public class User {
+ private String userId;
+ private String name;
+ private String password;
+ private String displayName;
+ private String portrait;
+ private int gender;
+ private String mobile;
+ private String email;
+ private String address;
+ private String company;
+ private String social;
+ private String extra;
+ private long updateDt;
+
+ public String getSocial() {
+ return social;
+ }
+
+ public void setSocial(String social) {
+ this.social = social;
+ }
+
+ public long getUpdateDt() {
+ return updateDt;
+ }
+
+ public void setUpdateDt(long updateDt) {
+ this.updateDt = updateDt;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String getPortrait() {
+ return portrait;
+ }
+
+ public void setPortrait(String portrait) {
+ this.portrait = portrait;
+ }
+
+ public String getMobile() {
+ return mobile;
+ }
+
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getCompany() {
+ return company;
+ }
+
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ public String getExtra() {
+ return extra;
+ }
+
+ public void setExtra(String extra) {
+ this.extra = extra;
+ }
+
+ public int getGender() {
+ return gender;
+ }
+
+ public void setGender(int gender) {
+ this.gender = gender;
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/UserId.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/UserId.java
new file mode 100755
index 00000000..283375d2
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/UserId.java
@@ -0,0 +1,17 @@
+package cn.wildfirechat.sdk.model;
+
+public class UserId {
+ private String userId;
+
+ public UserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+}
diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/UserName.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/UserName.java
new file mode 100755
index 00000000..58d97028
--- /dev/null
+++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/UserName.java
@@ -0,0 +1,17 @@
+package cn.wildfirechat.sdk.model;
+
+public class UserName {
+ private String name;
+
+ public UserName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/sdk/src/main/java/ikidou/reflect/TypeBuilder.java b/sdk/src/main/java/ikidou/reflect/TypeBuilder.java
new file mode 100755
index 00000000..15be1624
--- /dev/null
+++ b/sdk/src/main/java/ikidou/reflect/TypeBuilder.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2016 ikidou
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ikidou.reflect;
+
+import ikidou.reflect.exception.TypeException;
+import ikidou.reflect.typeimpl.ParameterizedTypeImpl;
+import ikidou.reflect.typeimpl.WildcardTypeImpl;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+public class TypeBuilder {
+ private final TypeBuilder parent;
+ private final Class raw;
+ private final List args = new ArrayList<>();
+
+
+ private TypeBuilder(Class raw, TypeBuilder parent) {
+ assert raw != null;
+ this.raw = raw;
+ this.parent = parent;
+ }
+
+ public static TypeBuilder newInstance(Class raw) {
+ return new TypeBuilder(raw, null);
+ }
+
+ private static TypeBuilder newInstance(Class raw, TypeBuilder parent) {
+ return new TypeBuilder(raw, parent);
+ }
+
+
+ public TypeBuilder beginSubType(Class raw) {
+ return newInstance(raw, this);
+ }
+
+ public TypeBuilder endSubType() {
+ if (parent == null) {
+ throw new TypeException("expect beginSubType() before endSubType()");
+ }
+
+ parent.addTypeParam(getType());
+
+ return parent;
+ }
+
+ public TypeBuilder addTypeParam(Class clazz) {
+ return addTypeParam((Type) clazz);
+ }
+
+ public TypeBuilder addTypeParamExtends(Class... classes) {
+ if (classes == null) {
+ throw new NullPointerException("addTypeParamExtends() expect not null Class");
+ }
+
+ WildcardTypeImpl wildcardType = new WildcardTypeImpl(null, classes);
+
+ return addTypeParam(wildcardType);
+ }
+
+ public TypeBuilder addTypeParamSuper(Class... classes) {
+ if (classes == null) {
+ throw new NullPointerException("addTypeParamSuper() expect not null Class");
+ }
+
+ WildcardTypeImpl wildcardType = new WildcardTypeImpl(classes, null);
+
+ return addTypeParam(wildcardType);
+ }
+
+ public TypeBuilder addTypeParam(Type type) {
+ if (type == null) {
+ throw new NullPointerException("addTypeParam expect not null Type");
+ }
+
+ args.add(type);
+
+ return this;
+ }
+
+ public Type build() {
+ if (parent != null) {
+ throw new TypeException("expect endSubType() before build()");
+ }
+
+ return getType();
+ }
+
+ private Type getType() {
+ if (args.isEmpty()) {
+ return raw;
+ }
+ return new ParameterizedTypeImpl(raw, args.toArray(new Type[args.size()]), null);
+ }
+}
diff --git a/sdk/src/main/java/ikidou/reflect/TypeToken.java b/sdk/src/main/java/ikidou/reflect/TypeToken.java
new file mode 100755
index 00000000..8accb649
--- /dev/null
+++ b/sdk/src/main/java/ikidou/reflect/TypeToken.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2016 ikidou
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ikidou.reflect;
+
+import ikidou.reflect.exception.TypeException;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+public abstract class TypeToken {
+ private final Type type;
+
+ public TypeToken() {
+ Type superclass = getClass().getGenericSuperclass();
+ if (superclass instanceof Class) {
+ throw new TypeException("No generics found!");
+ }
+ ParameterizedType type = (ParameterizedType) superclass;
+ this.type = type.getActualTypeArguments()[0];
+ }
+
+ public Type getType() {
+ return type;
+ }
+}
diff --git a/sdk/src/main/java/ikidou/reflect/exception/TypeException.java b/sdk/src/main/java/ikidou/reflect/exception/TypeException.java
new file mode 100755
index 00000000..1e19fdc0
--- /dev/null
+++ b/sdk/src/main/java/ikidou/reflect/exception/TypeException.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016 ikidou
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ikidou.reflect.exception;
+
+public class TypeException extends RuntimeException {
+ public TypeException() {
+ }
+
+ public TypeException(String message) {
+ super(message);
+ }
+
+ public TypeException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public TypeException(Throwable cause) {
+ super(cause);
+ }
+
+ public TypeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/sdk/src/main/java/ikidou/reflect/typeimpl/ParameterizedTypeImpl.java b/sdk/src/main/java/ikidou/reflect/typeimpl/ParameterizedTypeImpl.java
new file mode 100755
index 00000000..5809cdbb
--- /dev/null
+++ b/sdk/src/main/java/ikidou/reflect/typeimpl/ParameterizedTypeImpl.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016 ikidou
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ikidou.reflect.typeimpl;
+
+import ikidou.reflect.exception.TypeException;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.util.Arrays;
+
+@SuppressWarnings("SpellCheckingInspection")
+public class ParameterizedTypeImpl implements ParameterizedType {
+ private final Class raw;
+ private final Type[] args;
+ private final Type owner;
+
+ public ParameterizedTypeImpl(Class raw, Type[] args, Type owner) {
+ this.raw = raw;
+ this.args = args != null ? args : new Type[0];
+ this.owner = owner;
+ checkArgs();
+ }
+
+ private void checkArgs() {
+ if (raw == null) {
+ throw new TypeException("raw class can't be null");
+ }
+ TypeVariable[] typeParameters = raw.getTypeParameters();
+ if (args.length != 0 && typeParameters.length != args.length) {
+ throw new TypeException(raw.getName() + " expect " + typeParameters.length + " arg(s), got " + args.length);
+ }
+ }
+
+ @Override
+ public Type[] getActualTypeArguments() {
+ return args;
+ }
+
+ @Override
+ public Type getRawType() {
+ return raw;
+ }
+
+ @Override
+ public Type getOwnerType() {
+ return owner;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(raw.getName());
+ if (args.length != 0) {
+ sb.append('<');
+ for (int i = 0; i < args.length; i++) {
+ if (i != 0) {
+ sb.append(", ");
+ }
+ Type type = args[i];
+ if (type instanceof Class) {
+ Class clazz = (Class) type;
+
+ if (clazz.isArray()) {
+ int count = 0;
+ do {
+ count++;
+ clazz = clazz.getComponentType();
+ } while (clazz.isArray());
+
+ sb.append(clazz.getName());
+
+ for (int j = count; j > 0; j--) {
+ sb.append("[]");
+ }
+ } else {
+ sb.append(clazz.getName());
+ }
+ } else {
+ sb.append(args[i].toString());
+ }
+ }
+ sb.append('>');
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ParameterizedTypeImpl that = (ParameterizedTypeImpl) o;
+
+ if (!raw.equals(that.raw)) return false;
+ // Probably incorrect - comparing Object[] arrays with Arrays.equals
+ if (!Arrays.equals(args, that.args)) return false;
+ return owner != null ? owner.equals(that.owner) : that.owner == null;
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = raw.hashCode();
+ result = 31 * result + Arrays.hashCode(args);
+ result = 31 * result + (owner != null ? owner.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/sdk/src/main/java/ikidou/reflect/typeimpl/WildcardTypeImpl.java b/sdk/src/main/java/ikidou/reflect/typeimpl/WildcardTypeImpl.java
new file mode 100755
index 00000000..f67618b8
--- /dev/null
+++ b/sdk/src/main/java/ikidou/reflect/typeimpl/WildcardTypeImpl.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2016 ikidou
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ikidou.reflect.typeimpl;
+
+import java.lang.reflect.Type;
+import java.lang.reflect.WildcardType;
+import java.util.Arrays;
+
+public class WildcardTypeImpl implements WildcardType {
+ private final Class[] upper;
+ private final Class[] lower;
+
+ public WildcardTypeImpl(Class[] lower, Class[] upper) {
+ this.lower = lower != null ? lower : new Class[0];
+ this.upper = upper != null ? upper : new Class[0];
+
+ checkArgs();
+ }
+
+ private void checkArgs() {
+ if (lower.length == 0 && upper.length == 0) {
+ throw new IllegalArgumentException("lower or upper can't be null");
+ }
+
+ checkArgs(lower);
+ checkArgs(upper);
+ }
+
+ private void checkArgs(Class[] args) {
+ for (int i = 1; i < args.length; i++) {
+ Class clazz = args[i];
+ if (!clazz.isInterface()) {
+ throw new IllegalArgumentException(clazz.getName() + " not a interface!");
+ }
+ }
+ }
+
+ @Override
+ public Type[] getUpperBounds() {
+ return upper;
+ }
+
+ @Override
+ public Type[] getLowerBounds() {
+ return lower;
+ }
+
+ @Override
+ public String toString() {
+ if (upper.length > 0) {
+ if (upper[0] == Object.class) {
+ return "?";
+ }
+ return getTypeString("? extends ", upper);
+ } else {
+ return getTypeString("? super ", lower);
+ }
+ }
+
+ private String getTypeString(String prefix, Class[] type) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(prefix);
+
+ for (int i = 0; i < type.length; i++) {
+ if (i != 0) {
+ sb.append(" & ");
+ }
+ sb.append(type[i].getName());
+ }
+
+ return sb.toString();
+
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ WildcardTypeImpl that = (WildcardTypeImpl) o;
+
+ return Arrays.equals(upper, that.upper) && Arrays.equals(lower, that.lower);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = Arrays.hashCode(upper);
+ result = 31 * result + Arrays.hashCode(lower);
+ return result;
+ }
+}