[+] 接入ET8服务端

[+] 接入ET8服务端
This commit is contained in:
ALEXTANG
2023-07-13 12:23:48 +08:00
parent e0be062006
commit 336d4b2eb9
1316 changed files with 130657 additions and 626 deletions

View File

@@ -0,0 +1,40 @@
using System.Collections.Generic;
using TrueSync;
namespace ET.Server
{
[ActorMessageHandler(SceneType.RoomRoot)]
[FriendOf(typeof (RoomServerComponent))]
public class C2Room_ChangeSceneFinishHandler: ActorMessageHandler<Scene, C2Room_ChangeSceneFinish>
{
protected override async ETTask Run(Scene root, C2Room_ChangeSceneFinish message)
{
Room room = root.GetComponent<Room>();
RoomServerComponent roomServerComponent = room.GetComponent<RoomServerComponent>();
RoomPlayer roomPlayer = room.GetComponent<RoomServerComponent>().GetChild<RoomPlayer>(message.PlayerId);
roomPlayer.Progress = 100;
if (!roomServerComponent.IsAllPlayerProgress100())
{
return;
}
await room.Fiber.TimerComponent.WaitAsync(1000);
Room2C_Start room2CStart = new() { StartTime = room.Fiber().TimeInfo.ServerFrameTime() };
foreach (RoomPlayer rp in roomServerComponent.Children.Values)
{
room2CStart.UnitInfo.Add(new LockStepUnitInfo()
{
PlayerId = rp.Id, Position = new TSVector(20, 0, -10), Rotation = TSQuaternion.identity
});
}
room.Init(room2CStart.UnitInfo, room2CStart.StartTime);
room.AddComponent<LSServerUpdater>();
RoomMessageHelper.BroadCast(room, room2CStart);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 228e4d43b85774ae08bf5da1f3425627
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,25 @@
using System.Net;
namespace ET.Server
{
[Invoke((long)SceneType.Map)]
public class FiberInit_Map: AInvokeHandler<FiberInit, ETTask>
{
public override async ETTask Handle(FiberInit fiberInit)
{
Scene root = fiberInit.Fiber.Root;
root.AddComponent<MailBoxComponent, MailBoxType>(MailBoxType.UnOrderedMessage);
root.AddComponent<TimerComponent>();
root.AddComponent<CoroutineLockComponent>();
root.AddComponent<ActorInnerComponent>();
root.AddComponent<ActorSenderComponent>();
root.AddComponent<UnitComponent>();
root.AddComponent<AOIManagerComponent>();
root.AddComponent<RoomManagerComponent>();
root.AddComponent<LocationProxyComponent>();
root.AddComponent<ActorLocationSenderComponent>();
await ETTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5d37c22fa00c59f48a444cc04a1621e4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
namespace ET.Server
{
[ActorMessageHandler(SceneType.RoomRoot)]
public class FrameMessageHandler: ActorMessageHandler<Scene, FrameMessage>
{
protected override async ETTask Run(Scene root, FrameMessage message)
{
Room room = root.GetComponent<Room>();
FrameBuffer frameBuffer = room.FrameBuffer;
if (message.Frame % (1000 / LSConstValue.UpdateInterval) == 0)
{
long nowFrameTime = room.FixedTimeCounter.FrameTime(message.Frame);
int diffTime = (int)(nowFrameTime - room.Fiber().TimeInfo.ServerFrameTime());
room.Root().GetComponent<ActorLocationSenderComponent>().Get(LocationType.GateSession).Send(message.PlayerId, new Room2C_AdjustUpdateTime() {DiffTime = diffTime});
}
if (message.Frame < room.AuthorityFrame) // 小于AuthorityFrame丢弃
{
Log.Warning($"FrameMessage < AuthorityFrame discard: {message}");
return;
}
if (message.Frame > room.AuthorityFrame + 10) // 大于AuthorityFrame + 10丢弃
{
Log.Warning($"FrameMessage > AuthorityFrame + 10 discard: {message}");
return;
}
OneFrameInputs oneFrameInputs = frameBuffer.FrameInputs(message.Frame);
if (oneFrameInputs == null)
{
Log.Error($"FrameMessageHandler get frame is null: {message.Frame}, max frame: {frameBuffer.MaxFrame}");
return;
}
oneFrameInputs.Inputs[message.PlayerId] = message.Input;
await ETTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 40bebd1c111464ddb96d36e4d0966070
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
namespace ET.Server
{
[ActorMessageHandler(SceneType.Map)]
public class Match2Map_GetRoomHandler : ActorMessageHandler<Scene, Match2Map_GetRoom, Map2Match_GetRoom>
{
protected override async ETTask Run(Scene root, Match2Map_GetRoom request, Map2Match_GetRoom response)
{
//RoomManagerComponent roomManagerComponent = root.GetComponent<RoomManagerComponent>();
Fiber fiber = root.Fiber();
int fiberId = await FiberManager.Instance.Create(SchedulerType.ThreadPool, fiber.Zone, SceneType.RoomRoot, "RoomRoot");
ActorId roomRootActorId = new(fiber.Process, fiberId);
// 发送消息给房间纤程,初始化
RoomManager2Room_Init roomManager2RoomInit = RoomManager2Room_Init.Create();
roomManager2RoomInit.PlayerIds.AddRange(request.PlayerIds);
await root.GetComponent<ActorSenderComponent>().Call(roomRootActorId, roomManager2RoomInit);
response.ActorId = roomRootActorId;
await ETTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7f404c61e317c4fc0ad28508eea3f5f2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
namespace ET.Server
{
public static partial class RoomMessageHelper
{
public static void BroadCast(Room room, IActorMessage message)
{
// 广播的消息不能被池回收
(message as MessageObject).IsFromPool = false;
RoomServerComponent roomServerComponent = room.GetComponent<RoomServerComponent>();
ActorLocationSenderComponent actorLocationSenderComponent = room.Root().GetComponent<ActorLocationSenderComponent>();
foreach (var kv in roomServerComponent.Children)
{
RoomPlayer roomPlayer = kv.Value as RoomPlayer;
if (!roomPlayer.IsOnline)
{
continue;
}
actorLocationSenderComponent.Get(LocationType.GateSession).Send(roomPlayer.Id, message);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 015483a7767f844349026490961481a1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
namespace ET.Server
{
[EntitySystemOf(typeof(RoomServerComponent))]
[FriendOf(typeof(RoomServerComponent))]
public static partial class RoomServerComponentSystem
{
[EntitySystem]
private static void Awake(this RoomServerComponent self, List<long> playerIds)
{
foreach (long id in playerIds)
{
RoomPlayer roomPlayer = self.AddChildWithId<RoomPlayer>(id);
}
}
public static bool IsAllPlayerProgress100(this RoomServerComponent self)
{
foreach (RoomPlayer roomPlayer in self.Children.Values)
{
if (roomPlayer.Progress != 100)
{
return false;
}
}
return true;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6d671f754d680422caba612a77dfdb63
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: