Files
Fishing2/Assets/Scripts/UI/ChatTestPanel.cs
2025-08-18 23:24:47 +08:00

178 lines
5.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 本脚本只在不存在时会生成一次。已存在不会再次生成覆盖
using System.Collections.Generic;
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
{
private List<string> _messages = new List<string>();
protected override void OnInit()
{
this.AutoAddClick(OnClick);
}
protected override void OnShow()
{
SetLoginState(false);
}
private void RefreshList()
{
ChatList.RemoveChildrenToPool();
foreach (var item in _messages)
{
if(ChatList.AddItemFromPool() is ChatItem chatItem)
{
chatItem.InitData(item);
}
}
}
private void OnClick(GComponent btn)
{
if (btn == BtnLogin)
{
if (string.IsNullOrEmpty(InputAccount.text))
{
Notices.Info("没有输入账号密码");
return;
}
OnLoginButtonClick(InputAccount.text).Coroutine();
}
else if (btn == BtnSendWorld)
{
OnSendMessage(InputMessage.title).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
#region
private async FTask OnSendMessage(string message)
{
var messageResponse = (S2C_SendMessageResponse)await _session.Call(new C2S_SendMessageRequest()
{
Message = message
});
if (messageResponse.ErrorCode != 0)
{
Notices.Info($"发送消息失败code={messageResponse.ErrorCode}");
}
}
public void Message(string message)
{
_messages.Add(message);
RefreshList();
}
#endregion
}
}