|
|
@@ -4,50 +4,48 @@ using MongoDB.Bson;
|
|
|
|
|
|
namespace ET.Server
|
|
|
{
|
|
|
- [Invoke(TimerInvokeType.ActorLocationSenderChecker)]
|
|
|
- public class ActorLocationSenderChecker: ATimer<ActorLocationSenderComponent>
|
|
|
+ [FriendOf(typeof(ActorLocationSenderOneType))]
|
|
|
+ [FriendOf(typeof(ActorLocationSender))]
|
|
|
+ public static class ActorLocationSenderComponentSystem
|
|
|
{
|
|
|
- protected override void Run(ActorLocationSenderComponent self)
|
|
|
+ [Invoke(TimerInvokeType.ActorLocationSenderChecker)]
|
|
|
+ public class ActorLocationSenderChecker: ATimer<ActorLocationSenderOneType>
|
|
|
{
|
|
|
- try
|
|
|
+ protected override void Run(ActorLocationSenderOneType self)
|
|
|
{
|
|
|
- self.Check();
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- Log.Error($"move timer error: {self.Id}\n{e}");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ self.Check();
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ Log.Error($"move timer error: {self.Id}\n{e}");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- [ObjectSystem]
|
|
|
- public class ActorLocationSenderComponentAwakeSystem: AwakeSystem<ActorLocationSenderComponent>
|
|
|
- {
|
|
|
- protected override void Awake(ActorLocationSenderComponent self)
|
|
|
+ [ObjectSystem]
|
|
|
+ public class AwakeSystem: AwakeSystem<ActorLocationSenderOneType, int>
|
|
|
{
|
|
|
- ActorLocationSenderComponent.Instance = self;
|
|
|
-
|
|
|
- // 每10s扫描一次过期的actorproxy进行回收,过期时间是2分钟
|
|
|
- // 可能由于bug或者进程挂掉,导致ActorLocationSender发送的消息没有确认,结果无法自动删除,每一分钟清理一次这种ActorLocationSender
|
|
|
- self.CheckTimer = TimerComponent.Instance.NewRepeatedTimer(10 * 1000, TimerInvokeType.ActorLocationSenderChecker, self);
|
|
|
+ protected override void Awake(ActorLocationSenderOneType self, int locationType)
|
|
|
+ {
|
|
|
+ self.LocationType = locationType;
|
|
|
+ // 每10s扫描一次过期的actorproxy进行回收,过期时间是2分钟
|
|
|
+ // 可能由于bug或者进程挂掉,导致ActorLocationSender发送的消息没有确认,结果无法自动删除,每一分钟清理一次这种ActorLocationSender
|
|
|
+ self.CheckTimer = TimerComponent.Instance.NewRepeatedTimer(10 * 1000, TimerInvokeType.ActorLocationSenderChecker, self);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- [ObjectSystem]
|
|
|
- public class ActorLocationSenderComponentDestroySystem: DestroySystem<ActorLocationSenderComponent>
|
|
|
- {
|
|
|
- protected override void Destroy(ActorLocationSenderComponent self)
|
|
|
+ [ObjectSystem]
|
|
|
+ public class DestroySystem: DestroySystem<ActorLocationSenderOneType>
|
|
|
{
|
|
|
- ActorLocationSenderComponent.Instance = null;
|
|
|
- TimerComponent.Instance?.Remove(ref self.CheckTimer);
|
|
|
+ protected override void Destroy(ActorLocationSenderOneType self)
|
|
|
+ {
|
|
|
+ TimerComponent.Instance?.Remove(ref self.CheckTimer);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- [FriendOf(typeof(ActorLocationSenderComponent))]
|
|
|
- [FriendOf(typeof(ActorLocationSender))]
|
|
|
- public static class ActorLocationSenderComponentSystem
|
|
|
- {
|
|
|
- public static void Check(this ActorLocationSenderComponent self)
|
|
|
+
|
|
|
+ public static void Check(this ActorLocationSenderOneType self)
|
|
|
{
|
|
|
using (ListComponent<long> list = ListComponent<long>.Create())
|
|
|
{
|
|
|
@@ -56,7 +54,7 @@ namespace ET.Server
|
|
|
{
|
|
|
ActorLocationSender actorLocationMessageSender = (ActorLocationSender) value;
|
|
|
|
|
|
- if (timeNow > actorLocationMessageSender.LastSendOrRecvTime + ActorLocationSenderComponent.TIMEOUT_TIME)
|
|
|
+ if (timeNow > actorLocationMessageSender.LastSendOrRecvTime + ActorLocationSenderOneType.TIMEOUT_TIME)
|
|
|
{
|
|
|
list.Add(key);
|
|
|
}
|
|
|
@@ -69,7 +67,7 @@ namespace ET.Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static ActorLocationSender GetOrCreate(this ActorLocationSenderComponent self, long id)
|
|
|
+ private static ActorLocationSender GetOrCreate(this ActorLocationSenderOneType self, long id)
|
|
|
{
|
|
|
if (id == 0)
|
|
|
{
|
|
|
@@ -85,7 +83,7 @@ namespace ET.Server
|
|
|
return (ActorLocationSender) actorLocationSender;
|
|
|
}
|
|
|
|
|
|
- private static void Remove(this ActorLocationSenderComponent self, long id)
|
|
|
+ private static void Remove(this ActorLocationSenderOneType self, long id)
|
|
|
{
|
|
|
if (!self.Children.TryGetValue(id, out Entity actorMessageSender))
|
|
|
{
|
|
|
@@ -95,12 +93,12 @@ namespace ET.Server
|
|
|
actorMessageSender.Dispose();
|
|
|
}
|
|
|
|
|
|
- public static void Send(this ActorLocationSenderComponent self, long entityId, IActorRequest message)
|
|
|
+ public static void Send(this ActorLocationSenderOneType self, long entityId, IActorRequest message)
|
|
|
{
|
|
|
self.Call(entityId, message).Coroutine();
|
|
|
}
|
|
|
|
|
|
- public static async ETTask<IActorResponse> Call(this ActorLocationSenderComponent self, long entityId, IActorRequest iActorRequest)
|
|
|
+ public static async ETTask<IActorResponse> Call(this ActorLocationSenderOneType self, long entityId, IActorRequest iActorRequest)
|
|
|
{
|
|
|
ActorLocationSender actorLocationSender = self.GetOrCreate(entityId);
|
|
|
|
|
|
@@ -139,7 +137,7 @@ namespace ET.Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static async ETTask<IActorResponse> CallInner(this ActorLocationSenderComponent self, ActorLocationSender actorLocationSender, int rpcId, IActorRequest iActorRequest)
|
|
|
+ private static async ETTask<IActorResponse> CallInner(this ActorLocationSenderOneType self, ActorLocationSender actorLocationSender, int rpcId, IActorRequest iActorRequest)
|
|
|
{
|
|
|
int failTimes = 0;
|
|
|
long instanceId = actorLocationSender.InstanceId;
|
|
|
@@ -149,7 +147,7 @@ namespace ET.Server
|
|
|
{
|
|
|
if (actorLocationSender.ActorId == 0)
|
|
|
{
|
|
|
- actorLocationSender.ActorId = await LocationProxyComponent.Instance.Get(actorLocationSender.Id);
|
|
|
+ actorLocationSender.ActorId = await LocationProxyComponent.Instance.Get(self.LocationType, actorLocationSender.Id);
|
|
|
if (actorLocationSender.InstanceId != instanceId)
|
|
|
{
|
|
|
throw new RpcException(ErrorCore.ERR_ActorLocationSenderTimeout2, $"{iActorRequest}");
|
|
|
@@ -206,4 +204,35 @@ namespace ET.Server
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ [FriendOf(typeof (ActorLocationSenderComponent))]
|
|
|
+ public static class ActorLocationSenderManagerComponentSystem
|
|
|
+ {
|
|
|
+ [ObjectSystem]
|
|
|
+ public class AwakeSystem: AwakeSystem<ActorLocationSenderComponent>
|
|
|
+ {
|
|
|
+ protected override void Awake(ActorLocationSenderComponent self)
|
|
|
+ {
|
|
|
+ ActorLocationSenderComponent.Instance = self;
|
|
|
+ for (int i = 0; i < self.ActorLocationSenderComponents.Length; ++i)
|
|
|
+ {
|
|
|
+ self.ActorLocationSenderComponents[i] = self.AddChild<ActorLocationSenderOneType, int>(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ [ObjectSystem]
|
|
|
+ public class DestroySystem: DestroySystem<ActorLocationSenderComponent>
|
|
|
+ {
|
|
|
+ protected override void Destroy(ActorLocationSenderComponent self)
|
|
|
+ {
|
|
|
+ ActorLocationSenderComponent.Instance = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static ActorLocationSenderOneType Get(this ActorLocationSenderComponent self, int locationType)
|
|
|
+ {
|
|
|
+ return self.ActorLocationSenderComponents[locationType];
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|