在如今这个资料多如牛毛、牛人多于资料的社会,通过代码来做出某个东西已经渐渐不是很难的事情了,稍微有点难题只要一上各种专业论坛、各种技术群组,大家便会讨论的热火朝天,想不解决都难。技术我们可以学会,但是思想却很难,同样的一本书在不同的人看完之后都有不同的体会和感悟,那些牛人的思想都是在经历了无数浩浩的代码之后才体现出来(所以我们佩服那些公布自己心血的大牛,这种奉献精神是我们需要学习的),如何能快速的领悟牛人们的设计思想,对于像我们这样的菜鸟而言无疑是巨大的困难,正是有了大牛们的无私奉献,我们的学习注定会事半功倍,我们不需要魔鬼般代码的训练也可以领会高深的思想,使我们受益无穷。
本着学习的态度,且为了记录自己的感悟,在此分析一下开发过的一个聊天应用的设计思想,方便以后复习回顾。
通信协议UDP,关于这个在此便不多阐述。
通过下面这个简单的图,来分析一下是如何设计的:
由上图可以看出,整个系统分为7大模块,视图、消息处理器、消息解析器、UDP服务、解析控制器、处理控制器,消息体。
其中整个流程顺序:
1、首先我们在Activity中注册一个消息处理器,该处理器用来处理接收到的消息,然后将结果显示在Activity中;
2、发送消息的时候,我们要将自己的信息封装成一个消息包
3、该消息包要通过udp传输的话,还需要经过特定的解析器进行解析,得到一段传输协议,当然解析器中有编码肯定也有解码,且必须规则一样。
4、将上面得到的一段传输协议在此处理分析
5、调用解析控制器
6、解析控制器会通过协议中的一些标志,调用相应的解析器来进行解码得到响应的消息包。
7、调用处理控制器,同时将上面得到的响应消息包传过来
8、通过响应消息包中的一些标志,来判断调用相应的处理器来进行处理,得到信息然后显示。
注意:
1、消息msg有很多种,比如有向网段发送的询问谁在线的消息包、有响应谁在线的消息包、有聊天消息包、有个人信息查看请求消息包等等等等。
例如,谁在线消息包WhoOnlinePackage:
2、消息包有多少种,就有多少种解析器,每个解析器针对不同的msg做不同的编码和解码工作。
例如:谁在线消息包解析器:
可以看到解析器中,编码和解码都是根据传输协议的规则来进行相应的处理。
3、同样有多少种解析器,就有多少种处理器。处理器根据解析器解析出来的消息包然后进一步进行处理,得到结果进行显示。
例如,在Activity中的处理器的实现:
4、解析控制器和处理控制器不用关注所有的解析器和处理器,通过一个标志来关注自己感兴趣的解析和处理器。这个解析在Activity的时候就已经注册的。
例如:注册解析器,Activity中:
解析控制器:
处理控制器:
5、传输协议很重要,这点根据个人理解不同制定不同的传输协议
6、udp server负责调度的作用,当消息来临时,调用解析控制器来生成一个相应的解析器解析消息得到一个消息包,然后交给处理控制器来生成一个相应的处理器处理解析器生成的消息包。关键代码如下:
暂时先总结到这里,日后想到在更新吧。