服务器如何分发消息和处理消息

  1. 创建一个协议项目 Protocol 类库

namespace Protocal
{//返回码public enum ReturnCode : short{Success,Failed}//客户端向服务器发送消息,服务器向客户端回应消息,称之为 Operation//区分请求和响应的类型 public enum OperationType : byte   {Default,Register,      //注册Login,         //登录}//服务器主动向客户端推送消息,称之为Event//区分服务器向客户端发送的事件的类型public enum EventType : byte{}//区分传送数据的时候,参数的类型public enum ParameterCode : byte  {Username,Password,}}
  1. 在协议项目主目录下,创建DicManager.cs
using System.Collections.Generic;namespace Protocal
{public  class DicManager{public static T2 GetValue<T1, T2>(Dictionary<T1, T2> dic, T1 key){T2 value;bool IsSuccess = dic.TryGetValue(key, out value);if (IsSuccess){return value;}else{return default(T2);}}}
}
  1. 在服务器项目中,添加项目对协议项目的引用:
  2. 封装处理消息的类:
using Protocal;
using Photon.SocketServer;namespace zclServer
{//封装处理消息的抽象类public abstract class BaseHandler{//消息类型public OperationType code;//处理消息public abstract void OnOperationRequest(ClientSession peer, OperationRequest operationRequest, SendParameters sendParameters);}//默认的处理消息的方式public class DefaultHandler : BaseHandler{public DefaultHandler(){code = OperationType.Default;}public override void OnOperationRequest(ClientSession peer, OperationRequest operationRequest, SendParameters sendParameters){}}}

5.分发消息

在ServerRoot.cs 中添加注册消息的调用方法
在ClientSession中添加分发消息的调用方法

  1. 在主目录下创建 MsgManager.cs , 脚本内容如下:

using System.Collections.Generic;
using Photon.SocketServer;
using Protocal;namespace zclServer
{public class MsgManager{#region 单例private static MsgManager instance;public static MsgManager Instance{get{if (instance == null){instance = new MsgManager();}return instance;}}#endregion//处理所有客户端请求函数的集合public Dictionary<OperationType, BaseHandler> HandlerDic = new Dictionary<OperationType, BaseHandler>();public void  RegisterHandler(BaseHandler baseHandler){if (!HandlerDic.ContainsKey(baseHandler.code)){HandlerDic.Add(baseHandler.code, baseHandler);}}public void RemoveHandler(BaseHandler baseHandler){if (HandlerDic.ContainsKey(baseHandler.code)){HandlerDic.Remove(baseHandler.code);}}//集中注册消息public void InitRegister(){//这里以后写要注册的消息, 如:RegisterHandler(new DefaultHandler());}//分发消息public void DispatchMsg(OperationRequest operationRequest, SendParameters sendParameters,ClientSession peer){BaseHandler handler = DicManager.GetValue<OperationType, BaseHandler>(MsgManager.Instance.HandlerDic, (OperationType)operationRequest.OperationCode);if (handler != null){handler.OnOperationRequest(peer, operationRequest, sendParameters);}else{BaseHandler defaultHandler = DicManager.GetValue<OperationType, BaseHandler>(MsgManager.Instance.HandlerDic, OperationType.Default);defaultHandler.OnOperationRequest(peer, operationRequest, sendParameters);}}}
}
  1. 生成, 把生成的文件复制到deploy/ MyAPPServer/bin目录下
  2. 启动photonServer, 启动WingInstance

后面我们开发客户端:

PhotonServer教程《五》相关推荐

  1. Swift中文教程(五)--对象和类

    原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...

  2. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  3. 公众号第三方平台开发 - 教程五 代公众号发起网页授权源码

    教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...

  4. MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)

    mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...

  5. MongoDB 教程五: MongoDB固定集合和性能优化

    MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...

  6. 区块链教程(五):合约编写实战实例

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  7. Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算

    这篇文章主要介绍了Linux Shell脚本系列教程(五):数学运算,本文讲解了使用let.(())和[]进行算术运算.使用expr进行算术运算.使用bc进行算术运算三种方法,需要的朋友可以参考下 在 ...

  8. 〔王鹰教程五〕和弦的分类记忆法

    [王鹰教程五]和弦的分类记忆法 http://www.wyguitar.com/html/tomqq_class/169.htm [2007-8-11 9:17:02] 吉他上的和弦有几千,我们怎么记 ...

  9. ae破碎效果在哪_AE教程 | 五分钟制作文字破碎效果

    原标题:AE教程 | 五分钟制作文字破碎效果 UBOOK知识在线 一个很认真的知识分享平台 愚人节快乐呀,亲爱的同学们- 今天又到了CC老师的AE小课堂啦,今天给大家带来的是一个很棒的特效效果--破碎 ...

  10. Scrapy爬虫入门教程五 Selectors(选择器)

    Scrapy爬虫入门教程一 安装和基本使用 Scrapy爬虫入门教程二 官方提供Demo Scrapy爬虫入门教程三 命令行工具介绍和示例 Scrapy爬虫入门教程四 Spider(爬虫) Scrap ...

最新文章

  1. WMI技术介绍和应用——查询系统信息
  2. chatscript_如何使用ChatScript构建您的第一个聊天机器人
  3. 配置vsftpd的遇到的坑及搭建虚拟账户
  4. strip lstrip rstrip
  5. jQuery的get()和post()方法
  6. php正则表达式实例详解,正则表达式实例解析
  7. java servlet文件下载_Java之Servlet文件下载20190228
  8. dubbo负载均衡策略和集群容错策略
  9. Cocos2d开发1:Xcode与TexturePacker的集成
  10. 低代码开发平台有哪些?
  11. android 字体空格,android – 在textview中设置字母之间的空格
  12. android 混淆方法名,android – 如何告诉Proguard混淆类名
  13. Linux下数据传输安全与加密
  14. python 线程池_python线程池
  15. HSC-1th 2022 Writeup
  16. while循环:珠穆朗玛峰案例
  17. ui设计为什么要切图,切图是什么意思?
  18. 牛客练习赛85-哲学家的沉思-(上升子序列变形+树状数组+线段树+离散化+set)
  19. ㉓AW-H3 Linux驱动开发之mipi camera(CSI)驱动程序
  20. 基于PaddlePaddle实现的DeepSpeech2端到端中文语音识模型

热门文章

  1. 跟着明星在元宇宙炒房,靠谱吗?
  2. 从erp入门说到产业互联网络
  3. Linux命令行下载大文件,下载Onedrive文件
  4. 谈学习中的改变——有病要诊断,有药要服用
  5. vex机器人 亚洲公开赛_VEX机器人亚洲公开赛,乐博乐博学员勇夺双料冠军!
  6. 【DB笔试面试733】在Oracle中,RAC中REMOTE_LISTENER的作用是什么?
  7. 闰年计算-第13届蓝桥杯Scratch选拔赛真题精选
  8. 解决iPhone无法连接iTunes
  9. 程序员眼中的中国传统文化-王阳明《传习录》29
  10. 114号和116号元素命名最终确定