From 0b1cca67a4f27e9d042941ee390028e5f2e395b6 Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 10 Jun 2015 00:04:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4MessageKey=E5=92=8CMessageMat?= =?UTF-8?q?cher?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dispatcher/DefaultMessageMatcher.java | 167 ++++++++++++++++++ .../weixin4j/dispatcher/MessageKey.java | 88 +++++++++ .../dispatcher/WeixinMessageDispatcher.java | 48 ++--- .../dispatcher/WeixinMessageMatcher.java | 31 ++++ .../messagekey/DefaultMessageKeyDefiner.java | 45 ----- .../messagekey/WeixinMessageKeyDefiner.java | 29 --- .../messagekey/WeixinMessageMatcher.java | 42 ----- .../mp/event/KfCloseEventMessage.java | 2 +- .../weixin4j/socket/WeixinRequestHandler.java | 2 +- .../startup/WeixinServerBootstrap.java | 40 +---- .../server/test/MessageServerStartup.java | 2 +- 11 files changed, 309 insertions(+), 187 deletions(-) create mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/DefaultMessageMatcher.java create mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/MessageKey.java create mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java delete mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/DefaultMessageKeyDefiner.java delete mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageKeyDefiner.java delete mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/DefaultMessageMatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/DefaultMessageMatcher.java new file mode 100644 index 00000000..7d28db37 --- /dev/null +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/DefaultMessageMatcher.java @@ -0,0 +1,167 @@ +package com.foxinmy.weixin4j.dispatcher; + +import java.util.HashMap; +import java.util.Map; + +import com.foxinmy.weixin4j.message.ImageMessage; +import com.foxinmy.weixin4j.message.LinkMessage; +import com.foxinmy.weixin4j.message.LocationMessage; +import com.foxinmy.weixin4j.message.TextMessage; +import com.foxinmy.weixin4j.message.VideoMessage; +import com.foxinmy.weixin4j.message.VoiceMessage; +import com.foxinmy.weixin4j.message.event.LocationEventMessage; +import com.foxinmy.weixin4j.message.event.MenuEventMessage; +import com.foxinmy.weixin4j.message.event.MenuLocationEventMessage; +import com.foxinmy.weixin4j.message.event.MenuPhotoEventMessage; +import com.foxinmy.weixin4j.message.event.MenuScanEventMessage; +import com.foxinmy.weixin4j.mp.event.KfCloseEventMessage; +import com.foxinmy.weixin4j.mp.event.KfCreateEventMessage; +import com.foxinmy.weixin4j.mp.event.KfSwitchEventMessage; +import com.foxinmy.weixin4j.mp.event.MassEventMessage; +import com.foxinmy.weixin4j.mp.event.TemplatesendjobfinishMessage; +import com.foxinmy.weixin4j.qy.event.BatchjobresultMessage; +import com.foxinmy.weixin4j.qy.event.EnterAgentEventMessage; +import com.foxinmy.weixin4j.type.AccountType; +import com.foxinmy.weixin4j.type.EventType; +import com.foxinmy.weixin4j.type.MessageType; + +public class DefaultMessageMatcher implements WeixinMessageMatcher { + + private final Map> messageClassMap; + + public DefaultMessageMatcher() { + messageClassMap = new HashMap>(); + initMessageClass(); + } + + private void initMessageClass() { + // ///////////////////////////////////////////////// + /******************** 普通消息 ********************/ + // ///////////////////////////////////////////////// + initGeneralMessageClass(); + // ///////////////////////////////////////////////// + /******************** 事件消息 ********************/ + // ///////////////////////////////////////////////// + initEventMessageClass(); + // ///////////////////////////////////////////////// + /***************** 公众平台事件消息 *****************/ + // ///////////////////////////////////////////////// + initMpEventMessageClass(); + // ///////////////////////////////////////////////// + /****************** 企业号事件消息 ******************/ + // ///////////////////////////////////////////////// + initQyEventMessageClass(); + + } + + private void initGeneralMessageClass() { + for (AccountType accountType : AccountType.values()) { + messageClassMap.put(new MessageKey(MessageType.text.name(), null, + accountType), TextMessage.class); + messageClassMap.put(new MessageKey(MessageType.image.name(), null, + accountType), ImageMessage.class); + messageClassMap.put(new MessageKey(MessageType.voice.name(), null, + accountType), VoiceMessage.class); + messageClassMap.put(new MessageKey(MessageType.video.name(), null, + accountType), VideoMessage.class); + messageClassMap.put(new MessageKey(MessageType.shortvideo.name(), + null, accountType), VideoMessage.class); + messageClassMap.put(new MessageKey(MessageType.location.name(), + null, accountType), LocationMessage.class); + messageClassMap.put(new MessageKey(MessageType.link.name(), null, + accountType), LinkMessage.class); + } + } + + private void initEventMessageClass() { + String messageType = MessageType.event.name(); + EventType[] eventTypes = new EventType[] { EventType.subscribe, + EventType.unsubscribe }; + for (EventType eventType : eventTypes) { + messageClassMap.put(new MessageKey(messageType, eventType.name(), + AccountType.MP), + com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class); + } + for (EventType eventType : eventTypes) { + messageClassMap.put(new MessageKey(messageType, eventType.name(), + AccountType.QY), + com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class); + } + for (AccountType accountType : AccountType.values()) { + messageClassMap.put( + new MessageKey(messageType, EventType.location.name(), + accountType), LocationEventMessage.class); + messageClassMap.put(new MessageKey(messageType, + EventType.location_select.name(), accountType), + MenuLocationEventMessage.class); + for (EventType eventType : new EventType[] { EventType.click, + EventType.view }) { + messageClassMap.put( + new MessageKey(messageType, eventType.name(), + accountType), MenuEventMessage.class); + } + for (EventType eventType : new EventType[] { + EventType.scancode_push, EventType.scancode_waitmsg }) { + messageClassMap.put( + new MessageKey(messageType, eventType.name(), + accountType), MenuScanEventMessage.class); + } + for (EventType eventType : new EventType[] { + EventType.pic_sysphoto, EventType.pic_photo_or_album, + EventType.pic_weixin }) { + messageClassMap.put( + new MessageKey(messageType, eventType.name(), + accountType), MenuPhotoEventMessage.class); + } + } + } + + private void initMpEventMessageClass() { + String messageType = MessageType.event.name(); + AccountType accountType = AccountType.MP; + messageClassMap.put(new MessageKey(messageType, EventType.scan.name(), + accountType), + com.foxinmy.weixin4j.mp.event.ScanEventMessage.class); + messageClassMap.put(new MessageKey(messageType, + EventType.masssendjobfinish.name(), accountType), + MassEventMessage.class); + messageClassMap.put(new MessageKey(messageType, + EventType.templatesendjobfinish.name(), accountType), + TemplatesendjobfinishMessage.class); + messageClassMap.put(new MessageKey(messageType, + EventType.kf_create_session.name(), accountType), + KfCreateEventMessage.class); + messageClassMap.put(new MessageKey(messageType, + EventType.kf_close_session.name(), accountType), + KfCloseEventMessage.class); + messageClassMap.put(new MessageKey(messageType, + EventType.kf_switch_session.name(), accountType), + KfSwitchEventMessage.class); + } + + private void initQyEventMessageClass() { + String messageType = MessageType.event.name(); + AccountType accountType = AccountType.QY; + messageClassMap.put(new MessageKey(messageType, + EventType.batch_job_result.name(), accountType), + BatchjobresultMessage.class); + messageClassMap.put( + new MessageKey(messageType, EventType.enter_agent.name(), + accountType), EnterAgentEventMessage.class); + } + + @Override + public Class match(MessageKey messageKey) { + return messageClassMap.get(messageKey); + } + + @Override + public void regist(MessageKey messageKey, Class messageClass) { + Class clazz = messageClassMap.get(messageKey); + if (clazz != null) { + throw new IllegalArgumentException("duplicate messagekey '" + + messageKey + "' define for " + clazz); + } + messageClassMap.put(messageKey, messageClass); + } +} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/MessageKey.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/MessageKey.java new file mode 100644 index 00000000..85ea7118 --- /dev/null +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/MessageKey.java @@ -0,0 +1,88 @@ +package com.foxinmy.weixin4j.dispatcher; + +import java.io.Serializable; + +import com.foxinmy.weixin4j.type.AccountType; +import com.foxinmy.weixin4j.util.StringUtil; + +/** + * 微信消息key + * + * @className MessageKey + * @author jy + * @date 2015年6月9日 + * @since JDK 1.7 + * @see + */ +public class MessageKey implements Serializable { + + private static final long serialVersionUID = -691330687850400289L; + + private String messageType; + private String eventType; + private AccountType accountType; + + public MessageKey(String messageType, String eventType, + AccountType accountType) { + this.messageType = messageType; + this.eventType = eventType; + this.accountType = accountType; + } + + public String getMessageType() { + return messageType; + } + + public String getEventType() { + return eventType; + } + + public AccountType getAccountType() { + return accountType; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((accountType == null) ? 0 : accountType.hashCode()); + result = prime * result + + ((StringUtil.isBlank(eventType)) ? 0 : eventType.hashCode()); + result = prime + * result + + ((StringUtil.isBlank(messageType)) ? 0 : messageType + .hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MessageKey other = (MessageKey) obj; + if (accountType != other.accountType) + return false; + if (eventType == null) { + if (other.eventType != null) + return false; + } else if (!eventType.equalsIgnoreCase(other.eventType)) + return false; + if (messageType == null) { + if (other.messageType != null) + return false; + } else if (!messageType.equalsIgnoreCase(other.messageType)) + return false; + return true; + } + + @Override + public String toString() { + return "MessageKey [messageType=" + messageType + ", eventType=" + + eventType + ", accountType=" + accountType + "]"; + } +} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java index c9efb3b1..b8513d11 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java @@ -27,11 +27,8 @@ import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.handler.MessageHandlerAdapter; import com.foxinmy.weixin4j.handler.WeixinMessageHandler; import com.foxinmy.weixin4j.interceptor.WeixinMessageInterceptor; -import com.foxinmy.weixin4j.messagekey.DefaultMessageKeyDefiner; -import com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner; import com.foxinmy.weixin4j.request.WeixinRequest; import com.foxinmy.weixin4j.response.WeixinResponse; -import com.foxinmy.weixin4j.type.AccountType; import com.foxinmy.weixin4j.util.ClassUtil; import com.foxinmy.weixin4j.util.Consts; import com.foxinmy.weixin4j.util.HttpUtil; @@ -48,7 +45,6 @@ import com.foxinmy.weixin4j.xml.CruxMessageHandler; * @see com.foxinmy.weixin4j.handler.WeixinMessageHandler * @see com.foxinmy.weixin4j.interceptor.WeixinMessageInterceptor * @see com.foxinmy.weixin4j.dispatcher.WeixinMessageMatcher - * @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner * @see com.foxinmy.weixin4j.dispatcher.MessageHandlerExecutor * @see com.foxinmy.weixin4j.dispatcher.BeanFactory */ @@ -86,23 +82,18 @@ public class WeixinMessageDispatcher { * 消息匹配 */ private WeixinMessageMatcher messageMatcher; - /** - * 消息key - */ - private WeixinMessageKeyDefiner messageKeyDefiner; /** * 消息转换 */ private Map, Unmarshaller> messageUnmarshaller; public WeixinMessageDispatcher() { - this(new DefaultMessageKeyDefiner()); + this(new DefaultMessageMatcher()); } - public WeixinMessageDispatcher(WeixinMessageKeyDefiner messageKeyDefiner) { - messageMatcher = new WeixinMessageMatcher(messageKeyDefiner); - messageUnmarshaller = new HashMap, Unmarshaller>(); - this.messageKeyDefiner = messageKeyDefiner; + public WeixinMessageDispatcher(WeixinMessageMatcher messageMatcher) { + this.messageMatcher = messageMatcher; + this.messageUnmarshaller = new HashMap, Unmarshaller>(); } /** @@ -119,16 +110,15 @@ public class WeixinMessageDispatcher { public void doDispatch(final ChannelHandlerContext context, final WeixinRequest request, final CruxMessageHandler cruxMessage) throws WeixinException { - String messageKey = messageKeyDefiner.defineMessageKey( - cruxMessage.getMsgType(), cruxMessage.getEventType(), - cruxMessage.getAccountType()); - Class targetClass = messageMatcher.find(messageKey); + MessageKey messageKey = new MessageKey(cruxMessage.getMsgType(), + cruxMessage.getEventType(), cruxMessage.getAccountType()); + Class targetClass = messageMatcher.match(messageKey); Object message = request.getOriginalContent(); if (targetClass != null) { message = messageRead(request.getOriginalContent(), targetClass); } - logger.info("define [{}] messageKey matched [{}] unmarshal to {}", - messageKey, targetClass, message); + logger.info("define '{}' matched '{}'", messageKey, + targetClass); MessageHandlerExecutor handlerExecutor = getHandlerExecutor(context, request, messageKey, message); if (handlerExecutor == null @@ -186,7 +176,7 @@ public class WeixinMessageDispatcher { */ protected MessageHandlerExecutor getHandlerExecutor( ChannelHandlerContext context, WeixinRequest request, - String messageKey, Object message) throws WeixinException { + MessageKey messageKey, Object message) throws WeixinException { WeixinMessageHandler messageHandler = null; WeixinMessageHandler[] messageHandlers = getMessageHandlers(); if (messageHandlers == null) { @@ -195,11 +185,6 @@ public class WeixinMessageDispatcher { for (WeixinMessageHandler handler : messageHandlers) { if (handler instanceof MessageHandlerAdapter) { Class genericType = genericTypeRead(handler); - if (!messageMatcher.match(genericType)) { - message = messageRead(request.getOriginalContent(), - genericType); - messageMatcher.regist(messageKey, genericType); - } if (genericType == message.getClass() && handler.canHandle(request, message)) { messageHandler = handler; @@ -268,7 +253,6 @@ public class WeixinMessageDispatcher { } } return this.messageHandlers; - } /** @@ -421,21 +405,11 @@ public class WeixinMessageDispatcher { this.beanFactory = beanFactory; } - public void registMessageMatch(String messageType, String eventType, - AccountType accountType, Class messageClass) { - registMessageMatch(messageKeyDefiner.defineMessageKey(messageType, - eventType, accountType), messageClass); - } - - public void registMessageMatch(String messageKey, Class messageClass) { + public void registMessageClass(MessageKey messageKey, Class messageClass) { messageMatcher.regist(messageKey, messageClass); } public WeixinMessageMatcher getMessageMatcher() { return this.messageMatcher; } - - public WeixinMessageKeyDefiner getMessageKeyDefiner() { - return this.messageKeyDefiner; - } } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java new file mode 100644 index 00000000..16916e23 --- /dev/null +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java @@ -0,0 +1,31 @@ +package com.foxinmy.weixin4j.dispatcher; + +/** + * 微信消息匹配 + * + * @className WeixinMessageMatcher + * @author jy + * @date 2015年5月17日 + * @since JDK 1.7 + * @see DefaultMessageMatcher + */ +public interface WeixinMessageMatcher { + /** + * 匹配消息类型 + * + * @param messageKey + * 消息key + * @return 消息类型 + */ + public Class match(MessageKey messageKey); + + /** + * 注册消息类型「程序没有及时更新而微信又产生了新的消息类型」 + * + * @param messageKey + * 消息key + * @param messageClass + * 消息类型 + */ + public void regist(MessageKey messageKey, Class messageClass); +} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/DefaultMessageKeyDefiner.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/DefaultMessageKeyDefiner.java deleted file mode 100644 index a1598966..00000000 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/DefaultMessageKeyDefiner.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.foxinmy.weixin4j.messagekey; - -import com.foxinmy.weixin4j.type.AccountType; -import com.foxinmy.weixin4j.type.MessageType; -import com.foxinmy.weixin4j.util.StringUtil; - -/** - * 默认的messageKey实现 - * - *

- * 普通消息key=messageType.toLowerCase();
- * 事件消息key=accountType:eventType:messageType.toLowerCase(); - *

- * - * @className DefaultMessageKeyDefiner - * @author jy - * @date 2015年5月18日 - * @since JDK 1.7 - * @see - */ -public class DefaultMessageKeyDefiner implements WeixinMessageKeyDefiner { - - private static final String MESSAGEKEY_SEPARATOR = ":"; - - @Override - public String defineMessageKey(String messageType, String eventType, - AccountType accountType) { - StringBuilder messageKey = new StringBuilder(); - if (!StringUtil.isBlank(messageType)) { - messageKey.append(messageType.toLowerCase()); - if (!messageType.trim().equalsIgnoreCase(MessageType.event.name())) { - return messageKey.toString(); - } - } - if (accountType != null) { - messageKey.insert(0, String.format("%s%s", accountType.name() - .toLowerCase(), MESSAGEKEY_SEPARATOR)); - } - if (!StringUtil.isBlank(eventType)) { - messageKey.append(MESSAGEKEY_SEPARATOR).append( - eventType.toLowerCase()); - } - return messageKey.toString(); - } -} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageKeyDefiner.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageKeyDefiner.java deleted file mode 100644 index 2612ca85..00000000 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageKeyDefiner.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.foxinmy.weixin4j.messagekey; - -import com.foxinmy.weixin4j.type.AccountType; - -/** - * 微信消息key的定义 - * - * @className WeixinMessageKeyDefiner - * @author jy - * @date 2015年5月18日 - * @since JDK 1.7 - * @see com.foxinmy.weixin4j.messagekey.DefaultMessageKeyDefiner - */ -public interface WeixinMessageKeyDefiner { - - /** - * 声明messageKey - * - * @param messageType - * 消息类型 - * @param eventType - * 事件类型 - * @param accountType - * 账号类型 - * @return messageKey - */ - public String defineMessageKey(String messageType, String eventType, - AccountType accountType); -} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java deleted file mode 100644 index f8f1d678..00000000 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.foxinmy.weixin4j.messagekey; - -/** - * 微信消息匹配 - * - * @className WeixinMessageMatcher - * @author jy - * @date 2015年5月17日 - * @since JDK 1.7 - * @see com.foxinmy.weixin4j.request.WeixinMessage - * @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner - */ -public interface WeixinMessageMatcher { - - /** - * 消息是否匹配 - * - * @param messageKeyOrMessageClass - * 消息key或者消息类型 - * @return 匹配结果 - */ - public boolean match(Object messageKeyOrMessageClass); - - /** - * 匹配到消息类型 - * - * @param messageKey - * 消息key - * @return 消息类型 - */ - public Class match(String messageKey); - - /** - * 注册messageClass - * - * @param messageKey - * 消息key - * @param messageClass - * 消息类型 - */ - public void regist(String messageKey, Class messageClass); -} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/mp/event/KfCloseEventMessage.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/mp/event/KfCloseEventMessage.java index ef0b3139..61ef990d 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/mp/event/KfCloseEventMessage.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/mp/event/KfCloseEventMessage.java @@ -18,7 +18,7 @@ import com.foxinmy.weixin4j.type.EventType; public class KfCloseEventMessage extends EventMessage { private static final long serialVersionUID = 3644449346935205541L; - + public KfCloseEventMessage() { super(EventType.kf_close_session.name()); } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java index 70f093dc..0a9a1eef 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java @@ -50,7 +50,7 @@ public class WeixinRequestHandler extends @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { ctx.close(); - logger.error("catch the exception:{}", cause.getMessage()); + logger.error("catch the exception:{}", cause); } @Override diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java index 43c5aafb..885ba701 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java @@ -15,14 +15,14 @@ import java.util.LinkedList; import java.util.List; import com.foxinmy.weixin4j.dispatcher.BeanFactory; +import com.foxinmy.weixin4j.dispatcher.DefaultMessageMatcher; +import com.foxinmy.weixin4j.dispatcher.MessageKey; import com.foxinmy.weixin4j.dispatcher.WeixinMessageDispatcher; +import com.foxinmy.weixin4j.dispatcher.WeixinMessageMatcher; import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.handler.WeixinMessageHandler; import com.foxinmy.weixin4j.interceptor.WeixinMessageInterceptor; -import com.foxinmy.weixin4j.messagekey.DefaultMessageKeyDefiner; -import com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner; import com.foxinmy.weixin4j.socket.WeixinServerInitializer; -import com.foxinmy.weixin4j.type.AccountType; import com.foxinmy.weixin4j.util.AesToken; /** @@ -100,15 +100,15 @@ public final class WeixinServerBootstrap { } public WeixinServerBootstrap(AesToken aesToken) { - this(aesToken, new DefaultMessageKeyDefiner()); + this(aesToken, new DefaultMessageMatcher()); } public WeixinServerBootstrap(AesToken aesToken, - WeixinMessageKeyDefiner messageKeyDefiner) { + WeixinMessageMatcher messageMatcher) { this.aesToken = aesToken; this.messageHandlerList = new LinkedList(); this.messageInterceptorList = new LinkedList(); - this.messageDispatcher = new WeixinMessageDispatcher(messageKeyDefiner); + this.messageDispatcher = new WeixinMessageDispatcher(messageMatcher); } /** @@ -251,40 +251,18 @@ public final class WeixinServerBootstrap { return this; } - /** - * 注册消息类型 - * - * @param messageType - * 消息类型 - * @param eventType - * 事件类型 - * @param accountType - * 账号类型 - * @param messageClass - * 消息类 - * @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner - * @return - */ - public WeixinServerBootstrap registMessageClass(String messageType, - String eventType, AccountType accountType, Class messageClass) { - messageDispatcher.registMessageMatch(messageType, eventType, - accountType, messageClass); - return this; - } - /** * 注册消息类型 * * @param messageKey - * 消息的key + * 消息key * @param messageClass * 消息类 - * @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner * @return */ - public WeixinServerBootstrap registMessageClass(String messageKey, + public WeixinServerBootstrap registMessageClass(MessageKey messageKey, Class messageClass) { - messageDispatcher.registMessageMatch(messageKey, messageClass); + messageDispatcher.registMessageClass(messageKey, messageClass); return this; } } \ No newline at end of file diff --git a/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java b/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java index a5a1a57e..62b4d202 100644 --- a/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java +++ b/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java @@ -109,6 +109,6 @@ public class MessageServerStartup { } public static void main(String[] args) throws Exception { - new MessageServerStartup().test1(); + new MessageServerStartup().test3(); } }