178 lines
5.3 KiB
C#
178 lines
5.3 KiB
C#
// 本脚本只在不存在时会生成一次。已存在不会再次生成覆盖
|
||
|
||
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 = (Caht2C_SendMessageResponse)await _session.Call(new C2Chat_SendMessageRequest()
|
||
{
|
||
Message = message
|
||
});
|
||
if (messageResponse.ErrorCode != 0)
|
||
{
|
||
Notices.Info($"发送消息失败,code={messageResponse.ErrorCode}");
|
||
}
|
||
}
|
||
|
||
public void Message(string message)
|
||
{
|
||
_messages.Add(message);
|
||
RefreshList();
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
} |