[Photon] LiteLobby Application
2013-06-15 10:40
316 查看
概要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”则说明玩家加入的是大厅。
在HandleJoinLobby和HandleJoinGameWithLobby中实现了与HandleJoinOperation差不多的功能,但在GetRoomReference上两者有了区别,首先代码扩展LiteRoomCache为LiteRoomLobbyCache和LiteGameLobbyCache并重写了CreateRoom方法。从两个方法上并没有什么改动,但实现的功能却完全不同,可见其在设计上对抽象思想的运用是非常娴熟的,很好的遵守了面向对象设计的原则。
三、LiteLobbyRoomCache &LiteLobbyRoom
LiteLobby Application中最大的变化就在于加入了大厅这种特殊的房间。首先LiteLobbyRoomCache重写CreateRoom方法创建大厅而不是游戏房间,然后由LitelobbyRoom实现大厅的所有功能。
在大厅中,玩家之间彼此隐藏,接受不到他人的信息,因此LitLobbyRoomCache中关于的PublishEvent 部分都为空。玩家进入大厅后,服务端会创建一个Actor,并将玩家的Number以及大厅的房间列表(GameList)返回给客户端。LitelobbyRoom维护着房间列表,同时它还有一个changedRoomList,存储自上次更新以后变化的房间,每次一旦房间列表发生变化都会通知大厅玩家更新列表。当玩家进入房间之后其实相当于退出了大厅这一个特殊的房间,从代码中可以看出其中的有趣之处。
四、LiteLobbyGameCache & LiteLobbyGame
LiteLobbyGame主要是为了增加对房间列表的更新反馈,它取得了RoomReference以便添加更新消息。
小结 Summary
LiteLobby很好的利用了Lite中的接口特性,而且其将大厅视为特殊的房间的想法有利于不改变原有的设计框架,达到了良好的扩展效果,且其中的设计思路同样值得学习。
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”则说明玩家加入的是大厅。
在HandleJoinLobby和HandleJoinGameWithLobby中实现了与HandleJoinOperation差不多的功能,但在GetRoomReference上两者有了区别,首先代码扩展LiteRoomCache为LiteRoomLobbyCache和LiteGameLobbyCache并重写了CreateRoom方法。从两个方法上并没有什么改动,但实现的功能却完全不同,可见其在设计上对抽象思想的运用是非常娴熟的,很好的遵守了面向对象设计的原则。
三、LiteLobbyRoomCache &LiteLobbyRoom
LiteLobby Application中最大的变化就在于加入了大厅这种特殊的房间。首先LiteLobbyRoomCache重写CreateRoom方法创建大厅而不是游戏房间,然后由LitelobbyRoom实现大厅的所有功能。
在大厅中,玩家之间彼此隐藏,接受不到他人的信息,因此LitLobbyRoomCache中关于的PublishEvent 部分都为空。玩家进入大厅后,服务端会创建一个Actor,并将玩家的Number以及大厅的房间列表(GameList)返回给客户端。LitelobbyRoom维护着房间列表,同时它还有一个changedRoomList,存储自上次更新以后变化的房间,每次一旦房间列表发生变化都会通知大厅玩家更新列表。当玩家进入房间之后其实相当于退出了大厅这一个特殊的房间,从代码中可以看出其中的有趣之处。
四、LiteLobbyGameCache & LiteLobbyGame
LiteLobbyGame主要是为了增加对房间列表的更新反馈,它取得了RoomReference以便添加更新消息。
小结 Summary
LiteLobby很好的利用了Lite中的接口特性,而且其将大厅视为特殊的房间的想法有利于不改变原有的设计框架,达到了良好的扩展效果,且其中的设计思路同样值得学习。
相关文章推荐
- Photon——Lite Lobby Chat Demo Lite大厅的聊天演示
- Photon——Lite Lobby Concepts Lite Lobby概念
- 混用Application.LoadLevel 和 PhotonNetwork.LoadLevel
- Photon——Lite Concepts Lite概念
- WinCE Application: using database SQLLite and import data from EXCEL
- Photon——Extending Lite 扩展Lite
- Photon——Application - Policy 策略应用
- Photon——Application - LoadBalancing 负载均衡应用
- Photon官方Lite类中Lite Concepts
- 下载 XmlLite ( 包括:xmlLite.h , xmlLite.lib , xmlLite.dll )
- Application of Mobile Crushing Plant in Construction
- iOS程序发布时出现your application is being uploaded解决办法
- Android Context 上下文及反射随手可得的Application对象
- Java异常---Illegal access: this web application instance has been stopped already
- Object Builder Application Block (4)
- Google的js压缩与优化工具: Getting Started with the Closure Compiler Application
- Android获得Application
- Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法
- Spring Boot Application 运行
- 学习官方示例 - TApplication.ExeName