TIPS:
本系列贴仅用于博主学习ET框架的记录


文章目录

  • 前言
  • 一、安装数据库
  • 二、创建账号实体
  • 三、创建账号服务器
  • 四、编写Protobuf消息
  • 五、编写逻辑代码
  • 六、运行
  • 总结

前言

本章节使用账号登录注册的例子来展示ET框架与数据库之间的连接。

注意!!!本章节出现的账号登录注册逻辑仅限于学习,还不能拿去直接用,因为没考虑到的东西实在是太多了!!!!例如玩家短时间内多次请求登录、不同玩家同一时间登录同一账号等等…


一、安装数据库

安装mongoDB数据库及其可视化软件robot3T

1.新建数据库连接:

2.新建一个ET2数据库和Account表(集合):

在ET目录下的Excel文件夹下有一个StartZoneConfig@s.xlsx文件,默认对应两个数据库,分别为ET1和ET2,id代表区服,每个区服都有自己的数据库。

二、创建账号实体

打开ET源代码目录下的Server/Server.Model/Demo,新建一个Account文件夹,再在其下方创建一个Account实体类。

namespace ET
{public enum AccountType{General = 1, //默认状态Black = 2 //账号处在黑名单状态}public class Account: Entity, IAwake{public string AccountName { get; set; }//账号public string Password { get; set; }//密码public int AccountType { get; set; }//状态public long CreateTime { get; set; }//创建日期}
}

三、创建账号服务器

1.找到SceneType文件新增一个枚举变量Account

2.找到SceneFactory类新增一个case代码:

case SceneType.Account:scene.AddComponent<NetKcpComponent, IPEndPoint, int>(startSceneConfig.OuterIPPort, SessionStreamDispatcherType.SessionStreamDispatcherServerOuter);break;

3.回到ET\Excel文件夹目录下打开StartSceneConfig@s.xlsx文件并新增账号服务器。完成后回到目录双击bat命令行等待编译完成


4.这时候保存代码编译通过后运行服务端就能看到账号服务器被我们创建出来了

四、编写Protobuf消息

使用vs code打开ET目录下的Proto文件夹,在OuterMessage.proto下编写前后端通信消息,编写完成后回到目录运行bat文件等待编译通过:

//ResponseType A2C_LoginAccountResponse
message C2A_LoginAccountRequest // IRequest
{int32 RpcId       = 90;string Account = 1;string Password = 2;
}message A2C_LoginAccountResponse // IResponse
{int32 RpcId = 90;int32 Error = 91;string Message = 92;
}

C2A_LoginAccountRequest代表从客户端C向账号服务器A发起一条请求消息,内容是账号和密码。
A2C_LoginAccountResponse代表从账号服务器A向客户端C发起一条响应消息。

注意:这里这是简单的编写一下而已,正式的登录请求,响应消息是应该要有一个返回值token的。

五、编写逻辑代码

找到LoginHelper下的Login方法,把原有的代码都删掉重新编写:


using System;namespace ET
{public static class LoginHelper{public static async ETTask Login(Scene zoneScene, string address, string account, string password){//定义响应消息A2C_LoginAccountResponse a2CLoginAccountResponse = null;Session session = null;try{//通过地址创建一个session,这个session在这里是用来跟账号服务器做会话的//所以address = 10005 刚刚在配表那里写的账号服务器的端口号session = zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(address));//发送请求消息a2CLoginAccountResponse = (A2C_LoginAccountResponse) await session.Call(new C2A_LoginAccountRequest(){Account = account, Password = password});//查看响应码状态if (a2CLoginAccountResponse.Error != ErrorCode.ERR_Success){Log.Error(a2CLoginAccountResponse.Error.ToString());return;}}catch (Exception e){Log.Error(e.ToString());}} }
}

编写服务器处理登录请求消息的类:

using System;namespace ET
{public class C2A_LoginAccountRequestHandler: AMRpcHandler<C2A_LoginAccountRequest, A2C_LoginAccountResponse>{protected override async ETTask Run(Session session, C2A_LoginAccountRequest request, A2C_LoginAccountResponse response, Action reply){//判断是否在账号服务器中if (session.DomainScene().SceneType != SceneType.Account){Log.Error("当前未处于账号服务器中。。。。");response.Error = ErrorCode.ERR_SceneTypeError;//需要自行定义reply();session?.Dispose();return;}//判断密码是否为空if (string.IsNullOrEmpty(request.Account) || string.IsNullOrEmpty(request.Password)){response.Error = ErrorCode.ERR_AccountOrPasswordIsNull;reply();session?.Dispose();return;}//等等一些其他判断就不做了 例如什么账号格式这些//查询数据库 使用DBManagerComponent//DBManagerComponent挂载在Game.Scene全局下//这里的GetZoneDB里面的2代表的是2服 这里就写死了  代表ET2数据库的那个id 配表里可以找到var users = await DBManagerComponent.Instance.GetZoneDB(2).Query<Account>(d => d.AccountName.Equals(request.Account.Trim()));Account account = null;//如果获取到的数据为空则证明没有该用户if (users == null || users.Count == 0){//没有用户的话就注册。account = session.AddChild<Account>();//赋值account.AccountName = request.Account.Trim();account.Password = request.Password.Trim();account.CreateTime = TimeHelper.ServerNow();account.AccountType = (int)AccountType.General;//存到数据库await DBManagerComponent.Instance.GetZoneDB(2).Save<Account>(account);}else{//如果存在账号走这里account = users[0];session.AddChild(account);//判断账号处于冻结还是正常if (account.AccountType == (int)AccountType.Black){response.Error = ErrorCode.ERR_AccountIsBlack;reply();session?.Dispose();account?.Dispose();return;}//判断账号密码是否一致if (!account.Password.Equals(request.Password)){response.Error = ErrorCode.ERR_PasswordError;reply();session?.Dispose();account.Dispose();return;}}//如果可以走到这里就代表成功了account.Dispose();reply();}}
}

同时还要在AppStart_Init脚本中给Scene加上DBManagerComponent组件才能使用

最后把ConstValue中的LoginAddress的值后面的端口号改成账号服务器的100005即可。

六、运行

保存代码重新编译一下代码,通过后运行服务器端,并且回到Unity编辑器按下F5等待编译完成后运行游戏,输入账号后点击登录按钮即可看到数据库中已经有一条新数据了。



总结

good

07-ET框架的数据库连接相关推荐

  1. Lumen框架多数据库连接配置方法

    Lumen作为一款API导向很浓的框架,配置极简化,默认只支持一路DB配置 然而随着业务复杂度的提高,引入多个数据库连接似乎无法避免,下面介绍一下LUMEN连接多个数据库的配置方法: 修改.env文件 ...

  2. springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池

    QQ 313596790 官网:www.fhadmin.org 下载地址 工作流模块---------------------------------------------------------- ...

  3. windows10风格 springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池...

    QQ 313596790 官网: www.fhadmin.org 下载地址 此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序. 1.代码生成器: [正反 ...

  4. 安卓进阶系列-07数据库框架(GreenDAO)的使用

    GreenDAO的使用 简介 安卓提供了一个占用内存极小的数据库SQLite,也提供了不少操作数据库的API,然而不是所有程序员都擅长编写SQL语句,这时一个ORM的数据库框架就显得很好用了. 在之前 ...

  5. Django 07. django框架模型之增删改查基本操作

    简介 django框架模型之数据库表增删改查基本操作 1. 生成数据库表结构         models.py #!/usr/bin/env python # -*- coding: utf-8 - ...

  6. Java数据库连接池的实现(不用框架)

    前言:因为需要正式做项目,了解到了连接池这个东西.在网上找了很多资料,发现都是大同小异,各种转载,看上去搜出来了几十个答案,结果很可能是同一个.并且大多都是基于框架的数据库连接池.可是我只是想采用MV ...

  7. 20.Java集合框架(四)

    01.集合框架工具类(Collections-sort) public static <T extends Comparable<? super T>> void sort(L ...

  8. JavaWeb——jdbc与dbcp数据库连接

    一.引言 最近在学习使用mybatis调用数据库,顺便总结了下java连接数据库的历史发展.从非常传统的jdbc连接,到数据库连接池(dbcp.c3p0)封装后的jdbc连接,再到各种框架对数据库连接 ...

  9. SpringBoot集成权限认证框架(Sa-Token)

    SpringBoot集成权限认证框架(Sa-Token) 介绍 身份验证又称"验证"."鉴权",是指通过一定的手段,完成对用户身份的确认. 身份验证的目的是确认 ...

最新文章

  1. HTML5 中的canvas元素用于,HTML5中的Canvas元素
  2. 如何使用Maven的archetype快速生成一个新项目(解决生成项目目录不完整问题)...
  3. 简单控制器java,无法找到模板:创建一个简单的控制器和视图
  4. rj45接口线序_水晶头中的RJ45、RJ11、8P8C、6P4C有些什么学问?
  5. tomcat apache mysql_Android实现与Apache Tomcat服务器数据交互(MySql数据库)
  6. 云中漫步 - 3:2013-4-27 微软云体验营北京站
  7. 【安卓笔记】—— 页面导航 Navigation(2)
  8. sqlplus 编辑的小技巧
  9. Swift 5.0 值得关注的特性:Handle unknown values using @unknown default
  10. 【vulnhub】---DC-6靶机
  11. valgrind和Kcachegrind性能分析工具详解
  12. 弘辽科技:拼多多类目选错了有什么影响?怎么办?
  13. WebSocket+Tomcat实现网页简易聊天室
  14. [资料] 为实现正确信号调理的噪声计算,这七个步骤你得get(转载)
  15. virtualbox安装时发生致命错误的解决方法
  16. 多重比较校正中的一些概念
  17. proxysql mysql_利用ProxySQL实现MySQL的读写分离
  18. Navicat Premium 16 for Mac 最新版
  19. python从下载链接下载文件到本地
  20. 抖音账号矩阵系统源码搭建开发部署分析

热门文章

  1. Linux:丢包检查工具,dropwatch
  2. zip压缩包中的文件名乱码问题
  3. 计算流体力学笔记D3
  4. 一张六西格玛证书,换取五十万年薪 -- 优思学院
  5. 163邮箱不需要手机号,群发邮件工具,邮件营销工具
  6. 谷歌首提Android11,谷歌首提Android11,即将发布的Pixel 4会搭载?传统强项再突破...
  7. html5 居中布局,div 布局水平居中篇
  8. java 爬虫框架 j_一个分布式java爬虫框架JLiteSpider
  9. python基金筛选_手把手教你用python选基金
  10. 京东商城活动页面构建系统——通天塔