先吐槽一下csdn 进了回收站还拿不出来了!!!我直接从回收站复制了!
Service_base
除了前一篇提到的主动请求部分,我们还需要考虑被动的部分。即对用户的事件、请求等进行返回消息。在整体的开发框架中,Service_base是服务提供的基类。对ReceiveMsg对象的内容,进行逻辑处理,返回SendMsg对象。它的子类需要继承实现excute()方法。
Service_base的内容我没有做过多更改,大体的代码如下:
Service_base的主体代码如下:
- package service;
- import java.io.PrintWriter;
- import java.lang.reflect.InvocationTargetException;
- import util.FacSendMsg;
- import msgbean.ReceiveMsg;
- import msgbean.SendMsg;
- public abstract class Service_base {
- <span style="white-space:pre"> </span>
- <span style="white-space:pre"> </span>//继承该类 并从MSG中得到信息,实现excute方法 补全一个SMSG对象。
- <span style="white-space:pre"> </span>private FacSendMsg facsendmsg = new FacSendMsg();
- <span style="white-space:pre"> </span>protected SendMsg smsg ;
- <span style="white-space:pre"> </span>protected static final int error = 1;
- <span style="white-space:pre"> </span>protected static final int success = 0;
- <span style="white-space:pre"> </span>protected String xmlresult = "";
- <span style="white-space:pre"> </span>// service的基类
- <span style="white-space:pre"> </span>protected ReceiveMsg msg;
- <span style="white-space:pre"> </span>public ReceiveMsg getMsg() {
- <span style="white-space:pre"> </span>return msg;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>public void setMsg(ReceiveMsg msg) {
- <span style="white-space:pre"> </span>this.msg = msg;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>public String getResult() {
- <span style="white-space:pre"> </span>return xmlresult;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>public void setResult(String result) {
- <span style="white-space:pre"> </span>this.xmlresult = result;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>public int doing(PrintWriter out) {
- <span style="white-space:pre"> </span>// 返回初步的回复数据 ,是一个smsg格式;
- <span style="white-space:pre"> </span>smsg=excute();
- <span style="white-space:pre"> </span>try {
- <span style="white-space:pre"> </span>// smsg转xml,smsg为空表示不产生回复。回一个空的200状态
- <span style="white-space:pre"> </span>if (smsg != null)
- <span style="white-space:pre"> </span>xmlresult = facsendmsg.msgtoxml(smsg);
- <span style="white-space:pre"> </span>out.print(xmlresult);
- <span style="white-space:pre"> </span>} catch (Exception e) {
- <span style="white-space:pre"> </span>e.printStackTrace();
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>return success;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>protected abstract SendMsg excute();
- }
Service_event
这里我主要写了对事件的处理,包括click类型的文字窗口事件,针对不同按键写弹出的窗口和对图文消息的调用。
为了避免不必要的麻烦,将地址处理了,一些跳转链接目前还没有考虑好,便于测试,分别链接到虎扑和百度。后期会改
- package service;
- import java.util.ArrayList;
- import util.FacSendMsg;
- import msgbean.Articles;
- import msgbean.SendMsg;
- public class Service_event extends Service_base {
- private String text_subscribe_scan="这是扫码关注的用户";
- private String text_subscribe="这是普通关注的用户";
- @Override
- public SendMsg excute() {
- smsg=new SendMsg();
- smsg.setToUserName(msg.getFromUserName());
- smsg.setFromUserName(msg.getToUserName());
- smsg.setCreateTime(System.currentTimeMillis()/1000+"");
- switch (msg.getEvent()) {
- case "subscribe": //订阅
- event_subscribe();
- break;
- case "unsubscribe":
- event_unsubscribe();
- break;
- case "SCAN":
- event_scan();
- break;
- case "LOCATION":
- break;
- case "CLICK":
- event_click();
- break;
- case "VIEW":
- break;
- default:
- break;
- }
- return smsg;
- }
- private void event_subscribe() {
- smsg.setMsgType("text");
- // 订阅事件
- // 带场景值的(扫码)
- if (!msg.getEventKey().equals("")) {
- smsg.setContent(text_subscribe_scan);
- } else {
- smsg.setContent(text_subscribe);
- }
- }
- private void event_unsubscribe() {
- //用户取消订阅事件 这里写一段解绑程序比较好吧。。
- smsg.setMsgType("text");
- }
- private void event_scan() {
- // 关注后用户的扫描事件 (不涉及关注事件)
- smsg.setMsgType("text");
- smsg.setContent("欢迎您登录,"+msg.getFromUserName()+"您的key是"+msg.getEventKey());
- }
- private void event_location() {
- // 用户地理位置的处理事件
- }
- private void event_click() {
- // 拉取消息的的click事件
- switch (msg.getEventKey()) {
- case "bd":
- //绑定
- smsg.setMsgType("news");
- smsg.setArticleCount("2");
- Articles a1=new Articles();
- a1.setDescription("最后加参即可");
- a1.setPicUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1495082230317&di=f57fe3b0e3bc2af9b335cd194ad3bcf6&imgtype=0&src=http%3A%2F%2Fimg3.yxlady.com%2Fyl%2FUploadFiles_5361%2F20160312%2F20160312115540742.jpg");
- a1.setUrl("http://XXXXXXXXXXXXX/YXXX/XXXX.html?user="+msg.getFromUserName());
- a1.setTitle("绑定账号");
- Articles a2=new Articles();
- a2.setDescription("描述");
- a2.setPicUrl("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1173791250,1086762243&fm=23&gp=0.jpg");
- a2.setUrl("http://www.qq.com/");
- a2.setTitle("解绑账号");
- ArrayList<Articles>ar=new ArrayList<>();
- ar.add(a1);ar.add(a2);//
- smsg.setArticles(ar);//输入的消息包含两项
- break;
- case "hupu":
- smsg.setMsgType("news");
- smsg.setArticleCount("2");
- Articles a21=new Articles();
- a21.setDescription("最后加参即可");
- a21.setPicUrl("http://i3.hoopchina.com.cn/user/926/1126926/1331427828_045275.jpg");
- a21.setUrl("https://m.hupu.com/");
- //a21.setUrl("http://211.87.225.204/YJS/admin.html?user="+msg.getFromUserName());
- a21.setTitle("访问虎扑");
- Articles a22=new Articles();
- a22.setDescription("描述");
- a22.setPicUrl("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1173791250,1086762243&fm=23&gp=0.jpg");
- a22.setUrl("http://www.qq.com/");
- a22.setTitle("今日新闻");
- ArrayList<Articles>ar2=new ArrayList<>();
- ar2.add(a21);ar2.add(a22);//
- smsg.setArticles(ar2);//输入的消息包含两项
- break;
- case "am":
- smsg.setMsgType("news");
- smsg.setArticleCount("2");
- Articles am1=new Articles();
- am1.setDescription("最后加参即可");
- am1.setPicUrl("http://i3.hoopchina.com.cn/user/926/1126926/1331427828_045275.jpg");
- am1.setUrl("https://m.hupu.com/");
- //a21.setUrl("http://211.87.225.204/YJS/admin.html?user="+msg.getFromUserName());
- am1.setTitle("绑定账号");
- Articles am2=new Articles();
- am2.setDescription("描述");
- am2.setPicUrl("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1173791250,1086762243&fm=23&gp=0.jpg");
- am2.setUrl("http://www.qq.com/");
- am2.setTitle("解绑账号");
- ArrayList<Articles>articles=new ArrayList<>();
- articles.add(am1);articles.add(am2);//
- smsg.setArticles(articles);//输入的消息包含两项
- break;
- case "finish":
- smsg.setMsgType("text");
- smsg.setContent("我还没有写");
- break;
- default:
- break;
- }
- }
- private void event_view() {
- // 跳转菜单的click事件
- }
- }
Service_text
这里我主要写了对文字的回复,文字书写是最简单的用户输入方式,这里只是为了学习使用,写了几个样例。另外为了测试是否更改成功,会进行一些小修改,如
- case "6":
- stext="你说 6,测试于5-24 8:36";
- break;
目前的全部代码如下:
- package service;
- import msgbean.SendMsg;
- public class Service_text extends Service_base {
- // 普通消息的回复接口
- //应该有一系列的回复策略
- private SendMsg smsg;
- private String stext="我不知道你在说啥,回复数字1-6,有不同的服务,你可以挨个试试,不过我还都没写";
- @Override
- public SendMsg excute() {
- smsg=new SendMsg();
- smsg.setToUserName(msg.getFromUserName());
- smsg.setFromUserName(msg.getToUserName());
- smsg.setCreateTime(System.currentTimeMillis()/1000+"");
- //暂时的策略是这样
- smsg.setMsgType("text");
- switch (msg.getContent().trim()) {
- case "1":
- stext="你说 1,\n 测试换行我这边写没有功能";
- break;
- case "2":
- stext="你说 2,\t 测试t 我这边写没有功能";
- break;
- case "3":
- stext="你说 3,我这边写没有功能3";
- break;
- case "4":
- stext="你说 4,我这边写没有功能4";
- break;
- case "5":
- stext="你说5,我这边写没有功能5";
- break;
- case "6":
- stext="你说 6,测试于5-24 8:36";
- break;
- default:
- break;
- }
- smsg.setContent(stext);
- return smsg;
- }
- }
这就是被动服务的逻辑处理,至此差不多整个处理流程的学习和更改可以到一段落。会慢慢写起来跳转的页面内容,实现对问卷信息的填写和查看。