Update
This commit is contained in:
ALEXTANG
2023-07-13 21:02:29 +08:00
parent 0c51ae7bdd
commit 72b7149aa1
21 changed files with 2784 additions and 1 deletions

View File

@@ -0,0 +1,58 @@
using TEngine;
namespace GameLogic
{
public interface IDataCenterModule
{
void Init();
void OnRoleLogin();
void OnRoleLogout();
void OnUpdate();
void OnMainPlayerMapChange();
}
public class DataCenterModule<T> : IDataCenterModule where T : new()
{
private static T _instance;
public static T Instance
{
get
{
if (null == _instance)
{
_instance = new T();
Log.Assert(_instance != null);
}
return _instance;
}
}
public virtual void Init()
{
}
public virtual void OnRoleLogin()
{
}
public virtual void OnRoleLogout()
{
}
public virtual void OnUpdate()
{
}
public virtual void OnMainPlayerMapChange()
{
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1ef4b9e7ceb44a37b83ee7bca1726d93
timeCreated: 1689248879

View File

@@ -0,0 +1,72 @@
using System.Collections.Generic;
using TEngine;
namespace GameLogic
{
/// <summary>
/// 数据中心模块。
/// </summary>
public class DataCenterSys : BaseLogicSys<DataCenterSys>
{
/// <summary>
/// 子模块集合。
/// </summary>
private readonly List<IDataCenterModule> _listModule = new List<IDataCenterModule>();
/// <summary>
/// 初始化数据中心。
/// </summary>
/// <returns></returns>
public override bool OnInit()
{
InitModule();
InitOtherModule();
return true;
}
/// <summary>
/// 初始化数据中心接口。
/// </summary>
/// <param name="module"></param>
public void InitModule(IDataCenterModule module)
{
if (_listModule.Contains(module))
{
return;
}
module.Init();
_listModule.Add(module);
}
/// <summary>
/// 初始化数据中心模块。
/// </summary>
void InitModule()
{
InitModule(PlayerNetSys.Instance);
}
/// <summary>
/// 初始化数据中心其他模块。
/// <remarks>优先级低于InitModule。</remarks>
/// </summary>
void InitOtherModule()
{
}
/// <summary>
/// 帧更新驱动。
/// </summary>
public override void OnUpdate()
{
var listModule = _listModule;
foreach (var module in listModule)
{
TProfiler.BeginSample(module.GetType().FullName);
module.OnUpdate();
TProfiler.EndSample();
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 11af3015e673484a89ea388dbb2dc2cb
timeCreated: 1689248848

View File

@@ -0,0 +1,120 @@
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 = null;
public GameClient()
{
Scene = GameApp.Instance.Scene;
}
public void Connect(string address, bool reconnect = false)
{
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;
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);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 346da02ec1b54ce7938cabd8511d4404
timeCreated: 1689250782