Skip to content

Commit 0ba5b41

Browse files
committed
[增加] 增加Actor 初始化异常的问题容错
1 parent 50f755d commit 0ba5b41

6 files changed

Lines changed: 37 additions & 15 deletions

File tree

GameFrameX.Core/BaseHandler/BaseComponentHandler.cs

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using GameFrameX.Core.Abstractions.Agent;
22
using GameFrameX.Core.Actors;
3+
using GameFrameX.Core.Utility;
34
using GameFrameX.Foundation.Logger;
45
using GameFrameX.NetWork.Abstractions;
6+
using Serilog;
57

68
namespace GameFrameX.Core.BaseHandler;
79

@@ -29,30 +31,50 @@ public abstract class BaseComponentHandler : BaseMessageHandler
2931
/// 初始化
3032
/// </summary>
3133
/// <returns>初始化任务</returns>
32-
protected abstract Task InitActor();
34+
protected abstract Task<bool> InitActor();
3335

3436
/// <summary>
3537
/// 初始化
3638
/// </summary>
3739
/// <param name="message">网络消息</param>
3840
/// <param name="netWorkChannel">网络通道</param>
3941
/// <returns>初始化任务</returns>
40-
public override async Task Init(INetworkMessage message, INetWorkChannel netWorkChannel)
42+
public override async Task<bool> Init(INetworkMessage message, INetWorkChannel netWorkChannel)
4143
{
42-
await base.Init(message, netWorkChannel);
43-
await InitActor();
44+
var initSuccess = await base.Init(message, netWorkChannel);
45+
if (!initSuccess)
46+
{
47+
return false;
48+
}
49+
50+
initSuccess = await InitActor();
51+
if (!initSuccess)
52+
{
53+
return false;
54+
}
55+
4456
if (CacheComponent == null)
4557
{
4658
if (ActorId == default)
4759
{
4860
LogHelper.Fatal($"ActorId is 0, can not get component,{message.GetType().FullName}, close channel");
4961
NetWorkChannel.Close();
50-
return;
62+
return false;
5163
}
5264

53-
CacheComponent = await ActorManager.GetComponentAgent(ActorId, ComponentAgentType);
54-
// LogHelper.Info(CacheComp);
65+
try
66+
{
67+
CacheComponent = await ActorManager.GetComponentAgent(ActorId, ComponentAgentType);
68+
}
69+
catch (Exception e)
70+
{
71+
Log.Fatal(e, "get component failed, close channel");
72+
NetWorkChannel.Close();
73+
return false;
74+
}
5575
}
76+
77+
return true;
5678
}
5779

5880
/// <summary>

GameFrameX.Core/BaseHandler/BaseMessageHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ public abstract class BaseMessageHandler : IMessageHandler
3535
/// <param name="message">消息对象</param>
3636
/// <param name="netWorkChannel">网络渠道</param>
3737
/// <returns>初始化任务</returns>
38-
public virtual Task Init(INetworkMessage message, INetWorkChannel netWorkChannel)
38+
public virtual Task<bool> Init(INetworkMessage message, INetWorkChannel netWorkChannel)
3939
{
4040
_stopwatch = new Stopwatch();
4141
Message = message;
4242
NetWorkChannel = netWorkChannel;
4343
_isInit = true;
44-
return Task.CompletedTask;
44+
return Task.FromResult(true);
4545
}
4646

4747
/// <summary>

GameFrameX.Core/BaseHandler/GlobalComponentHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public abstract class GlobalComponentHandler : BaseComponentHandler
1313
/// 初始化
1414
/// </summary>
1515
/// <returns></returns>
16-
protected override Task InitActor()
16+
protected override Task<bool> InitActor()
1717
{
1818
if (ActorId <= 0)
1919
{
@@ -22,7 +22,7 @@ protected override Task InitActor()
2222
ActorId = ActorIdGenerator.GetActorId(actorType);
2323
}
2424

25-
return Task.CompletedTask;
25+
return Task.FromResult(true);
2626
}
2727
}
2828

GameFrameX.Core/BaseHandler/PlayerComponentHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public abstract class PlayerComponentHandler : BaseComponentHandler
1313
/// 初始化
1414
/// </summary>
1515
/// <returns></returns>
16-
protected override Task InitActor()
16+
protected override Task<bool> InitActor()
1717
{
1818
if (ActorId <= 0)
1919
{
@@ -25,7 +25,7 @@ protected override Task InitActor()
2525
ActorId = ActorIdGenerator.GetActorId(GlobalConst.ActorTypePlayer);
2626
}
2727

28-
return Task.CompletedTask;
28+
return Task.FromResult(true);
2929
}
3030
}
3131

GameFrameX.Hotfix/Logic/Player/Login/ReqPlayerLoginHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ internal sealed class ReqPlayerLoginHandler : PlayerComponentHandler<PlayerCompo
88
/// 这个地方需要设置ActorID为玩家的ID,否则会报错,该代码只会执行一次。全局唯一。不能移除该代码,也请不要修改该函数ActorID
99
/// </summary>
1010
/// <returns></returns>
11-
protected override Task InitActor()
11+
protected override Task<bool> InitActor()
1212
{
1313
if (ActorId <= 0 && Message is ReqPlayerLogin reqPlayerLogin)
1414
{

GameFrameX.NetWork/IMessageHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface IMessageHandler
3030
/// <param name="message">消息对象</param>
3131
/// <param name="netWorkChannel">网络渠道</param>
3232
/// <returns></returns>
33-
Task Init(INetworkMessage message, INetWorkChannel netWorkChannel);
33+
Task<bool> Init(INetworkMessage message, INetWorkChannel netWorkChannel);
3434

3535
/// <summary>
3636
/// 内部执行

0 commit comments

Comments
 (0)