Gamebryo3.0SDK翻译-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. 最佳实践
三、 使用
四、 其它