Gamebryo—Message System


Message System

一、 概述

消息分爲爲兩種:遠程消息(remote message)和本地消息(local message)。使用efd::MessageService,efd::IMessage,efd::Category.

應用程序可以定義自己的消息子類。當消息需要在網上傳播時,需要使用Foundation libraries和基本消息類中方法來實現相關代碼,這些庫提供了獨立的網絡字節序列。子類消息要在factory中註冊,從而可以使它在網絡上傳輸後被重構。

消息系統使用category來對消息進行路由,一個Category可以被認爲是一個地址。發送者不需要擔心誰去接受,它要做的就是產生一個具有正確category的消息即可。接受者會自動訂購自己需要的category消息。應用程序決定一個category的意思以及消息的發送者。

特別注意創建一個message handler,在消息系統的OnTick方法中它會處理所有的消息。從而使得該操作是一個很費時的過程,所以在創建一個handler時要特別注意。

消息系統提供了兩種發送消息的方法:Send和SendImmediate。

使用Send使用異步的方式來發送消息。這樣在發送完消息後可以繼續處理其它事務。使用這種方法,消息會被消息系統查詢。並且不能保證消息能在當前幀會被處理。

SendImmediate會立即投遞消息到每一個訂購者,這種方式會被阻塞直到所有的訂購者handers被調用。可以被看做是一種回調機制的消息處理。

正常情況下是使用Send方式。

二、 說明

1. 特徵

(1)efd::Imessage作爲一個Object被創建、發送、投遞和處理

(2)通常不需要關心efd::IMessage的發送方式即remotely還是locally

(3)Efd::IMessage在主應用線程中處理,所以它時線程安全的.

使用統一的消息ID.

(4)使用運行時類型檢查,來確保消息和處理者的類型安全

(5)使用efd::category數值來定位、路由、處理消息。從而對他們進行分組。

(6)消息系統是一個公共、註冊類系統,它支持多發送者和接受者機制。

(7)消息不是進行廣播,而是進行通知路由。

(8)一個efd::IMessage處理者可以是任何一個efd::IBase中的功能。

(9)MessageService可以利用Category的描述信息來自動對遠程消息向NetService進行路由

2. 工作機制

3. 限制

4. 和GameFramework一起工作

5. 工作的要求

6. 最佳實踐

三、 使用

四、 其它

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章