ET框架學習 訊息系統之二

2021-09-11 00:16:01 字數 1663 閱讀 8587

achannel類繼承自componentwithid。內部儲存了一些和網路傳輸相關的字段(aserviceipendpoint等),還有兩個委託actionerrorcallbackactionreadcallback。這兩個委託和訊息傳輸的結果相關,分別用於儲存錯誤訊息和正確訊息的執行方法。在正確傳輸後,會執行onread方法,傳輸失敗是執行onerror方法。

achannel類的建構函式是用protected修飾的,在初始化的時候會生成元件的唯一id(idgenerater.generateid()方法),伺服器型別和channeltype

另外,還有兩個抽象方法,start方法和send方法。

module.session類是繼承自entity, 有乙個awake事件,在元件初始化過程中會執行awake方法。該方法會確定乙個achannel物件,同時清空dictionary> requestcallback字典(該字典猜測是用於存放相應後端訊息的方法)。最後會給achannel的兩個委託新增元素。

run(memorystream memorystream)方法(關於memorystream類可以看這篇文章),引數就是網路訊息流的內容(具體是否包括引數內部,還不知道)。通過對流內容的判斷,獲取其訊息碼的區間範圍,判斷是否屬於clienthotfixmessage訊息,如果是,則呼叫sessioncallbackcomponent元件執行,這裡是將訊息**到了hotfix層去執行了。否則,就通過opcodetypecomponent元件,獲取持有訊息碼的輔助類,然後配合訊息流,反序列化出訊息內容。接著對訊息做處理,如果是rpc返回訊息,否則交由messagedispatchercomponent元件分發。如果是相應型別的訊息,在requestcallback字典中查詢相應的訊息碼,移除對於元素後,執行訊息。

call過載方法,向requestcallback字典中新增元素,key是乙個自增的變數,value是乙個委託,會檢測訊息的rpc是否異常,然後傳遞出訊息。同時呼叫send方法,傳送訊息。具體用法,還有待學習。

send(byte flag, ushort opcode, object message)方法,將流指標定位到訊息內容起點,將訊息內容寫入到流中,將流內容包裝後,重新傳送。至於都包裝了哪些內容,暫時不得而知。

ET框架學習 訊息系統之一

opcodetypecomponent元件和messagedispathercomponent元件都是訊息系統的組成部分。這裡就來好好捋一捋et的訊息系統。從我目前看到現在來說,這個訊息系統包括一系列的事件介面,特性,和訊息型別的識別碼等等部分,這裡先撇開前後端通訊部分的訊息。public inte...

TI OSAL之二(訊息佇列)

不管裸機還是作業系統,都有任務間的通訊。在裸機程式中,我們大多數時候用全域性變數進行任務間的通訊。而在作業系統中,任務間通訊可以使用訊號量,互斥量,訊息佇列等。在osal中使用訊息佇列作為任務間通訊的手段。osal中訊息佇列的本質就是乙個單向鍊錶,在這乙個鍊錶上掛接著所有任務的訊息事件,有乙個煉表頭...

Cairngorm 之 二 框架搭建

二 框架搭建 需要建立的包名,以及此包總內容的用途。包名 包內放置類功能 business 與後台通訊 類。commands 命令類,一種事件對應乙個命令類。對事件發生的處理 一般呼叫後台 類的方法 和此事件呼叫後台結果的處理。control 前台控制器類,新增事件監聽,純邏輯處理。control....