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);
        }
    }
}
View Code

 

 

二、注册响应类

  接收前端数据,然后查询数据库是否有从名的,没有就添加,并返回成功

技术图片
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);
        }
    }
}
View Code

 

三、重新编译,上传修改文件到服务端,重新启动服务进行测试。

技术图片  技术图片

 

 

 

 技术图片  技术图片

 

 

查看视频:https://www.bilibili.com/video/av35109390/?p=86

以上是关于Photon Server 实现注册与登录 --- 服务端响应登陆和注册的主要内容,如果未能解决你的问题,请参考以下文章

(超简单基础版)ASP.NET(.Net Framework)三层架构,结合sql server实现登录与注册

Photon介绍与安装

ajax+node.js玩转注册与登录

Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务

photon引擎的photon引擎的相关术语

Photon Server LoadBalancing搭建