mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
46 lines
1.7 KiB
C#
46 lines
1.7 KiB
C#
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;
|
||
}
|
||
}
|
||
} |