Skip to content

Commit 4b8aa69

Browse files
committed
issue #77 用matcher做新的猜数字游戏,代码更简单
1 parent 36dad7b commit 4b8aa69

File tree

4 files changed

+137
-129
lines changed

4 files changed

+137
-129
lines changed

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java

Lines changed: 0 additions & 71 deletions
This file was deleted.
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package me.chanjar.weixin.mp.demo;
2+
3+
import me.chanjar.weixin.common.exception.WxErrorException;
4+
import me.chanjar.weixin.common.session.WxSession;
5+
import me.chanjar.weixin.common.session.WxSessionManager;
6+
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
7+
import me.chanjar.weixin.mp.api.WxMpMessageMatcher;
8+
import me.chanjar.weixin.mp.api.WxMpService;
9+
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
10+
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
11+
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
12+
13+
import java.util.Map;
14+
import java.util.Random;
15+
import java.util.regex.Pattern;
16+
17+
public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMatcher {
18+
19+
private Random random = new Random();
20+
21+
private Pattern pattern = Pattern.compile("\\d+");
22+
23+
@Override
24+
public boolean match(WxMpXmlMessage message) {
25+
return isUserWantGuess(message) || isUserAnswering(message);
26+
}
27+
28+
private boolean isUserWantGuess(WxMpXmlMessage message) {
29+
return "猜数字".equals(message.getContent());
30+
}
31+
32+
private boolean isUserAnswering(WxMpXmlMessage message) {
33+
return pattern.matcher(message.getContent()).matches();
34+
}
35+
36+
@Override
37+
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
38+
WxSessionManager sessionManager) {
39+
40+
if (isUserWantGuess(wxMessage)) {
41+
letsGo(wxMessage, wxMpService, sessionManager);
42+
}
43+
44+
if (isUserAnswering(wxMessage)) {
45+
giveHint(wxMessage, wxMpService, sessionManager);
46+
}
47+
48+
return null;
49+
50+
}
51+
52+
protected void letsGo(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) {
53+
WxSession session = sessionManager.getSession(wxMessage.getFromUserName());
54+
if (session.getAttribute("guessing") == null) {
55+
WxMpCustomMessage m = WxMpCustomMessage
56+
.TEXT()
57+
.toUser(wxMessage.getFromUserName())
58+
.content("请猜一个100以内的数字")
59+
.build();
60+
try {
61+
wxMpService.customMessageSend(m);
62+
} catch (WxErrorException e) {
63+
e.printStackTrace();
64+
}
65+
} else {
66+
WxMpCustomMessage m = WxMpCustomMessage
67+
.TEXT()
68+
.toUser(wxMessage.getFromUserName())
69+
.content("放弃了吗?那请重新猜一个100以内的数字")
70+
.build();
71+
try {
72+
wxMpService.customMessageSend(m);
73+
} catch (WxErrorException e) {
74+
e.printStackTrace();
75+
}
76+
}
77+
78+
session.setAttribute("guessing", Boolean.TRUE);
79+
session.setAttribute("number", random.nextInt(100));
80+
}
81+
82+
83+
protected void giveHint(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) {
84+
85+
WxSession session = sessionManager.getSession(wxMessage.getFromUserName());
86+
87+
if (session.getAttribute("guessing") == null) {
88+
return;
89+
}
90+
boolean guessing = (Boolean) session.getAttribute("guessing");
91+
if (!guessing) {
92+
return;
93+
}
94+
95+
int answer = (Integer) session.getAttribute("number");
96+
int guessNumber = Integer.valueOf(wxMessage.getContent());
97+
if (guessNumber < answer) {
98+
WxMpCustomMessage m = WxMpCustomMessage
99+
.TEXT()
100+
.toUser(wxMessage.getFromUserName())
101+
.content("小了")
102+
.build();
103+
try {
104+
wxMpService.customMessageSend(m);
105+
} catch (WxErrorException e) {
106+
e.printStackTrace();
107+
}
108+
109+
} else if (guessNumber > answer) {
110+
WxMpCustomMessage m = WxMpCustomMessage
111+
.TEXT()
112+
.toUser(wxMessage.getFromUserName())
113+
.content("大了")
114+
.build();
115+
try {
116+
wxMpService.customMessageSend(m);
117+
} catch (WxErrorException e) {
118+
e.printStackTrace();
119+
}
120+
} else {
121+
WxMpCustomMessage m = WxMpCustomMessage
122+
.TEXT()
123+
.toUser(wxMessage.getFromUserName())
124+
.content("Bingo!")
125+
.build();
126+
try {
127+
session.removeAttribute("guessing");
128+
wxMpService.customMessageSend(m);
129+
} catch (WxErrorException e) {
130+
e.printStackTrace();
131+
}
132+
}
133+
134+
}
135+
}

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java

Lines changed: 0 additions & 54 deletions
This file was deleted.

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,12 @@ private static void initWeixin() {
4444
WxMpMessageHandler textHandler = new DemoTextHandler();
4545
WxMpMessageHandler imageHandler = new DemoImageHandler();
4646
WxMpMessageHandler oauth2handler = new DemoOAuth2Handler();
47-
WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler();
48-
DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler();
47+
DemoGuessNumberHandler guessNumberHandler = new DemoGuessNumberHandler();
4948

5049
wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
5150
wxMpMessageRouter
5251
.rule().handler(logHandler).next()
53-
.rule().msgType(WxConsts.XML_MSG_TEXT).content("猜数字").handler(startGuessNumberHandler).next()
54-
.rule().msgType(WxConsts.XML_MSG_TEXT).rContent("\\d+").handler(checkAnswerHandler).end()
52+
.rule().msgType(WxConsts.XML_MSG_TEXT).matcher(guessNumberHandler).handler(guessNumberHandler).end()
5553
.rule().async(false).content("哈哈").handler(textHandler).end()
5654
.rule().async(false).content("图片").handler(imageHandler).end()
5755
.rule().async(false).content("oauth").handler(oauth2handler).end()

0 commit comments

Comments
 (0)