[+] 接入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,94 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace ET
{
public class FrameBuffer
{
public int MaxFrame { get; private set; }
private readonly List<OneFrameInputs> frameInputs;
private readonly List<MemoryBuffer> snapshots;
private readonly List<long> hashs;
public FrameBuffer(int frame = 0, int capacity = LSConstValue.FrameCountPerSecond * 60)
{
this.MaxFrame = frame + LSConstValue.FrameCountPerSecond * 30;
this.frameInputs = new List<OneFrameInputs>(capacity);
this.snapshots = new List<MemoryBuffer>(capacity);
this.hashs = new List<long>(capacity);
for (int i = 0; i < this.snapshots.Capacity; ++i)
{
this.hashs.Add(0);
this.frameInputs.Add(new OneFrameInputs());
MemoryBuffer memoryBuffer = new(10240);
memoryBuffer.SetLength(0);
memoryBuffer.Seek(0, SeekOrigin.Begin);
this.snapshots.Add(memoryBuffer);
}
}
public void SetHash(int frame, long hash)
{
EnsureFrame(frame);
this.hashs[frame % this.frameInputs.Capacity] = hash;
}
public long GetHash(int frame)
{
EnsureFrame(frame);
return this.hashs[frame % this.frameInputs.Capacity];
}
public bool CheckFrame(int frame)
{
if (frame < 0)
{
return false;
}
if (frame > this.MaxFrame)
{
return false;
}
return true;
}
private void EnsureFrame(int frame)
{
if (!CheckFrame(frame))
{
throw new Exception($"frame out: {frame}, maxframe: {this.MaxFrame}");
}
}
public OneFrameInputs FrameInputs(int frame)
{
EnsureFrame(frame);
OneFrameInputs oneFrameInputs = this.frameInputs[frame % this.frameInputs.Capacity];
return oneFrameInputs;
}
public void MoveForward(int frame)
{
if (this.MaxFrame - frame > LSConstValue.FrameCountPerSecond) // 至少留出1秒的空间
{
return;
}
++this.MaxFrame;
OneFrameInputs oneFrameInputs = this.FrameInputs(this.MaxFrame);
oneFrameInputs.Inputs.Clear();
}
public MemoryBuffer Snapshot(int frame)
{
EnsureFrame(frame);
MemoryBuffer memoryBuffer = this.snapshots[frame % this.snapshots.Capacity];
return memoryBuffer;
}
}
}