[Photon] LiteLobby Application

来源:互联网 发布:网络球型摄像机 编辑:程序博客网 时间:2024/06/06 02:26

概要Overview

         LiteLobbyApplication是一个很好的扩展范例,代码全部由Lite扩展过来,可见Photon引擎的灵活性。下面主要是阅读源码并分析新的变化,学习如何扩展并实现自己的功能。

 

一、LiteLobbyApplication

    “Main photon application. Thisapplication is started from the photon server.

 

    代码将CreatePeer重写来创建扩展后的LiteLobbyPeer

二、LiteLobbyPeer

    “This LitePeer subclass handlesjoin operation with different operation implementation.

 

    LiteLobby实现大厅和房间区分的方式是在名称后面加上“_lobby”,在LiteLobbyPeer中新增了一个静态常量LobbySuffix来作为后缀标识符。

    代码重写了HandleJoInOperation,首先依旧是确认操作有效(这种机制有助于增强的代码的健壮性,重视细节值得学习)之后对玩家是加入大厅还是加入房间进行了区分,如果玩家请求参数中的GameId后缀有“lobby”则说明玩家加入的是大厅。

    在HandleJoinLobbyHandleJoinGameWithLobby中实现了与HandleJoinOperation差不多的功能,但在GetRoomReference上两者有了区别,首先代码扩展LiteRoomCacheLiteRoomLobbyCacheLiteGameLobbyCache并重写了CreateRoom方法。从两个方法上并没有什么改动,但实现的功能却完全不同,可见其在设计上对抽象思想的运用是非常娴熟的,很好的遵守了面向对象设计的原则。

三、LiteLobbyRoomCache &LiteLobbyRoom

    LiteLobby Application中最大的变化就在于加入了大厅这种特殊的房间。首先LiteLobbyRoomCache重写CreateRoom方法创建大厅而不是游戏房间,然后由LitelobbyRoom实现大厅的所有功能。

    在大厅中,玩家之间彼此隐藏,接受不到他人的信息,因此LitLobbyRoomCache中关于的PublishEvent 部分都为空。玩家进入大厅后,服务端会创建一个Actor,并将玩家的Number以及大厅的房间列表(GameList)返回给客户端。LitelobbyRoom维护着房间列表,同时它还有一个changedRoomList,存储自上次更新以后变化的房间,每次一旦房间列表发生变化都会通知大厅玩家更新列表。当玩家进入房间之后其实相当于退出了大厅这一个特殊的房间,从代码中可以看出其中的有趣之处。

四、LiteLobbyGameCache & LiteLobbyGame

    LiteLobbyGame主要是为了增加对房间列表的更新反馈,它取得了RoomReference以便添加更新消息。

 

小结 Summary

         LiteLobby很好的利用了Lite中的接口特性,而且其将大厅视为特殊的房间的想法有利于不改变原有的设计框架,达到了良好的扩展效果,且其中的设计思路同样值得学习。