上篇看完了TService現(xiàn)在看看其中出現(xiàn)的TChannel
先看屬性
看看構(gòu)造函數(shù)
這里會(huì)發(fā)現(xiàn)有2個(gè)構(gòu)造函數(shù):
1漩氨、一個(gè)傳入的IP地址岸浑,此時(shí)將會(huì)設(shè)置isConnected = false。也就是未連接,所以調(diào)用ConnectAsync異步連接
2、另一個(gè)傳入socket够挂,此時(shí)說(shuō)明是已經(jīng)連接的isConnected = true,然后直接開(kāi)始收發(fā)锰什,也就是StartRecv和StartSend
連接
先看ConnectAsync下硕,和TService有點(diǎn)像丁逝,同步的話就直接執(zhí)行,異步的由回調(diào)拋到主線程執(zhí)行
繼續(xù)往下看OnAcceptComplete梭姓,設(shè)置連接好了為true霜幼,并開(kāi)始收發(fā)
接收信息
看看這兩個(gè)StartRecv,設(shè)置異步套接字緩沖區(qū)誉尖,也就是CircularBuffer罪既,依然是同步異步方法然后執(zhí)行HandleRecv來(lái)處理接收信息
HandleRecv處理接收信息方法,這個(gè)方法在緩沖區(qū)不夠時(shí)自動(dòng)擴(kuò)充了緩沖區(qū)铡恕,并且將緩沖區(qū)中數(shù)據(jù)解析成流琢感,然后設(shè)置流的開(kāi)始位置,最后調(diào)用OnRead去讀這個(gè)流
OnRead方法探熔,最終調(diào)用了Service的OnRead方法驹针,這個(gè)方法從上篇可知是一個(gè)委托
發(fā)送信息
StartSend,和上面的很像诀艰,發(fā)送完會(huì)對(duì)緩沖區(qū)進(jìn)行一個(gè)回收復(fù)用
最后看一下public void Send(long actorId, MemoryStream stream)方法柬甥,開(kāi)始就是根據(jù)服務(wù)器類型不同向sendBuffer寫(xiě)入不同數(shù)據(jù),然后并不是立即發(fā)送其垄,而是加入到TService下次發(fā)送的集合中苛蒲,并通過(guò)上篇TService中的Update調(diào)用TChannel的Update