This commit is contained in:
2025-08-07 09:17:13 +08:00
parent 246ab02390
commit abb211e0da
24 changed files with 492 additions and 8486 deletions

View File

@@ -0,0 +1,137 @@
// 本脚本只在不存在时会生成一次。已存在不会再次生成覆盖
using Assets.Scripts.Entity;
using Assets.Scripts.Hotfix;
using FairyGUI;
using UnityEngine;
using NBC;
using NBC.Network;
using UIPanel = NBC.UIPanel;
namespace NBF
{
public partial class ChatTestPanel : UIPanel
{
protected override void OnInit()
{
this.AutoAddClick(OnClick);
}
protected override void OnShow()
{
SetLoginState(false);
}
private void OnClick(GComponent btn)
{
if (btn == BtnLogin)
{
if (string.IsNullOrEmpty(InputAccount.text))
{
Notices.Info("没有输入账号密码");
return;
}
OnLoginButtonClick(InputAccount.text).Coroutine();
}
}
private void SetLoginState(bool isLogin = false, string account = "")
{
if (isLogin)
{
BtnLogin.visible = false;
BtnLogout.visible = true;
TextLoginInfo.text = account;
}
else
{
BtnLogin.visible = true;
BtnLogout.visible = false;
}
}
#region
private Session _session;
private async FTask OnLoginButtonClick(string account)
{
// NBC.Platform.Unity.Entry.Initialize(GetType().Assembly);
// 根据用户名来选择目标的鉴权服务器
// 根据鉴权服务器地址来创建一个新的网络会话
_session = SessionHelper.CreateSession(App.Main, "127.0.0.1:20001", OnConnectComplete,
OnConnectFail,
OnConnectDisconnect);
var acc = account;
// 发送登录的请求给服务器
var response = (A2C_LoginResponse)await _session.Call(new C2A_LoginRequest()
{
Username = acc,
Password = acc,
LoginType = 1
});
if (response.ErrorCode != 0)
{
Log.Error($"登录发生错误{response.ErrorCode}");
return;
}
if (!App.Main.GetComponent<JWTParseComponent>().Parse(response.ToKen, out var payload))
{
return;
}
// 根据ToKen返回的Address登录到Gate服务器
_session = SessionHelper.CreateSession(App.Main, payload.Address, OnConnectComplete, OnConnectFail,
OnConnectDisconnect);
// 发送登录请求到Gate服务器
var loginResponse = (G2C_LoginResponse)await _session.Call(new C2G_LoginRequest()
{
ToKen = response.ToKen
});
if (loginResponse.ErrorCode != 0)
{
Log.Error($"登录发生错误{loginResponse.ErrorCode}");
return;
}
SetLoginState(true, InputAccount.text);
Log.Debug(
$"登录到Gate服务器成功ErrorCode:{loginResponse.ErrorCode}");
// Log.Debug(
// $"登录到Gate服务器成功LoginTime:{loginResponse.GameAccountInfo.LoginTime} CreateTime:{loginResponse.GameAccountInfo.CreateTime}");
// var getResponse = (G2C_GetAccountInfoResponse)await _session.Call(new C2G_GetAccountInfoRequest());
// var gameAcc = getResponse.GameAccountInfo;
// Log.Info($"gameAcc LoginTime:{gameAcc.LoginTime} CreateTime:{gameAcc.CreateTime}");
// getResponse.GameAccountInfo.LoginTime.ToString()
}
private void OnConnectComplete()
{
Log.Debug("连接成功");
// 添加心跳组件给Session。
// Start(2000)就是2000毫秒。
_session.AddComponent<SessionHeartbeatComponent>().Start(5000);
}
private void OnConnectFail()
{
Log.Debug("连接失败");
SetLoginState(false);
}
private void OnConnectDisconnect()
{
Log.Debug("连接断开");
SetLoginState(false);
}
#endregion
}
}