|
|
@@ -5,6 +5,7 @@ using MongoDB.Bson;
|
|
|
namespace ET.Server
|
|
|
{
|
|
|
[EntitySystemOf(typeof(MessageLocationSenderOneType))]
|
|
|
+ [FriendOf(typeof(MessageLocationSenderOneType))]
|
|
|
[FriendOf(typeof(MessageLocationSender))]
|
|
|
public static partial class MessageLocationSenderComponentSystem
|
|
|
{
|
|
|
@@ -25,9 +26,8 @@ namespace ET.Server
|
|
|
}
|
|
|
|
|
|
[EntitySystem]
|
|
|
- private static void Awake(this MessageLocationSenderOneType self, int locationType)
|
|
|
+ private static void Awake(this MessageLocationSenderOneType self)
|
|
|
{
|
|
|
- self.LocationType = locationType;
|
|
|
// 每10s扫描一次过期的actorproxy进行回收,过期时间是2分钟
|
|
|
// 可能由于bug或者进程挂掉,导致ActorLocationSender发送的消息没有确认,结果无法自动删除,每一分钟清理一次这种ActorLocationSender
|
|
|
self.CheckTimer = self.Root().GetComponent<TimerComponent>().NewRepeatedTimer(10 * 1000, TimerInvokeType.MessageLocationSenderChecker, self);
|
|
|
@@ -41,22 +41,23 @@ namespace ET.Server
|
|
|
|
|
|
private static void Check(this MessageLocationSenderOneType self)
|
|
|
{
|
|
|
- using ListComponent<long> list = ListComponent<long>.Create();
|
|
|
-
|
|
|
- long timeNow = TimeInfo.Instance.ServerNow();
|
|
|
- foreach ((long key, Entity value) in self.Children)
|
|
|
+ using (ListComponent<long> list = ListComponent<long>.Create())
|
|
|
{
|
|
|
- MessageLocationSender messageLocationMessageSender = (MessageLocationSender) value;
|
|
|
-
|
|
|
- if (timeNow > messageLocationMessageSender.LastSendOrRecvTime + MessageLocationSenderOneType.TIMEOUT_TIME)
|
|
|
+ long timeNow = TimeInfo.Instance.ServerNow();
|
|
|
+ foreach ((long key, Entity value) in self.Children)
|
|
|
{
|
|
|
- list.Add(key);
|
|
|
+ MessageLocationSender messageLocationMessageSender = (MessageLocationSender) value;
|
|
|
+
|
|
|
+ if (timeNow > messageLocationMessageSender.LastSendOrRecvTime + MessageLocationSenderOneType.TIMEOUT_TIME)
|
|
|
+ {
|
|
|
+ list.Add(key);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- foreach (long id in list)
|
|
|
- {
|
|
|
- self.Remove(id);
|
|
|
+ foreach (long id in list)
|
|
|
+ {
|
|
|
+ self.Remove(id);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -110,7 +111,7 @@ namespace ET.Server
|
|
|
|
|
|
long instanceId = messageLocationSender.InstanceId;
|
|
|
|
|
|
- int coroutineLockType = (self.LocationType << 16) | CoroutineLockType.MessageLocationSender;
|
|
|
+ int coroutineLockType = ((int)self.Id << 16) | CoroutineLockType.MessageLocationSender;
|
|
|
using (await root.Root().GetComponent<CoroutineLockComponent>().Wait(coroutineLockType, entityId))
|
|
|
{
|
|
|
if (messageLocationSender.InstanceId != instanceId)
|
|
|
@@ -120,7 +121,7 @@ namespace ET.Server
|
|
|
|
|
|
if (messageLocationSender.ActorId == default)
|
|
|
{
|
|
|
- messageLocationSender.ActorId = await root.GetComponent<LocationProxyComponent>().Get(self.LocationType, messageLocationSender.Id);
|
|
|
+ messageLocationSender.ActorId = await root.GetComponent<LocationProxyComponent>().Get((int)self.Id, messageLocationSender.Id);
|
|
|
if (messageLocationSender.InstanceId != instanceId)
|
|
|
{
|
|
|
throw new RpcException(ErrorCore.ERR_ActorLocationSenderTimeout2, $"{message}");
|
|
|
@@ -148,7 +149,7 @@ namespace ET.Server
|
|
|
|
|
|
long instanceId = messageLocationSender.InstanceId;
|
|
|
|
|
|
- int coroutineLockType = (self.LocationType << 16) | CoroutineLockType.MessageLocationSender;
|
|
|
+ int coroutineLockType = ((int)self.Id << 16) | CoroutineLockType.MessageLocationSender;
|
|
|
using (await root.GetComponent<CoroutineLockComponent>().Wait(coroutineLockType, entityId))
|
|
|
{
|
|
|
if (messageLocationSender.InstanceId != instanceId)
|
|
|
@@ -158,7 +159,7 @@ namespace ET.Server
|
|
|
|
|
|
if (messageLocationSender.ActorId == default)
|
|
|
{
|
|
|
- messageLocationSender.ActorId = await root.GetComponent<LocationProxyComponent>().Get(self.LocationType, messageLocationSender.Id);
|
|
|
+ messageLocationSender.ActorId = await root.GetComponent<LocationProxyComponent>().Get((int)self.Id, messageLocationSender.Id);
|
|
|
if (messageLocationSender.InstanceId != instanceId)
|
|
|
{
|
|
|
throw new RpcException(ErrorCore.ERR_ActorLocationSenderTimeout2, $"{request}");
|
|
|
@@ -182,7 +183,7 @@ namespace ET.Server
|
|
|
Scene root = self.Root();
|
|
|
Type iRequestType = iRequest.GetType();
|
|
|
long actorLocationSenderInstanceId = messageLocationSender.InstanceId;
|
|
|
- int coroutineLockType = (self.LocationType << 16) | CoroutineLockType.MessageLocationSender;
|
|
|
+ int coroutineLockType = ((int)self.Id << 16) | CoroutineLockType.MessageLocationSender;
|
|
|
using (await root.GetComponent<CoroutineLockComponent>().Wait(coroutineLockType, entityId))
|
|
|
{
|
|
|
if (messageLocationSender.InstanceId != actorLocationSenderInstanceId)
|
|
|
@@ -220,7 +221,7 @@ namespace ET.Server
|
|
|
{
|
|
|
if (messageLocationSender.ActorId == default)
|
|
|
{
|
|
|
- messageLocationSender.ActorId = await root.GetComponent<LocationProxyComponent>().Get(self.LocationType, messageLocationSender.Id);
|
|
|
+ messageLocationSender.ActorId = await root.GetComponent<LocationProxyComponent>().Get((int)self.Id, messageLocationSender.Id);
|
|
|
if (messageLocationSender.InstanceId != instanceId)
|
|
|
{
|
|
|
throw new RpcException(ErrorCore.ERR_ActorLocationSenderTimeout2, $"{iRequest}");
|
|
|
@@ -280,20 +281,24 @@ namespace ET.Server
|
|
|
}
|
|
|
|
|
|
[EntitySystemOf(typeof(MessageLocationSenderComponent))]
|
|
|
+ [FriendOf(typeof (MessageLocationSenderComponent))]
|
|
|
public static partial class MessageLocationSenderManagerComponentSystem
|
|
|
{
|
|
|
[EntitySystem]
|
|
|
private static void Awake(this MessageLocationSenderComponent self)
|
|
|
{
|
|
|
- for (int i = 0; i < self.messageLocationSenders.Length; ++i)
|
|
|
- {
|
|
|
- self.messageLocationSenders[i] = self.AddChild<MessageLocationSenderOneType, int>(i);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
public static MessageLocationSenderOneType Get(this MessageLocationSenderComponent self, int locationType)
|
|
|
{
|
|
|
- return self.messageLocationSenders[locationType];
|
|
|
+ MessageLocationSenderOneType messageLocationSenderOneType = self.GetChild<MessageLocationSenderOneType>(locationType);
|
|
|
+ if (messageLocationSenderOneType != null)
|
|
|
+ {
|
|
|
+ return messageLocationSenderOneType;
|
|
|
+ }
|
|
|
+
|
|
|
+ messageLocationSenderOneType = self.AddChildWithId<MessageLocationSenderOneType>(locationType);
|
|
|
+ return messageLocationSenderOneType;
|
|
|
}
|
|
|
}
|
|
|
}
|