HTML5技术

谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现 - 千年风雅丶(6)

字号+ 作者:H5之家 来源:H5之家 2017-07-23 10:01 我要评论( )

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NetFrame{ public class UserTokenPool{ private StackUserToken pool; public

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NetFrame { public class UserTokenPool { private Stack<UserToken> pool; public UserTokenPool(int max) { pool = new Stack<UserToken>(max); } 取出一个连接对象 --创建连接 UserToken pop() { return pool.Pop(); } push(UserToken token) { if (token != null) pool.Push(token); } public int Size { get { return pool.Count; } } } }

  • 9.抽象处理中心AbsHandlerCenter
  •   在这里我们定义了客户端连接、收到客户端消息和客户端断开连接的抽象类,标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NetFrame { AbsHandlerCenter { 客户端连接 ClientConnect(UserToken token); 收到客户端消息 MessageReceive(UserToken token, object message); 客户端断开连接 ClientClose(UserToken token, string error); } }

  • 10.HandlerCenter实现类
  •    接下来具体实现客户端连接、断开连接以及收到消息后的协议分发到具体的逻辑处理模块,代码如下:

    using GameProtocol; using LOLServer.logic; using LOLServer.logic.fight; using LOLServer.logic.login; using LOLServer.logic.match; using LOLServer.logic.select; using LOLServer.logic.user; using NetFrame; using NetFrame.auto; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LOLServer { public class HandlerCenter:AbsHandlerCenter { HandlerInterface login; HandlerInterface user; HandlerInterface match; HandlerInterface select; HandlerInterface fight; public HandlerCenter() { login = new LoginHandler(); user = new UserHandler(); match = new MatchHandler(); select = new SelectHandler(); fight = new FightHandler(); } ClientClose(UserToken token, string error) { Console.WriteLine(); select.ClientClose(token, error); match.ClientClose(token, error); fight.ClientClose(token, error); //user的连接关闭方法 一定要放在逻辑处理单元后面 //其他逻辑单元需要通过user绑定数据来进行内存清理 //如果先清除了绑定关系 其他模块无法获取角色数据会导致无法清理 user.ClientClose(token, error); login.ClientClose(token, error); } ClientConnect(UserToken token) { Console.WriteLine(); } MessageReceive(UserToken token, object message) { SocketModel model = message as SocketModel; switch (model.type) { case Protocol.TYPE_LOGIN: login.MessageReceive(token, model); break; case Protocol.TYPE_USER: user.MessageReceive(token, model); break; case Protocol.TYPE_MATCH: match.MessageReceive(token, model); break; case Protocol.TYPE_SELECT: select.MessageReceive(token, model); break; case Protocol.TYPE_FIGHT: fight.MessageReceive(token, model); break; default: ; } } } }

  • 11.启动服务器
  •    写到这里,服务器终于可以启来了,不管你激不激动,反正坐在这里写写画画了一天我是激动了,总算要大功告成了。 : )  

       启动服务器->监听IP(可选)->监听端口,服务器处理流程如下图:

     

      让我们来具体看看代码实现,均给了详细的注释:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • createjs 小游戏开发实战 - beidan

      createjs 小游戏开发实战 - beidan

      2017-07-07 08:00

    • 前端实现连连看小游戏(1) - beidan

      前端实现连连看小游戏(1) - beidan

      2017-06-22 09:03

    • 网页版扫雷游戏 - 季末的寂寞

      网页版扫雷游戏 - 季末的寂寞

      2017-04-21 13:00

    • Html5游戏框架createJS组件--EaselJS - 叶超Luka

      Html5游戏框架createJS组件--EaselJS - 叶超Luka

      2017-03-22 12:01

    网友点评
    t