WeixinMessageHanlder中新增weight接口

This commit is contained in:
jinyu 2015-12-23 15:47:16 +08:00
parent d497fc639a
commit b7376d7d6b
9 changed files with 48 additions and 33 deletions

View File

@ -110,4 +110,8 @@
* 2015-12-08 * 2015-12-08
+ version upgrade to 1.1.4 + version upgrade to 1.1.4
* 2015-12-21
+ WeixinMessageHanlder中新增weight接口

View File

@ -9,6 +9,9 @@ import io.netty.util.internal.logging.InternalLoggerFactory;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -204,13 +207,24 @@ public class WeixinMessageDispatcher {
if (messageHandlers == null) { if (messageHandlers == null) {
return null; return null;
} }
WeixinMessageHandler messageHandler = null; List<WeixinMessageHandler> matchingMessageHandlers = new ArrayList<WeixinMessageHandler>();
for (WeixinMessageHandler handler : messageHandlers) { for (WeixinMessageHandler handler : messageHandlers) {
if (handler.canHandle(request, message, nodeNames)) { if (handler.canHandle(request, message, nodeNames)) {
messageHandler = handler; matchingMessageHandlers.add(handler);
break;
} }
} }
if (matchingMessageHandlers.isEmpty()) {
return null;
}
Collections.sort(matchingMessageHandlers,
new Comparator<WeixinMessageHandler>() {
@Override
public int compare(WeixinMessageHandler m1,
WeixinMessageHandler m2) {
return m2.weight() - m1.weight();
}
});
WeixinMessageHandler messageHandler = matchingMessageHandlers.get(0);
return new MessageHandlerExecutor(context, messageHandler, return new MessageHandlerExecutor(context, messageHandler,
getMessageInterceptors()); getMessageInterceptors());
} }

View File

@ -38,4 +38,9 @@ public class DebugMessageHandler implements WeixinMessageHandler {
: message.toString(); : message.toString();
return new TextResponse(content); return new TextResponse(content);
} }
@Override
public int weight() {
return 0;
}
} }

View File

@ -62,4 +62,11 @@ public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements
public abstract WeixinResponse doHandle0(WeixinRequest request, M message) public abstract WeixinResponse doHandle0(WeixinRequest request, M message)
throws WeixinException; throws WeixinException;
/**
* 存在多个匹配到的MessageHandler则比较
*/
@Override
public int weight() {
return 1;
}
} }

View File

@ -44,4 +44,11 @@ public interface WeixinMessageHandler {
*/ */
public WeixinResponse doHandle(WeixinRequest request, Object message, public WeixinResponse doHandle(WeixinRequest request, Object message,
Set<String> nodeNames) throws WeixinException; Set<String> nodeNames) throws WeixinException;
/**
* 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高
*
* @return 权重
*/
public int weight();
} }

View File

@ -21,6 +21,10 @@ public class EventMessage extends WeixinMessage {
private static final long serialVersionUID = 7703667223814088865L; private static final long serialVersionUID = 7703667223814088865L;
protected EventMessage() {
// jaxb requried
}
public EventMessage(String eventType) { public EventMessage(String eventType) {
super(MessageType.event.name()); super(MessageType.event.name());
this.eventType = eventType; this.eventType = eventType;

View File

@ -225,19 +225,6 @@ public final class WeixinServerBootstrap {
return this; return this;
} }
/**
* 将某个消息处理器插入到头部
*
* @param messageHandler
* 消息处理器
* @return
*/
public WeixinServerBootstrap insertFirstHandler(
WeixinMessageHandler messageHandler) {
messageHandlerList.add(0, messageHandler);
return this;
}
/** /**
* 插入一个或多个消息拦截器 * 插入一个或多个消息拦截器
* *
@ -251,19 +238,6 @@ public final class WeixinServerBootstrap {
return this; return this;
} }
/**
* 将某个消息拦截器插入到头部
*
* @param messageInterceptor
* 消息拦截器
* @return
*/
public WeixinServerBootstrap insertFirstInterceptor(
WeixinMessageInterceptor messageInterceptor) {
messageInterceptorList.add(0, messageInterceptor);
return this;
}
/** /**
* 按照包名去添加消息处理器 * 按照包名去添加消息处理器
* *

View File

@ -16,7 +16,7 @@ public class AesToken implements Serializable {
private static final long serialVersionUID = -6001008896414323534L; private static final long serialVersionUID = -6001008896414323534L;
/** /**
* 账号ID(原始ID或者appid) * 账号ID(原始id/appid/corpid)
*/ */
private String weixinId; private String weixinId;
/** /**
@ -42,7 +42,7 @@ public class AesToken implements Serializable {
* 一般为AES加密模式 * 一般为AES加密模式
* *
* @param weixinId * @param weixinId
* 公众号的应用ID(appid/corpid) * 公众号的应用ID(原始id/appid/corpid)
* @param token * @param token
* 开发者Token * 开发者Token
* @param aesKey * @param aesKey

View File

@ -111,6 +111,6 @@ public class MessageServerStartup {
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
new MessageServerStartup().test3(); new MessageServerStartup().test1();
} }
} }