优化Handler接口
This commit is contained in:
parent
4712dae3ad
commit
40c86f544f
@ -132,7 +132,7 @@ public class WeixinMessageDispatcher {
|
|||||||
Exception exception = null;
|
Exception exception = null;
|
||||||
WeixinResponse response = null;
|
WeixinResponse response = null;
|
||||||
try {
|
try {
|
||||||
response = handlerExecutor.getMessageHandler().doHandle(request, message, messageTransfer.getNodeNames());
|
response = handlerExecutor.getMessageHandler().doHandle(request, message);
|
||||||
handlerExecutor.applyPostHandle(request, response, message);
|
handlerExecutor.applyPostHandle(request, response, message);
|
||||||
context.writeAndFlush(response);
|
context.writeAndFlush(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public class DebugMessageHandler implements WeixinMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message) {
|
||||||
String content = message == null
|
String content = message == null
|
||||||
? request.getOriginalContent().replaceAll("\\!\\[CDATA\\[", "").replaceAll("\\]\\]", "")
|
? request.getOriginalContent().replaceAll("\\!\\[CDATA\\[", "").replaceAll("\\]\\]", "")
|
||||||
: message.toString();
|
: message.toString();
|
||||||
|
|||||||
@ -17,48 +17,49 @@ import com.foxinmy.weixin4j.util.ClassUtil;
|
|||||||
* @see com.foxinmy.weixin4j.request.WeixinMessage
|
* @see com.foxinmy.weixin4j.request.WeixinMessage
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements WeixinMessageHandler {
|
public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements
|
||||||
|
WeixinMessageHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
public boolean canHandle(WeixinRequest request, WeixinMessage message,
|
||||||
return message != null && message.getClass() == ClassUtil.getGenericType(getClass())
|
Set<String> nodeNames) {
|
||||||
&& canHandle0(request, (M) message);
|
return message != null
|
||||||
}
|
&& message.getClass() == ClassUtil.getGenericType(getClass())
|
||||||
|
&& canHandle0(request, (M) message);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 能否处理请求
|
* 能否处理请求
|
||||||
*
|
*
|
||||||
* @param request
|
* @param request
|
||||||
* 微信请求
|
* 微信请求
|
||||||
* @param message
|
* @param message
|
||||||
* 微信消息
|
* 微信消息
|
||||||
* @return true则执行doHandler0 @
|
* @return true则执行doHandler0 @
|
||||||
*/
|
*/
|
||||||
public boolean canHandle0(WeixinRequest request, M message) {
|
protected boolean canHandle0(WeixinRequest request, M message) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message) {
|
||||||
return doHandle0(request, (M) message);
|
return doHandle0((M) message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理请求
|
* 处理请求
|
||||||
*
|
*
|
||||||
* @param request
|
* @param message
|
||||||
* 微信请求
|
* 微信消息
|
||||||
* @param message
|
* @return
|
||||||
* 微信消息
|
*/
|
||||||
* @return
|
protected abstract WeixinResponse doHandle0(M message);
|
||||||
*/
|
|
||||||
public abstract WeixinResponse doHandle0(WeixinRequest request, M message);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小
|
* 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int weight() {
|
public int weight() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,20 +32,18 @@ public abstract class MultipleMessageHandlerAdapter implements WeixinMessageHand
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
public boolean canHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
||||||
return message != null && messageClasses.contains(message.getClass()) && canHandle0(request, message);
|
return message != null && messageClasses.contains(message.getClass()) && canHandle0(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 能否处理请求
|
* 能否处理请求
|
||||||
*
|
*
|
||||||
* @param request
|
|
||||||
* 微信请求
|
|
||||||
* @param message
|
* @param message
|
||||||
* 微信消息
|
* 微信消息
|
||||||
* @return true则执行doHandler
|
* @return true则执行doHandler
|
||||||
* @throws WeixinException
|
* @throws WeixinException
|
||||||
*/
|
*/
|
||||||
public boolean canHandle0(WeixinRequest request, WeixinMessage message) {
|
protected boolean canHandle0(WeixinMessage message) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,11 +38,9 @@ public interface WeixinMessageHandler {
|
|||||||
* 微信请求
|
* 微信请求
|
||||||
* @param message
|
* @param message
|
||||||
* 微信消息
|
* 微信消息
|
||||||
* @param nodeNames
|
|
||||||
* 节点名称集合
|
|
||||||
* @return 回复内容
|
* @return 回复内容
|
||||||
*/
|
*/
|
||||||
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames);
|
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高
|
* 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public class SuiteMessageHandler implements WeixinMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message) {
|
||||||
SuiteMessage suiteMessage = null; // 转换为 SuiteMessage
|
SuiteMessage suiteMessage = null; // 转换为 SuiteMessage
|
||||||
SuiteEventType eventType = suiteMessage.getFormatEventType();
|
SuiteEventType eventType = suiteMessage.getFormatEventType();
|
||||||
if (eventType == SuiteEventType.suite_ticket) {
|
if (eventType == SuiteEventType.suite_ticket) {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package com.foxinmy.weixin4j.server.test;
|
package com.foxinmy.weixin4j.server.test;
|
||||||
|
|
||||||
import java.util.Set;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
|
||||||
@ -20,8 +20,6 @@ import com.foxinmy.weixin4j.response.WeixinResponse;
|
|||||||
import com.foxinmy.weixin4j.spring.SpringBeanFactory;
|
import com.foxinmy.weixin4j.spring.SpringBeanFactory;
|
||||||
import com.foxinmy.weixin4j.startup.WeixinServerBootstrap;
|
import com.foxinmy.weixin4j.startup.WeixinServerBootstrap;
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务启动测试类
|
* 服务启动测试类
|
||||||
*
|
*
|
||||||
@ -60,14 +58,14 @@ public class MessageServerStartup {
|
|||||||
// 针对文本消息回复
|
// 针对文本消息回复
|
||||||
WeixinMessageHandler textMessageHandler = new MessageHandlerAdapter<TextMessage>() {
|
WeixinMessageHandler textMessageHandler = new MessageHandlerAdapter<TextMessage>() {
|
||||||
@Override
|
@Override
|
||||||
public WeixinResponse doHandle0(WeixinRequest request, TextMessage message) {
|
protected WeixinResponse doHandle0(TextMessage message) {
|
||||||
return new TextResponse("HelloWorld!");
|
return new TextResponse("HelloWorld!");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// 针对语音消息回复
|
// 针对语音消息回复
|
||||||
WeixinMessageHandler voiceMessageHandler = new MessageHandlerAdapter<VoiceMessage>() {
|
WeixinMessageHandler voiceMessageHandler = new MessageHandlerAdapter<VoiceMessage>() {
|
||||||
@Override
|
@Override
|
||||||
public WeixinResponse doHandle0(WeixinRequest request, VoiceMessage message) {
|
protected WeixinResponse doHandle0(VoiceMessage message) {
|
||||||
return new TextResponse("HelloWorld!");
|
return new TextResponse("HelloWorld!");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -84,10 +82,11 @@ public class MessageServerStartup {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
MultipleMessageHandlerAdapter messageHandler = new MultipleMessageHandlerAdapter(ScanEventMessage.class,
|
MultipleMessageHandlerAdapter messageHandler = new MultipleMessageHandlerAdapter(ScanEventMessage.class,
|
||||||
TextMessage.class) {
|
TextMessage.class) {
|
||||||
@Override
|
@Override
|
||||||
public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) {
|
public WeixinResponse doHandle(WeixinRequest request,
|
||||||
return new TextResponse("处理了扫描和文字消息");
|
WeixinMessage message) {
|
||||||
}
|
return new TextResponse("处理了扫描和文字消息");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
new WeixinServerBootstrap(token).addHandler(messageHandler, DebugMessageHandler.global).startup();
|
new WeixinServerBootstrap(token).addHandler(messageHandler, DebugMessageHandler.global).startup();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user