《攻城Online》,以下简称“攻城”,是基于Unity3D引擎开发的一款MMORPG端游。
“攻城”开发采用C/S架构,其中服务端使用了Photon引擎来简化开发流程。Photon引擎底层是C++,采用多线程并发处理客户端连接,且游戏逻辑采用C#语言编写。目前来说,团队对服务端开发仍是一张白纸,因而认定直接用现成服务端框架是唯一的出路。而相比较SmartFoxServer、KBEngine来说,因为其实现语言的原因,以致Photon成为不二的选择。
废话少说,先贴上初步的UML类图框架。
由于开发过程中,类内成员的访问级别随时都可能发生变动,方法参数同样如此,因而一律忽略对访问级别以及参数的表示。
首先是服务端主框架,ApplicationBase和PeerBase是Photon提供的两个类。ServerApplication继承自ApplicationBase,用来进行服务端游戏逻辑应用程序的工作,ServerPeer继承自PeerBase,代表连接到Photon的客户端,每当有一个新的客户端连接到服务端时,就会自动实例化一个peer,这个类就用于与客户端进行通信。其中,类中的OnOperationRequest是个回调方法,用于处理客户端发送的请求。
UserBase类包含用户的基本信息,而UserCollection类通过字典来收集每个peer的用户信息。
DataBase包,用于数据库操作和管理的,这个肯定要。
此外,还有ServerLogic包,内含一些处理游戏逻辑的文件,用于分割peer中OnOperationRequest所要进行的工作。
Protocol包下是服务端和客户端之间的协议文件。
由于Photon引擎有很方便的日志管理功能,因而还需要一个Log包,用来进行各种日志记录。
接下来是客户端框架,PhotonSingleton是个全局单例类,用于进行每帧保持与服务端的连接等工作。
PhotonService是客户端的主体部分,发送请求和接收响应和事件都在这里完成。
同样,ClientLogic包用来细化PhotonService的各项逻辑工作。
最后是Protocol包,里面含有各类操作枚举,EventArgs事件包,Common数据包,以及一个Serialization类用于进行二进制数据传输的转换。另有一个EventCollection类,这个类将各种事件集中起来,在PhotonService中会引用到。
以上就是基本的组成框架,剩余的都是些细化的部分。
说下这个框架的基本使用思路:
服务端启动->客户端启动->
客户端连接服务端生成peer->服务端保存用户信息缓存->
客户端逻辑生成请求->二进制序列化请求数据->客户端发送请求->
服务端接收请求->二进制请求数据反序列化->服务端逻辑处理请求->
服务端逻辑生成响应->二进制序列化响应数据->服务端进行单播/组播/广播->
客户端接收响应/触发事件->二进制响应/事件数据反序列化->客户端逻辑处理
这就是整个消息收发的处理过程,其中省略了数据库、日志、更新游戏画面等操作。