PhotonServer教程《五》
服务器如何分发消息和处理消息
- 创建一个协议项目 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,}}
- 在协议项目主目录下,创建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);}}}
}
- 在服务器项目中,添加项目对协议项目的引用:
- 封装处理消息的类:
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中添加分发消息的调用方法
- 在主目录下创建 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);}}}
}
- 生成, 把生成的文件复制到deploy/ MyAPPServer/bin目录下
- 启动photonServer, 启动WingInstance
后面我们开发客户端:
PhotonServer教程《五》相关推荐
- Swift中文教程(五)--对象和类
原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...
- 公众号第三方平台开发 - 教程五 代公众号发起网页授权源码
教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...
- MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)
mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...
- MongoDB 教程五: MongoDB固定集合和性能优化
MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...
- 区块链教程(五):合约编写实战实例
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...
- Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算
这篇文章主要介绍了Linux Shell脚本系列教程(五):数学运算,本文讲解了使用let.(())和[]进行算术运算.使用expr进行算术运算.使用bc进行算术运算三种方法,需要的朋友可以参考下 在 ...
- 〔王鹰教程五〕和弦的分类记忆法
[王鹰教程五]和弦的分类记忆法 http://www.wyguitar.com/html/tomqq_class/169.htm [2007-8-11 9:17:02] 吉他上的和弦有几千,我们怎么记 ...
- ae破碎效果在哪_AE教程 | 五分钟制作文字破碎效果
原标题:AE教程 | 五分钟制作文字破碎效果 UBOOK知识在线 一个很认真的知识分享平台 愚人节快乐呀,亲爱的同学们- 今天又到了CC老师的AE小课堂啦,今天给大家带来的是一个很棒的特效效果--破碎 ...
- Scrapy爬虫入门教程五 Selectors(选择器)
Scrapy爬虫入门教程一 安装和基本使用 Scrapy爬虫入门教程二 官方提供Demo Scrapy爬虫入门教程三 命令行工具介绍和示例 Scrapy爬虫入门教程四 Spider(爬虫) Scrap ...
最新文章
- WMI技术介绍和应用——查询系统信息
- chatscript_如何使用ChatScript构建您的第一个聊天机器人
- 配置vsftpd的遇到的坑及搭建虚拟账户
- strip lstrip rstrip
- jQuery的get()和post()方法
- php正则表达式实例详解,正则表达式实例解析
- java servlet文件下载_Java之Servlet文件下载20190228
- dubbo负载均衡策略和集群容错策略
- Cocos2d开发1:Xcode与TexturePacker的集成
- 低代码开发平台有哪些?
- android 字体空格,android – 在textview中设置字母之间的空格
- android 混淆方法名,android – 如何告诉Proguard混淆类名
- Linux下数据传输安全与加密
- python 线程池_python线程池
- HSC-1th 2022 Writeup
- while循环:珠穆朗玛峰案例
- ui设计为什么要切图,切图是什么意思?
- 牛客练习赛85-哲学家的沉思-(上升子序列变形+树状数组+线段树+离散化+set)
- ㉓AW-H3 Linux驱动开发之mipi camera(CSI)驱动程序
- 基于PaddlePaddle实现的DeepSpeech2端到端中文语音识模型