WeixinMessageHanlder中新增weight接口
This commit is contained in:
parent
d497fc639a
commit
b7376d7d6b
@ -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接口
|
||||||
@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按照包名去添加消息处理器
|
* 按照包名去添加消息处理器
|
||||||
*
|
*
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user