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
+ 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.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@ -204,13 +207,24 @@ public class WeixinMessageDispatcher {
if (messageHandlers == null) {
return null;
}
WeixinMessageHandler messageHandler = null;
List<WeixinMessageHandler> matchingMessageHandlers = new ArrayList<WeixinMessageHandler>();
for (WeixinMessageHandler handler : messageHandlers) {
if (handler.canHandle(request, message, nodeNames)) {
messageHandler = handler;
break;
matchingMessageHandlers.add(handler);
}
}
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,
getMessageInterceptors());
}

View File

@ -38,4 +38,9 @@ public class DebugMessageHandler implements WeixinMessageHandler {
: message.toString();
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)
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,
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;
protected EventMessage() {
// jaxb requried
}
public EventMessage(String eventType) {
super(MessageType.event.name());
this.eventType = eventType;

View File

@ -225,19 +225,6 @@ public final class WeixinServerBootstrap {
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;
}
/**
* 将某个消息拦截器插入到头部
*
* @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;
/**
* 账号ID(原始ID或者appid)
* 账号ID(原始id/appid/corpid)
*/
private String weixinId;
/**
@ -42,7 +42,7 @@ public class AesToken implements Serializable {
* 一般为AES加密模式
*
* @param weixinId
* 公众号的应用ID(appid/corpid)
* 公众号的应用ID(原始id/appid/corpid)
* @param token
* 开发者Token
* @param aesKey

View File

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