Files
TEngine/Assets/GameScripts/DotNet/Hotfix/Server/LockStep/Map/FrameMessageHandler.cs
ALEXTANG 336d4b2eb9 [+] 接入ET8服务端
[+] 接入ET8服务端
2023-07-13 12:23:48 +08:00

46 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}