优化Handler接口

This commit is contained in:
jinyu 2017-11-12 13:50:32 +08:00
parent 4712dae3ad
commit 40c86f544f
7 changed files with 54 additions and 58 deletions

View File

@ -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) {

View File

@ -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();

View File

@ -17,11 +17,14 @@ 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) {
return message != null
&& message.getClass() == ClassUtil.getGenericType(getClass())
&& canHandle0(request, (M) message); && canHandle0(request, (M) message);
} }
@ -34,25 +37,23 @@ public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements
* 微信消息 * 微信消息
* @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
*/ */
public abstract WeixinResponse doHandle0(WeixinRequest request, M message); protected abstract WeixinResponse doHandle0(M message);
/** /**
* 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小 * 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小

View File

@ -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;
} }

View File

@ -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时权重降序排列,数字越大优先级越高

View File

@ -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) {

View File

@ -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!");
} }
}; };
@ -85,7 +83,8 @@ public class MessageServerStartup {
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,
WeixinMessage message) {
return new TextResponse("处理了扫描和文字消息"); return new TextResponse("处理了扫描和文字消息");
} }
}; };