创建应用层接口

namespace MyServer
{public interface IApplication{void Disconnected(ClientPeer client);void Receive(ClientPeer client, NetMsg msg);}
}

Socket设置

  • 定义一个应用层
  • 定义一个设置应用层的方法,参数为应用层接口
  • 在客户端接受消息后的回调中,调用应用层中的接收方法
  • 在断开连接时,调用应用层中的断开连接方法
//定义和设置:/// <summary>/// 应用层/// </summary>private IApplication application;/// <summary>/// 设置应用层/// </summary>public void SetApplication(IApplication application){this.application = application;}
//调用:
//调用接收信息/// <summary>/// 客户端处理消息完毕后的回调,发送到应用层/// </summary>private void ReceiveProcessCompleted(ClientPeer client, NetMsg msg){//交给应用层处理application.Receive(client,msg);}//调用断开连接的方法//断开连接private void DisConnected(ClientPeer client, string reason){try{if (client == null){throw new Exception("客户端为空,无法断开连接!");}Console.WriteLine(client.clientSocket.RemoteEndPoint + "客户端断开连接,原因:" + reason);application.Disconnected(client);//客户端自己处理断开连接client.DisConnected();clientPeerPool.Enqueue(client);//断开连接的Client放到客户端连接池中semaphore.Release();//释放一个Client}catch (Exception e){Console.WriteLine(e.Message);}}

添加一个类库,协议库

  • 创建一个文件夹,Code
  • 在Code中创建一个类OpCode类
  • 里面写模块对应的操作码
namespace Protocol.Code
{/// <summary>/// 操作码/// </summary>public class OpCode{/// <summary>/// 账号模块/// </summary>public const int Account = 0;/// <summary>/// 匹配模块/// </summary>public const int Match = 1;/// <summary>/// 聊天模块/// </summary>public const int Chat = 2;/// <summary>/// 战斗模块/// </summary>public const int Fight = 3;}
}

创建一个控制台应用

  • 创建一个类,NetMessageCenter消息处理中心
  • 添加MyServer的引用
  • 添加协议库的引用
  • 继承IApplication,实现接口中的方法
  • 在接收消息的方法中,遍历所有的操作码
using MyServer;
using Protocol.Code;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace GameServer
{/// <summary>/// 消息处理中心/// </summary>public class NetMessageCenter : IApplication{public void Disconnected(ClientPeer client){}public void Receive(ClientPeer client, NetMsg msg){switch (msg.opCode){case OpCode.Account:break;case OpCode.Chat:break;case OpCode.Match:break;case OpCode.Fight:break;}}}
}

有需要学习视频的欢迎关注微信公众号

Zjh游戏(四)应用层的实现相关推荐

  1. 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)

    游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...

  2. Zjh游戏(十四)用户头像的加载以及排行榜的实现

    用户头像的加载 创建使用Resources加载图片的脚本,用来加载头像 在得到用户信息时,已经把用户信息存储到GameMdeol中,用户名.金币数.头像从GameModel中直接加载 Resource ...

  3. 大白话说网络(四)-----应用层常用协议介绍

    应用层协议简介 一.HTTP HTTPS HTTP是超文本传输协议,全称"Hyper Text Transfer Protocol",是一个基于请求与响应,无状态的,应用层的协议, ...

  4. 小米游戏四种登录方式与两种登录方式的问题

    游戏接入小米SDK后,打开游戏登录时会出现选择登录方式的界面.一般来说使用的是小米手机的话会有四种登录方式(小米账号,微信,微博,QQ),使用的是第三方手机的话只有两种登录方式(小米账号,QQ). 这 ...

  5. c++小游戏 四十五中大冒险 1.0版本

    简介 鄙人和朋友第一次做游戏,现在主线剧情未开启(四十五中),但一些副本已经写好啦(可能和主线没有什么关系 ),可以稍微玩一玩,因为1.0仍在制作,所以一些作弊已经开开了 因为还是学生,所以更新可能会 ...

  6. 【计算机网络】实验四 应用层和传输层协议分析(PacketTracer)

    一.实验目的 通过本实验,熟悉PacketTracer的使用,学习在PacketTracer中仿真分析应用层和传输层协议,进一步加深对协议工作过程的理解. 二.实验内容 研究应用层和传输层协议 从 P ...

  7. python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动

    今日任务: 控制飞船 动手前思考 1.如何实现左右移动:游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成 2.考虑到习惯,我们 ...

  8. 实验四 应用层和传输层协议分析(PacketTracer)

    具体细节待完善!! 一.实验目的: 通过本实验,熟悉PacketTracer的使用,学习在PacketTracer中仿真分析应用层和传输层协议,进一步加深对协议工作过程的理解. 二.实验内容: 研究应 ...

  9. Swing贪吃蛇游戏(四):增加游戏得分排行榜功能

    在上几篇博文中,介绍了 Swing贪吃蛇游戏(一):基本功能实现 >>> [url]http://mouselearnjava.iteye.com/blog/1913290[/url ...

最新文章

  1. 剑指offer:左旋转字符串
  2. 如何运行Perl和查看帮助
  3. 设置透明色有残留怎么办_无尘车间装修,无尘车间内部光线不好怎么办?
  4. python学习-知识点回顾(Python3的安装,编译器、一些关键知识点、数据类型、数据类型转换、运算符优先级)
  5. Azure App Service 上的根证书
  6. html嵌套html解决办法(object/object)
  7. 优酷 米兔机器人_小米(MI)米兔故事机智能故事机机器人智能机器人儿童早教机...
  8. nhibernate连接11g数据库
  9. 罗永浩站台微商大会出场费5万?主办方:5万出场费是谣传
  10. 装饰器补充、三元表达式、生成式、匿名函数
  11. java假设模拟请求重新启动路由器(网络爬虫经常使用),还有java怎样下载图片
  12. @RequestParam
  13. 苹果手机绕id软件_苹果手机如何安装LINE社交软件
  14. 如何用金山打字通等软件练习准确地打JAVA语言
  15. ubuntu 18.04安装 远程控制软件 TeamViewer 亲测有效简单
  16. html中网站片头制作利器,视频开头特效制作 视频播放时简单的片头制作
  17. 为了编程梦想,重新审视自己,开始出发。
  18. Scipy之图片降噪
  19. java 写字板源代码_基于JAVA的模拟写字板的设计与实现(含录像)
  20. 笔记本电脑开启热点后电脑无法上网问题——亲测可行【06-17】

热门文章

  1. 你为什么需要学习?(给你N种学习的理由)
  2. CF 853A Planning
  3. Cannot find module ‘../views/HomeView.vue‘ or its corresponding type declarations.ts
  4. c语言 求幂级数展开的部分和
  5. WebMagic抓取数据
  6. 使用JQ获取data-id的值
  7. 安装Ubuntu系统详细教程
  8. div+css静态网页设计`生活服务同城商城(33页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  9. STM32F103和DS1302时钟
  10. 计算机互联网行业和地产行业哪个好,互联网行业毕业生起薪最高 互联网、金融、房地产人才很紧缺...