Files
TEngine/Assets/GameScripts/HotFix/GameLogic/DataCenter/GameClient.cs
ALEXTANG a273e9d5f8 Entitas
Entitas
2023-07-17 15:28:27 +08:00

138 lines
4.1 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;
using System.IO;
using GameBase;
using TEngine;
using TEngine.Core.Network;
namespace GameLogic
{
/// <summary>
/// 网络客户端状态。
/// </summary>
public enum GameClientStatus
{
/// <summary>
/// 初始化。
/// </summary>
StatusInit,
/// <summary>
/// 连接成功服务器。
/// </summary>
StatusConnected,
/// <summary>
/// 重新连接。
/// </summary>
StatusReconnect,
/// <summary>
/// 断开连接。
/// </summary>
StatusClose,
/// <summary>
/// 登录中。
/// </summary>
StatusLogin,
/// <summary>
/// AccountLogin成功进入服务器了。
/// </summary>
StatusEnter,
}
/// <summary>
/// 网络客户端。
/// </summary>
public class GameClient:Singleton<GameClient>
{
public readonly NetworkProtocolType ProtocolType = NetworkProtocolType.KCP;
public GameClientStatus Status { get; set; } = GameClientStatus.StatusInit;
public Scene Scene { private set; get; }
private string _lastAddress = String.Empty;
public GameClient()
{
Scene = GameApp.Instance.Scene;
}
public void Connect(string address, bool reconnect = false)
{
if (Status == GameClientStatus.StatusConnected || Status == GameClientStatus.StatusLogin || Status == GameClientStatus.StatusEnter)
{
return;
}
if (!reconnect)
{
// SetWatchReconnect(false);
}
if (reconnect)
{
// GameEvent.Get<ICommUI>().ShowWaitUITip(WaitUISeq.LOGINWORLD_SEQID, G.R(TextDefine.ID_TIPS_RECONNECTING));
}
else
{
// GameEvent.Get<ICommUI>().ShowWaitUI(WaitUISeq.LOGINWORLD_SEQID);
}
_lastAddress = address;
Status = reconnect ? GameClientStatus.StatusReconnect : GameClientStatus.StatusInit;
if (Scene.Session == null || Scene.Session.IsDisposed)
{
Scene.CreateSession(address, ProtocolType, OnConnectComplete, OnConnectFail);
}
}
private void OnConnectComplete()
{
Status = GameClientStatus.StatusConnected;
Log.Info("Connect to server success");
}
private void OnConnectFail()
{
Status = GameClientStatus.StatusClose;
Log.Warning("Could not connect to server");
}
public virtual void Send(object message, uint rpcId = 0, long routeId = 0)
{
if (Scene.Session == null)
{
Log.Error("Send Message Failed Because Session Is Null");
return;
}
Scene.Session.Send(message,rpcId,routeId);
}
public virtual void Send(IRouteMessage routeMessage, uint rpcId = 0, long routeId = 0)
{
if (Scene.Session == null)
{
Log.Error("Send Message Failed Because Session Is Null");
return;
}
Scene.Session.Send(routeMessage,rpcId,routeId);
}
public virtual void Send(MemoryStream memoryStream, uint rpcId = 0, long routeTypeOpCode = 0, long routeId = 0)
{
if (Scene.Session == null)
{
Log.Error("Send Message Failed Because Session Is Null");
return;
}
Scene.Session.Send(memoryStream,rpcId,routeTypeOpCode,routeId);
}
public void RegisterMsgHandler(uint protocolCode,Action<IResponse> ctx)
{
MessageDispatcherSystem.Instance.RegisterMsgHandler(protocolCode,ctx);
}
public void UnRegisterMsgHandler(uint protocolCode,Action<IResponse> ctx)
{
MessageDispatcherSystem.Instance.UnRegisterMsgHandler(protocolCode,ctx);
}
}
}