由于前段時(shí)間一直忙于公司項(xiàng)目沒有時(shí)間看,今天看到一篇文章(ios AFNetworking 3.0 原碼閱讀分析 (二)(AFURLResponseSerialization模塊) - chenxianming - 博客園)
又回來看teamtalk,對其又有了較清晰的認(rèn)識,個(gè)人見解,有錯(cuò)誤的地方希望大家可以指出,共同學(xué)習(xí).下面開始,
從登錄開始 MTTLoginViewController 文件中?
首先對 DDHttpServer,DDMsgServer,DDTcpServer,三個(gè)服務(wù)器類進(jìn)行初始化
接著進(jìn)行http請求
其中SERVER_ADDR 是類似 @"http://12.115.120.115:8080/msg_server" 的形式的url,請求成功后會返回形如 下圖的形式 圖 4
然后下面進(jìn)行socket鏈接
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖5
其內(nèi)部對原生的socket進(jìn)行的封裝,并注冊幾個(gè)通知 DDNotificationTcpLinkDisconnect 連接失敗通知,DDNotificationTcpLinkConnectComplete,連接成功通知
,在此說一下幾個(gè)類與協(xié)議,DDSuperAPI,DDAPIScheduleProtocol,DDAPISchedule,DDTcpClientManager,
DDSuperAPI是一個(gè)超級類,對其子類提供了一個(gè)方法,和一個(gè)用于返回請求數(shù)據(jù)的block?
在方法中定義了一個(gè) 自增常量theSeqNo用于標(biāo)識每次鏈接,
在圖7 中 記錄下來completion,下來以登錄這一行為分析一下程序的流程
下面進(jìn)入上面的圖 7 運(yùn)行到打包時(shí),跳轉(zhuǎn)到loginAPI.m文件下進(jìn)行打包
然后回到圖7 進(jìn)行發(fā)送數(shù)據(jù)
進(jìn)入socket代理方法中接受數(shù)據(jù)
在此穿插一個(gè)點(diǎn) ,程序啟動(dòng)就創(chuàng)建DDClientStateMaintenanceManager類
類初始化時(shí)就添加心跳觀察者
進(jìn)行重連 -連接
來到 DDAPISchedule方法中獲取數(shù)據(jù)
從圖13中數(shù)據(jù)解析來到下圖,圖14,解析完成后再回到圖13
登錄成功并返回?cái)?shù)據(jù)
下面從數(shù)據(jù)庫中加載好友列表
DDClientStateMaintenanceManager