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. 最佳实践

三、 使用

四、 其它

posted on 2011-02-27 14:06  arun  阅读(261)  评论(0编辑  收藏  举报

导航