소스 검색

消息路由器路由时可以传入context (#245)

master
Hyseen 8 년 전
committed by Binary Wang
부모
커밋
563302eef6
4개의 변경된 파일35개의 추가작업 그리고 10개의 파일을 삭제
  1. +16
    -3
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java
  2. +5
    -2
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouterRule.java
  3. +9
    -3
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
  4. +5
    -2
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouterRule.java

+ 16
- 3
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java 파일 보기

@@ -14,7 +14,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -135,8 +137,9 @@ public class WxCpMessageRouter {
* 处理微信消息
*
* @param wxMessage
* @param context
*/
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage, final Map<String, Object> context) {
if (isDuplicateMessage(wxMessage)) {
// 如果是重复消息,那么就不做处理
return null;
@@ -166,12 +169,12 @@ public class WxCpMessageRouter {
this.executorService.submit(new Runnable() {
@Override
public void run() {
rule.service(wxMessage, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler);
rule.service(wxMessage, context, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler);
}
})
);
} else {
res = rule.service(wxMessage, this.wxCpService, this.sessionManager, this.exceptionHandler);
res = rule.service(wxMessage, context, this.wxCpService, this.sessionManager, this.exceptionHandler);
// 在同步操作结束,session访问结束
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName());
sessionEndAccess(wxMessage);
@@ -200,6 +203,16 @@ public class WxCpMessageRouter {
return res;
}


/**
* 处理微信消息
*
* @param wxMessage
*/
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
return this.route(wxMessage, new HashMap<String, Object>());
}

protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) {

String messageId = "";


+ 5
- 2
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouterRule.java 파일 보기

@@ -229,13 +229,16 @@ public class WxCpMessageRouterRule {
* @return true 代表继续执行别的router,false 代表停止执行别的router
*/
protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage,
Map<String, Object> context,
WxCpService wxCpService,
WxSessionManager sessionManager,
WxErrorExceptionHandler exceptionHandler) {

try {
if (context == null) {
context = new HashMap<>();
}

Map<String, Object> context = new HashMap<>();
try {
// 如果拦截器不通过
for (WxCpMessageInterceptor interceptor : this.interceptors) {
if (!interceptor.intercept(wxMessage, context, wxCpService, sessionManager)) {


+ 9
- 3
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java 파일 보기

@@ -14,7 +14,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -126,7 +128,7 @@ public class WxMpMessageRouter {
/**
* 处理微信消息
*/
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, final Map<String, Object> context) {
if (isMsgDuplicated(wxMessage)) {
// 如果是重复消息,那么就不做处理
return null;
@@ -156,12 +158,12 @@ public class WxMpMessageRouter {
this.executorService.submit(new Runnable() {
@Override
public void run() {
rule.service(wxMessage, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler);
rule.service(wxMessage, context, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler);
}
})
);
} else {
res = rule.service(wxMessage, this.wxMpService, this.sessionManager, this.exceptionHandler);
res = rule.service(wxMessage, context, this.wxMpService, this.sessionManager, this.exceptionHandler);
// 在同步操作结束,session访问结束
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser());
sessionEndAccess(wxMessage);
@@ -188,6 +190,10 @@ public class WxMpMessageRouter {
return res;
}

public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
return this.route(wxMessage, new HashMap<String, Object>());
}

protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) {

StringBuilder messageId = new StringBuilder();


+ 5
- 2
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouterRule.java 파일 보기

@@ -193,13 +193,16 @@ public class WxMpMessageRouterRule {
* @return true 代表继续执行别的router,false 代表停止执行别的router
*/
protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage,
Map<String, Object> context,
WxMpService wxMpService,
WxSessionManager sessionManager,
WxErrorExceptionHandler exceptionHandler) {

try {
if (context == null) {
context = new HashMap<>();
}

Map<String, Object> context = new HashMap<>();
try {
// 如果拦截器不通过
for (WxMpMessageInterceptor interceptor : this.interceptors) {
if (!interceptor.intercept(wxMessage, context, wxMpService, sessionManager)) {


불러오는 중...
취소
저장