WeixinMessageHanlder中新增weight接口
This commit is contained in:
parent
d497fc639a
commit
b7376d7d6b
@ -110,4 +110,8 @@
|
||||
|
||||
* 2015-12-08
|
||||
|
||||
+ version upgrade to 1.1.4
|
||||
+ version upgrade to 1.1.4
|
||||
|
||||
* 2015-12-21
|
||||
|
||||
+ WeixinMessageHanlder中新增weight接口
|
||||
@ -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());
|
||||
}
|
||||
|
||||
@ -38,4 +38,9 @@ public class DebugMessageHandler implements WeixinMessageHandler {
|
||||
: message.toString();
|
||||
return new TextResponse(content);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int weight() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,4 +44,11 @@ public interface WeixinMessageHandler {
|
||||
*/
|
||||
public WeixinResponse doHandle(WeixinRequest request, Object message,
|
||||
Set<String> nodeNames) throws WeixinException;
|
||||
|
||||
/**
|
||||
* 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高
|
||||
*
|
||||
* @return 权重
|
||||
*/
|
||||
public int weight();
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照包名去添加消息处理器
|
||||
*
|
||||
|
||||
@ -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
|
||||
|
||||
@ -111,6 +111,6 @@ public class MessageServerStartup {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
new MessageServerStartup().test3();
|
||||
new MessageServerStartup().test1();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user