From 4b8aa69ccabd3ba8d47f345ea9ba4fc8b2fccffd Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Thu, 22 Jan 2015 21:27:38 +0800 Subject: [PATCH] =?UTF-8?q?issue=20#77=20=E7=94=A8matcher=E5=81=9A?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E7=8C=9C=E6=95=B0=E5=AD=97=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=EF=BC=8C=E4=BB=A3=E7=A0=81=E6=9B=B4=E7=AE=80=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mp/demo/DemoCheckAnswerHandler.java | 71 --------- .../mp/demo/DemoGuessNumberHandler.java | 135 ++++++++++++++++++ .../mp/demo/DemoStartGuessNumberHandler.java | 54 ------- .../weixin/mp/demo/WxMpDemoServer.java | 6 +- 4 files changed, 137 insertions(+), 129 deletions(-) delete mode 100644 weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java create mode 100644 weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoGuessNumberHandler.java delete mode 100644 weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java deleted file mode 100644 index d23adb366..000000000 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java +++ /dev/null @@ -1,71 +0,0 @@ -package me.chanjar.weixin.mp.demo; - -import me.chanjar.weixin.common.exception.WxErrorException; -import me.chanjar.weixin.common.session.WxSession; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.WxMpCustomMessage; -import me.chanjar.weixin.mp.bean.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; - -import java.util.Map; - -public class DemoCheckAnswerHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - - WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); - - if (session.getAttribute("guessing") == null) { - return null; - } - boolean guessing = (Boolean) session.getAttribute("guessing"); - if (!guessing) { - return null; - } - - int answer = (Integer) session.getAttribute("number"); - int guessNumber = Integer.valueOf(wxMessage.getContent()); - if (guessNumber < answer) { - WxMpCustomMessage m = WxMpCustomMessage - .TEXT() - .toUser(wxMessage.getFromUserName()) - .content("小了") - .build(); - try { - wxMpService.customMessageSend(m); - } catch (WxErrorException e) { - e.printStackTrace(); - } - - } else if (guessNumber > answer) { - WxMpCustomMessage m = WxMpCustomMessage - .TEXT() - .toUser(wxMessage.getFromUserName()) - .content("大了") - .build(); - try { - wxMpService.customMessageSend(m); - } catch (WxErrorException e) { - e.printStackTrace(); - } - } else { - WxMpCustomMessage m = WxMpCustomMessage - .TEXT() - .toUser(wxMessage.getFromUserName()) - .content("Bingo!") - .build(); - try { - session.removeAttribute("guessing"); - wxMpService.customMessageSend(m); - } catch (WxErrorException e) { - e.printStackTrace(); - } - } - return null; - } - -} diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoGuessNumberHandler.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoGuessNumberHandler.java new file mode 100644 index 000000000..449a735d7 --- /dev/null +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoGuessNumberHandler.java @@ -0,0 +1,135 @@ +package me.chanjar.weixin.mp.demo; + +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.session.WxSession; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpMessageMatcher; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.WxMpCustomMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; + +import java.util.Map; +import java.util.Random; +import java.util.regex.Pattern; + +public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMatcher { + + private Random random = new Random(); + + private Pattern pattern = Pattern.compile("\\d+"); + + @Override + public boolean match(WxMpXmlMessage message) { + return isUserWantGuess(message) || isUserAnswering(message); + } + + private boolean isUserWantGuess(WxMpXmlMessage message) { + return "猜数字".equals(message.getContent()); + } + + private boolean isUserAnswering(WxMpXmlMessage message) { + return pattern.matcher(message.getContent()).matches(); + } + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + + if (isUserWantGuess(wxMessage)) { + letsGo(wxMessage, wxMpService, sessionManager); + } + + if (isUserAnswering(wxMessage)) { + giveHint(wxMessage, wxMpService, sessionManager); + } + + return null; + + } + + protected void letsGo(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) { + WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); + if (session.getAttribute("guessing") == null) { + WxMpCustomMessage m = WxMpCustomMessage + .TEXT() + .toUser(wxMessage.getFromUserName()) + .content("请猜一个100以内的数字") + .build(); + try { + wxMpService.customMessageSend(m); + } catch (WxErrorException e) { + e.printStackTrace(); + } + } else { + WxMpCustomMessage m = WxMpCustomMessage + .TEXT() + .toUser(wxMessage.getFromUserName()) + .content("放弃了吗?那请重新猜一个100以内的数字") + .build(); + try { + wxMpService.customMessageSend(m); + } catch (WxErrorException e) { + e.printStackTrace(); + } + } + + session.setAttribute("guessing", Boolean.TRUE); + session.setAttribute("number", random.nextInt(100)); + } + + + protected void giveHint(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) { + + WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); + + if (session.getAttribute("guessing") == null) { + return; + } + boolean guessing = (Boolean) session.getAttribute("guessing"); + if (!guessing) { + return; + } + + int answer = (Integer) session.getAttribute("number"); + int guessNumber = Integer.valueOf(wxMessage.getContent()); + if (guessNumber < answer) { + WxMpCustomMessage m = WxMpCustomMessage + .TEXT() + .toUser(wxMessage.getFromUserName()) + .content("小了") + .build(); + try { + wxMpService.customMessageSend(m); + } catch (WxErrorException e) { + e.printStackTrace(); + } + + } else if (guessNumber > answer) { + WxMpCustomMessage m = WxMpCustomMessage + .TEXT() + .toUser(wxMessage.getFromUserName()) + .content("大了") + .build(); + try { + wxMpService.customMessageSend(m); + } catch (WxErrorException e) { + e.printStackTrace(); + } + } else { + WxMpCustomMessage m = WxMpCustomMessage + .TEXT() + .toUser(wxMessage.getFromUserName()) + .content("Bingo!") + .build(); + try { + session.removeAttribute("guessing"); + wxMpService.customMessageSend(m); + } catch (WxErrorException e) { + e.printStackTrace(); + } + } + + } +} diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java deleted file mode 100644 index d28834f5f..000000000 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -package me.chanjar.weixin.mp.demo; - -import me.chanjar.weixin.common.exception.WxErrorException; -import me.chanjar.weixin.common.session.WxSession; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.WxMpCustomMessage; -import me.chanjar.weixin.mp.bean.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; - -import java.util.Map; -import java.util.Random; - -public class DemoStartGuessNumberHandler implements WxMpMessageHandler { - - private Random random = new Random(); - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - - WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); - - if (session.getAttribute("guessing") == null) { - WxMpCustomMessage m = WxMpCustomMessage - .TEXT() - .toUser(wxMessage.getFromUserName()) - .content("请猜一个100以内的数字") - .build(); - try { - wxMpService.customMessageSend(m); - } catch (WxErrorException e) { - e.printStackTrace(); - } - } else { - WxMpCustomMessage m = WxMpCustomMessage - .TEXT() - .toUser(wxMessage.getFromUserName()) - .content("放弃了吗?那请重新猜一个100以内的数字") - .build(); - try { - wxMpService.customMessageSend(m); - } catch (WxErrorException e) { - e.printStackTrace(); - } - } - - session.setAttribute("guessing", Boolean.TRUE); - session.setAttribute("number", random.nextInt(100)); - return null; - - } -} diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java index 1d8c5bef4..e92bd9865 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java @@ -44,14 +44,12 @@ public class WxMpDemoServer { WxMpMessageHandler textHandler = new DemoTextHandler(); WxMpMessageHandler imageHandler = new DemoImageHandler(); WxMpMessageHandler oauth2handler = new DemoOAuth2Handler(); - WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler(); - DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler(); + DemoGuessNumberHandler guessNumberHandler = new DemoGuessNumberHandler(); wxMpMessageRouter = new WxMpMessageRouter(wxMpService); wxMpMessageRouter .rule().handler(logHandler).next() - .rule().msgType(WxConsts.XML_MSG_TEXT).content("猜数字").handler(startGuessNumberHandler).next() - .rule().msgType(WxConsts.XML_MSG_TEXT).rContent("\\d+").handler(checkAnswerHandler).end() + .rule().msgType(WxConsts.XML_MSG_TEXT).matcher(guessNumberHandler).handler(guessNumberHandler).end() .rule().async(false).content("哈哈").handler(textHandler).end() .rule().async(false).content("图片").handler(imageHandler).end() .rule().async(false).content("oauth").handler(oauth2handler).end()