using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using DotRecast.Core.Collections; using JNGame.Sync.Frame.Service; using NotImplementedException = System.NotImplementedException; namespace JNGame.Sync.System { public class SDByteOperate { public static readonly byte[] DELETE = { 0 }; //删除 public static bool IsDelete(byte[] value) { return value.Length == 1 && value[0] == DELETE[0]; } } /// /// 数据接口 /// public abstract class ISData : IJNSyncId { /// /// 数据唯一Id /// public ulong Id { get; set; } /// /// 判断是否一样 /// /// /// public abstract bool IsEquals(ISData data); } public abstract class SDataSystemBase : SBaseSystem,IJNSyncCycle { public abstract void OnSyncStart(); public abstract void OnSyncUpdate(int dt); public virtual void OnSyncDestroy() { } } /// /// 状态系统 - 数据层 /// public abstract class SDataSystem : SDataSystemBase where T : ISData,new() { //数据Id public ulong Id { get; private set; } public JNRandomSystem Random => GetSystem(); //数据集 public ConcurrentDictionary Data = new(); public virtual T[] Datas { get { return Data.Values.ToArray(); } } public override void OnSyncStart() { //设置数据唯一Id Id = Random.NextId(); } /// /// 返回最新数据 (收集最新的ISData数据 正常来讲只有服务端会运行) /// public virtual ConcurrentDictionary GetLatest() { return new (); } } }