蘑菇街的IM 网络层

 
蘑菇街的IM 网络层:
API center 负责管理、注册所有的API;接受服务器数据(可以分离连接代买,仅提供接受数据的接口),调用解析接口,回调API;超时处理;有自己的线程。
有一个SuperAPI 还有一个 APIProtocal
superAPI 是所有API的基类,负责注册request和respone、timeout、保存返回闭包、打包数据(调用protocal)、发送数据。
APIProtocal封装了协议的解析、打包。
controller调用实现了Protocal的superAPI子类(childAPI),并且把回调函数的闭包传递进去,放在superAPI。
childAPI实现了APIProtocal 从而对服务器返回的数据解析,并且返回cmd、msgID。
 
APIcenter 有四个map(request response notify timeout)
request是请求 response是回复 timeout是超市处理 notify是服务器通知。
每一次通讯,都需要注册request、response、timeout。
消息处理完后,remove from map。(notify不需要remove)
 
流程如下:
1.controller 调用 childAPI的request,传入数据(object),和completion闭包。
2.childAPI->superAPI 的request统一处理流程,在center,注册request和respone、timeout、保存返回闭包、打包数据(调用protocal)、发送数据。
3.superAPI通过APIProtocol 调用childAPI的数据打包,调用center 的发送。
4.center收到tcp返回的bytes,调用protocal(在responseMap注册的API)解析。
5.解析完成清除map中的API(request、response、timeout),在主线程回调completion闭包,并且将数据传递过去。
6.controller 收到数据,存到model,显示处理。
7.如果在4过程中,timeout到了,那么直接清除request、resonse、timeout,回调timeout闭包。
 
 
原文地址:https://www.cnblogs.com/loying/p/4804566.html