mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
[+] 接入ET8服务端
[+] 接入ET8服务端
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 228e4d43b85774ae08bf5da1f3425627
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5d37c22fa00c59f48a444cc04a1621e4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 40bebd1c111464ddb96d36e4d0966070
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7f404c61e317c4fc0ad28508eea3f5f2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 015483a7767f844349026490961481a1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d671f754d680422caba612a77dfdb63
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user