基于Pipe的PureMVC Flex框架的多核共享消息技术

 PureMVC在某一个版本更新后提供了管道技术,但是这项技术如何使用往往让你摸不着头脑。下面带着大家将它的使用方法展现给大家。

管道的一个重要特征就是你可以利用一个已经开发完成的工程,仅仅针对每一个需要集成在一起的模块定义一个JunctionMediator

让我们看一个简单的例子,假设一个应用系统需要加载一个模块,同时需要跟它进行通讯。同时我们假定你想通过这种设计的方式跟众多其他的模块进行通讯。那么你需要在项目中为项目应用程序新建一个JunctionMediator类,同时还需要给模块新建一个JuntionMediator类。下面我们从一定高度上进行讲解一下mediators的实现细节。

 

下面是一个管道结构图:

 

我们的JuntionMediator是通过许多管道连接在一起。我们需要一个从appmodule的消息流管道,还需要一个从moduleapp的消息流管道。

 

 

在管道的接收处还需要定义消息的监听者,但是同一个管道,我们只需要定义一个管道监听者。我们需要利用管道的监听者去处理即将到来的管道消息。

 

利用管道线去发送消息,我们一般需要利用JunctionSendMessage函数。

l

现在回到我们的简单例子上来,我们的应用的JunctionMediator是负责建立app的管道配件,创建去连接这些module的管道。

 

所以我们appJunctionMediator需要做的第一步就是在项目启动时创建一个新的Junction

 

public  class ApplicationJunctionMediator  extends JunctionMediator

{

public  function ApplicationJunctionMediator()

{

super(NAME, new Junction());

}

 

一旦Mediatorfaçade模型中被注册,我们下一步需要做的就是去创建管道配件。创建这些配件,我们需要用到TeeSplit去处理分发(appmodule)的消息,Teemerge去合并(moduleapp)消息。TeeSplit允许我们终端去连接很多module,而TeeMerge允许我们合并很多moduleapp应用程序。同时我们还需要为TeeMerge添加一个管道的监听者。这个监听者负责去处理所有的通过TeeMerge连接到app的模块发送过来的消息。

 

 1 override  public  function onRegister():void
 2 
 3 {
 4 
 5 junction.registerPipe( PipeAwareModule.APP_TO_MODULE_PIPE, Junction.OUTPUT, new TeeSplit() );
 6 
 7 junction.registerPipe( PipeAwareModule.MODULE_TO_APP_PIPE, Junction.INPUT, new TeeMerge() );
 8 
 9 junction.addPipeListener( PipeAwareModule.MODULE_TO_APP_PIPE, this, handlePipeMessage );
10 
11 }

handlePipeMessage函数是moduleapp的管道消息处理函数。

 

1  function handlePipeMessage(message:IPipeMessage):void

作为一个Mediator,我们可以去定义app级别感兴趣的消息,同时提供处理这些消息的方法。也就是说我们需要用listNotificationInterests()handleNotification(note:INotification)来完成上面的功能。我们利用这些去监听消息,然后将消息通过管道传递下去。

 

举例:我们的Mortgage应用程序将要监听loan notification请求,然后将消息通过messages转发下去。

 

 

 1 override  public  function handleNotification(note:INotification):void
 2 
 3 {
 4 
 5  
 6 
 7  switch( note.getName() )
 8 
 9 {
10 
11  case MortgageAppEventNames.REQUEST_FOR_LOAN:
12 
13  var loanMessage:Message = new Message(MortgageAppEventNames.REQUEST_FOR_LOAN, null,note);
14 
15 junction.sendMessage(PipeAwareModule.APP_TO_MODULE_PIPE,loanMessage);
16 
17  break;
18 
19 }
20 
21 }

 

 我们应用程序JunctionMediator将监听modulesloan notification消息,然后应用程序的JunctionMediator会创建一些管道连接应用程序的模块中得JunctionMediator,然后分发出去。

 

 

 

 1 override  public  function handleNotification(note:INotification):void
 2 
 3 {
 4 
 5  
 6 
 7  switch( note.getName() )
 8 
 9 {
10 
11  case MortgageAppEventNames.REQUEST_FOR_LOAN:
12 
13  var loanMessage:Message = new Message(MortgageAppEventNames.REQUEST_FOR_LOAN, null,note);
14 
15 junction.sendMessage(PipeAwareModule.APP_TO_MODULE_PIPE,loanMessage);
16 
17  break;
18 
19  
20 
21  case ModuleEvents.CONNECT_MODULE_JUNCTION:
22 
23  var module:IPipeAwareModule = note.getBody() as IPipeAwareModule;
24 
25  
26 
27  //  Create the pipe
28 
29  var moduleToApp:Pipe = new Pipe();
30 
31  //  Connect the pipe to our module
32 
33 module.acceptOutputPipe(PipeAwareModule.MODULE_TO_APP_PIPE, moduleToApp); 
34 
35  
36 
37  //  Connect the pipe to our app
38 
39  var appIn:TeeMerge = junction.retrievePipe(PipeAwareModule.MODULE_TO_APP_PIPE) as TeeMerge;
40 
41 appIn.connectInput(moduleToApp);
42 
43  
44 
45  //  Create the pipe
46 
47  var appToModule:Pipe = new Pipe();
48 
49  //  Connect the pip to our module
50 
51 module.acceptInputPipe(PipeAwareModule.APP_TO_MODULE_PIPE,appToModule);
52 
53  
54 
55  //  Connect the pipe to our app
56 
57  var appOut:TeeSplit = junction.retrievePipe(PipeAwareModule.APP_TO_MODULE_PIPE) as TeeSplit;
58 
59 appOut.connect(appToModule);
60 
61  
62 
63  break;
64 
65  
66 
67  //  And let super handle the rest (ACCEPT_OUTPUT_PIPE, ACCEPT_INPUT_PIPE, SEND_TO_LOG)
68 
69  default:
70 
71  super.handleNotification(note);
72 
73  
74 
75 }
76 
77 }

 

 

最后我们的应用程序的JunctionMediator会处理这些到来的管道消息。

 

 

  1 override  public  function handlePipeMessage(message:IPipeMessage):void
  2 
  3 {
  4 
  5  //  Handle our Module->Application integration
  6 
  7 trace(message);
  8 
  9  var note:INotification = message.getBody() as INotification;
 10 
 11  
 12 
 13  switch(note.getName())
 14 
 15 {
 16 
 17  case MortgageAppEventNames.LOAN_QUOTE_READY:
 18 
 19 sendNotification(note.getName(),note.getBody(),note.getType());
 20 
 21  break;
 22 
 23  default:
 24 
 25 sendNotification(note.getName(),note.getBody(),note.getType());
 26 
 27  break;
 28 
 29 }
 30 
 31 }
 32 
 33  
 34 
 35  
 36 
 37 That covers the basic responsibilities  for our app’s JunctionMediator. 
 38 
 39 上面包括了基本的应用程序JunctionMediator的响应过程。
 40 
 41  
 42 
 43  
 44 
 45 Our module’s JunctionMediator would listen  for messages coming  in on the APP_TO_MODULE named pipe and send [outbound] messages on the MODULE_TO_APP pipe.
 46 
 47  
 48 
 49  
 50 
 51 override  public  function handleNotification(note:INotification):void
 52 
 53 {
 54 
 55  //  Handle our Module->Application integration
 56 
 57  switch( note.getName() )
 58 
 59 {
 60 
 61  case ModuleFacade.QUOTE_GENERATED:
 62 
 63  //  convert our *local* notification into the application format
 64 
 65  var quoteMessage:Message = new Message(MortgageAppEventNames.LOAN_QUOTE_READY, null,
 66 
 67 new Notification(MortgageAppEventNames.LOAN_QUOTE_READY,note.getBody(),note.getType()));
 68 
 69 junction.sendMessage(PipeAwareModule.MODULE_TO_APP_PIPE,quoteMessage);
 70 
 71  break;
 72 
 73 }
 74 
 75 }
 76 
 77  
 78 
 79 override  public  function handlePipeMessage( message:IPipeMessage ):void
 80 
 81 {
 82 
 83  //  Handle our Application->Module integration
 84 
 85  var note:INotification = message.getBody() as INotification;
 86 
 87  switch(note.getName())
 88 
 89 {
 90 
 91  case MortgageAppEventNames.REQUEST_FOR_LOAN:
 92 
 93 sendNotification(ModuleFacade.QUOTE_REQUESTED,note.getBody(),note.getType());
 94 
 95  break;
 96 
 97 }
 98 
 99  
100 
101 }

原文来源:http://www.joshuaostrom.com/2008/06/15/understanding-puremvc-pipes/ 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程总体分为五大部分:一: MVC基本设计理念    首先讲解游戏(包含VR、AR)与软件项目为什么需要有架构与框架的理念。然后讲解游戏引擎、服务端与客户端框架的区分,且梳理分析国内目前主流的游戏客户端架构模式以及优缺点分析。以及PureMVC与StrangeIOC两种MVC开源架构的总体技术刨析。二:PureMVC开源框架插件下载与搭建基础环境。    笔者以开发一个简单的“Hello World”为例,详细讲解PureMVC基础的概念,与框架搭建过程,让学员以较快的时间,学会PureMVC框架的基础理念与应用技巧。三:PureMVC架构设计理念。    基于前面简单版本的开发过程,初步刨析PureMVC架构以“Mediator+事件通知机制”总体设计理念。讲解什么是中介者设计模式(Mediator Pattern),以及事件机制在PureMVC中的基础作用。**分析PureMVC架构基本的开发流程,以及两种不同类型的消息机制。四:开发一款游戏项目(Flappy Birds),集成PureMVC+SUIFW(此框架课程均以发布)两种框架模式,讲解在具体开发一款游戏产品时,如何分析、把握框架与游戏脚本之间的关联关系,如果发挥PureMVC彻底解耦的开发理念。五:基于前面游戏项目的开发,进一步刨析PureMVC架构的高级开发技巧:    1:PureMVC框架类与脚本之间的相互通讯机理。    2:基于PureMVC框架原理,实现游戏项目模型与脚本的彻底分离技术,真正实现美工与研发的同步开发 与无缝对接技术。    3:掌握命令层(即:控制层)中SimpleCommand 与MacroCommand 的区别与具体开发应用技巧。 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值