10.2.5 CoreService类的实现

在CoreService类中,最重要的就是对文本消息的处理,根据不同请求调用GameService类的不同方法。当用户发送"help"时,回复“猜数字”游戏的玩法;当用户发送"score"时,回复用户的游戏战绩;当用户发送无重复的4位数字,向用户回复本局游戏的所有猜测结果。CoreService类的完整代码如下:

  1. package org.liufeng.course.service;
  2.  
  3. import java.util.Date;
  4. import java.util.Map;
  5. import javax.servlet.http.HttpServletRequest;
  6. import org.liufeng.course.message.resp.TextMessage;
  7. import org.liufeng.course.util.GameUtil;
  8. import org.liufeng.course.util.MessageUtil;
  9.  
  10. /**
  11. * 核心服务类
  12. *
  13. * @author liufeng
  14. * @date 2013-09-29
  15. */
  16. public class CoreService {
  17. /**
  18. * 处理微信发来的请求
  19. *
  20. * @param request
  21. * @return xml
  22. */
  23. public static String processRequest(HttpServletRequest request) {
  24. // xml格式的消息数据
  25. String respXml = null;
  26. // 默认返回的文本消息内容
  27. String respContent = GameService.getGameRule();
  28. try {
  29. // 调用parseXml方法解析请求消息
  30. Map<String, String> requestMap = MessageUtil.parseXml(request);
  31. // 发送方账号
  32. String fromUserName = requestMap.get("FromUserName");
  33. // 开发者微信号
  34. String toUserName = requestMap.get("ToUserName");
  35. // 消息类型
  36. String msgType = requestMap.get("MsgType");
  37.  
  38. // 回复文本消息
  39. TextMessage textMessage = new TextMessage();
  40. textMessage.setToUserName(fromUserName);
  41. textMessage.setFromUserName(toUserName);
  42. textMessage.setCreateTime(new Date().getTime());
  43. textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
  44.  
  45. // 文本消息
  46. if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
  47. String content = requestMap.get("Content").trim();
  48. // 查看游戏帮助
  49. if (content.equalsIgnoreCase("help")) {
  50. respContent = GameService.getGameRule();
  51. }
  52. // 查看游戏战绩
  53. else if (content.equalsIgnoreCase("score")) {
  54. respContent = GameService.getUserScore(request, fromUserName);
  55. }
  56. // 如果是4位数字并且无重复
  57. else if (GameUtil.verifyNumber(content) && !GameUtil.verifyRepeat(content)) {
  58. respContent = GameService.process(request, fromUserName, content);
  59. }
  60. // 输入的格式错误
  61. else {
  62. respContent = "请输入4个不重复的数字,例如:0269";
  63. }
  64. }
  65. // 事件推送
  66. else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
  67. // 事件类型
  68. String eventType = requestMap.get("Event");
  69. // 关注
  70. if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
  71. respContent = "欢迎关注猜数字游戏!\n回复"help"查看游戏玩法。";
  72. }
  73. }
  74. // 设置文本消息的内容
  75. textMessage.setContent(respContent);
  76. // 将文本消息对象转换成xml
  77. respXml = MessageUtil.messageToXml(textMessage);
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. }
  81. return respXml;
  82. }
  83. }