matcher
This commit is contained in:
parent
7f2f1d8f64
commit
8ea47f861b
@ -0,0 +1,202 @@
|
|||||||
|
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.mp.event.VerifyExpireEventMessage;
|
||||||
|
import com.foxinmy.weixin4j.mp.event.VerifyFailEventMessage;
|
||||||
|
import com.foxinmy.weixin4j.qy.event.BatchjobresultMessage;
|
||||||
|
import com.foxinmy.weixin4j.qy.event.EnterAgentEventMessage;
|
||||||
|
import com.foxinmy.weixin4j.request.WeixinMessage;
|
||||||
|
import com.foxinmy.weixin4j.type.AccountType;
|
||||||
|
import com.foxinmy.weixin4j.type.EventType;
|
||||||
|
import com.foxinmy.weixin4j.type.MessageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认MessageMatcher实现(可以改进)
|
||||||
|
*
|
||||||
|
* @className DefaultMessageMatcher
|
||||||
|
* @author jinyu(foxinmy@gmail.com)
|
||||||
|
* @date 2015年6月10日
|
||||||
|
* @since JDK 1.6
|
||||||
|
* @see
|
||||||
|
*/
|
||||||
|
public class DefaultMessageMatcher implements WeixinMessageMatcher {
|
||||||
|
|
||||||
|
private final Map<WeixinMessageKey, Class<? extends WeixinMessage>> messageClassMap;
|
||||||
|
|
||||||
|
public DefaultMessageMatcher() {
|
||||||
|
messageClassMap = new HashMap<WeixinMessageKey, Class<? extends WeixinMessage>>();
|
||||||
|
initMessageClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initMessageClass() {
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
/******************** 普通消息 ********************/
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
initGeneralMessageClass();
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
/******************** 事件消息 ********************/
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
initEventMessageClass();
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
/***************** 公众平台事件消息 *****************/
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
initMpEventMessageClass();
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
/****************** 企业号事件消息 ******************/
|
||||||
|
// /////////////////////////////////////////////////
|
||||||
|
initQyEventMessageClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initGeneralMessageClass() {
|
||||||
|
for (AccountType accountType : AccountType.values()) {
|
||||||
|
messageClassMap.put(new WeixinMessageKey(MessageType.text.name(),
|
||||||
|
null, accountType), TextMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(MessageType.image.name(),
|
||||||
|
null, accountType), ImageMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(MessageType.voice.name(),
|
||||||
|
null, accountType), VoiceMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(MessageType.video.name(),
|
||||||
|
null, accountType), VideoMessage.class);
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(MessageType.shortvideo.name(), null,
|
||||||
|
accountType), VideoMessage.class);
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(MessageType.location.name(), null,
|
||||||
|
accountType), LocationMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(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 WeixinMessageKey(messageType, eventType.name(),
|
||||||
|
AccountType.MP),
|
||||||
|
com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class);
|
||||||
|
}
|
||||||
|
for (EventType eventType : eventTypes) {
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(messageType, eventType.name(),
|
||||||
|
AccountType.QY),
|
||||||
|
com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class);
|
||||||
|
}
|
||||||
|
for (AccountType accountType : AccountType.values()) {
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.location.name(), accountType),
|
||||||
|
LocationEventMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.location_select.name(), accountType),
|
||||||
|
MenuLocationEventMessage.class);
|
||||||
|
for (EventType eventType : new EventType[] { EventType.click,
|
||||||
|
EventType.view }) {
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(messageType, eventType.name(),
|
||||||
|
accountType), MenuEventMessage.class);
|
||||||
|
}
|
||||||
|
for (EventType eventType : new EventType[] {
|
||||||
|
EventType.scancode_push, EventType.scancode_waitmsg }) {
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(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 WeixinMessageKey(messageType, eventType.name(),
|
||||||
|
accountType), MenuPhotoEventMessage.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initMpEventMessageClass() {
|
||||||
|
String messageType = MessageType.event.name();
|
||||||
|
AccountType accountType = AccountType.MP;
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(messageType, EventType.scan.name(),
|
||||||
|
accountType),
|
||||||
|
com.foxinmy.weixin4j.mp.event.ScanEventMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.masssendjobfinish.name(), accountType),
|
||||||
|
MassEventMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.templatesendjobfinish.name(), accountType),
|
||||||
|
TemplatesendjobfinishMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.kf_create_session.name(), accountType),
|
||||||
|
KfCreateEventMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.kf_close_session.name(), accountType),
|
||||||
|
KfCloseEventMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.kf_switch_session.name(), accountType),
|
||||||
|
KfSwitchEventMessage.class);
|
||||||
|
EventType[] eventTypes = new EventType[] {
|
||||||
|
EventType.qualification_verify_success,
|
||||||
|
EventType.naming_verify_success, EventType.annual_renew,
|
||||||
|
EventType.verify_expired };
|
||||||
|
for (EventType eventType : eventTypes) {
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(messageType, eventType.name(),
|
||||||
|
accountType), VerifyExpireEventMessage.class);
|
||||||
|
}
|
||||||
|
eventTypes = new EventType[] { EventType.qualification_verify_success,
|
||||||
|
EventType.naming_verify_fail };
|
||||||
|
for (EventType eventType : eventTypes) {
|
||||||
|
messageClassMap.put(
|
||||||
|
new WeixinMessageKey(messageType, eventType.name(),
|
||||||
|
accountType), VerifyFailEventMessage.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initQyEventMessageClass() {
|
||||||
|
String messageType = MessageType.event.name();
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.batch_job_result.name(), AccountType.QY),
|
||||||
|
BatchjobresultMessage.class);
|
||||||
|
messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
EventType.enter_agent.name(), AccountType.QY),
|
||||||
|
EnterAgentEventMessage.class);
|
||||||
|
//messageClassMap.put(new WeixinMessageKey(messageType,
|
||||||
|
// EventType.suite.name(), AccountType.QY),
|
||||||
|
//SuiteMessage.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends WeixinMessage> match(WeixinMessageKey messageKey) {
|
||||||
|
return messageClassMap.get(messageKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void regist(WeixinMessageKey messageKey,
|
||||||
|
Class<? extends WeixinMessage> messageClass) {
|
||||||
|
Class<?> clazz = match(messageKey);
|
||||||
|
if (clazz != null) {
|
||||||
|
throw new IllegalArgumentException("duplicate messagekey '"
|
||||||
|
+ messageKey + "' define for " + clazz);
|
||||||
|
}
|
||||||
|
messageClassMap.put(messageKey, messageClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user