Photon Server 实现注册与登录 --- 服务端响应登陆和注册
Posted cj8988
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Photon Server 实现注册与登录 --- 服务端响应登陆和注册相关的知识,希望对你有一定的参考价值。
前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分。接下来处理对前端的响应
一、响应登陆请求
之前整理中,响应前端请求主要在类ClientPeer.cs 中 OnOperationRequest 函数。该函数会根据前端传递的code从Handler管理组中取出响应的Handler进行响应。
//ClientPeer.cs 中接收请求的函数 //响应前端请求 protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) { MyGameServer.log.Info("Client---请求了---" + operationRequest.OperationCode); //首先获取客户端传来的code (operationRequest.OperationCode) //然后根据code 去 MyGameServer中获取注册的Handler。 //Handler我们注册到了主函数HandlerDict中。 //DictTool工具类是我们自己定义的,方便传入key,就能从Dict中取值,这里取出的是code相对应的handler BaseHandler handler = DictTool.GetValue<OperationCode, BaseHandler>(MyGameServer.Instance.HandlerDict, (OperationCode) operationRequest.OperationCode); if (handler != null) { //找到相应的Handler,直接调用 OnOperationRequest 进行相应逻辑处理 handler.OnOperationRequest(operationRequest,sendParameters,this); } else { //如果没有找到,返回我们自定义的 DefaultHandler. BaseHandler defHander = DictTool.GetValue<OperationCode, BaseHandler>(MyGameServer.Instance.HandlerDict, OperationCode.Default); defHander.OnOperationRequest(operationRequest,sendParameters,this); } }
登陆请求发送的code是 OperationCode.Login,主函数会从管理组中获取 LoginHander.cs ,然后调用LoginHandler.cs 的 OnOperationRequest()方法进行接收数据并处理。
LoginHander.cs 登陆类
using System; using Common; using Common.Toos; using MyGameServer.Manager; using Photon.SocketServer; namespace MyGameServer.Hander { public class LoginHander:BaseHandler { public LoginHander() { OpCode = OperationCode.Login; } public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer) { //利用工具类从获取客户端上传的参数 string username = DictTool.GetValue<byte, object>(operationRequest.Parameters, (byte) ParameterCode.UserName) as string; string password = DictTool.GetValue<byte, object>(operationRequest.Parameters, (byte) ParameterCode.Password) as string; //数据库管理类 UserManager userManager = new UserManager(); //检测用户名和密码是否正确 bool isOk = userManager.VerifyModel(username, password); //返回给客户端数据 OperationResponse response = new OperationResponse(operationRequest.OperationCode); if (isOk) { response.ReturnCode = (short)ReturnCode.Success; } else { response.ReturnCode = (short)ReturnCode.Failed; } //给客户端响应 peer.SendOperationResponse(response, sendParameters); } } }
二、注册响应类
接收前端数据,然后查询数据库是否有从名的,没有就添加,并返回成功
using Common; using Common.Toos; using MyGameServer.Manager; using MyGameServer.Model; using Photon.SocketServer; namespace MyGameServer.Hander { public class RegisterHandler:BaseHandler { public RegisterHandler() { OpCode = OperationCode.Register; } public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer) { //获取前端上传的参数 string username = DictTool.GetValue<byte, object>(operationRequest.Parameters, (byte) ParameterCode.UserName) as string; string password = DictTool.GetValue<byte, object>(operationRequest.Parameters, (byte) ParameterCode.Password) as string; //返回给前端 OperationResponse response = new OperationResponse(operationRequest.OperationCode); UserManager userManager = new UserManager(); //查找是否已经存在该用户名 User user = userManager.GetByName(username); if (user == null) { //如果不存在,则添加该用户信息 user = new User(){UserName = username,Password = password}; userManager.Add(user); //返回码,成功 response.ReturnCode = (short) ReturnCode.Success; } else { //返回码,失败 response.ReturnCode = (short) ReturnCode.Failed; } //给客户端响应 peer.SendOperationResponse(response, sendParameters); } } }
三、重新编译,上传修改文件到服务端,重新启动服务进行测试。
查看视频:https://www.bilibili.com/video/av35109390/?p=86
以上是关于Photon Server 实现注册与登录 --- 服务端响应登陆和注册的主要内容,如果未能解决你的问题,请参考以下文章
(超简单基础版)ASP.NET(.Net Framework)三层架构,结合sql server实现登录与注册