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]; } } /// <summary> /// 数据接口 /// </summary> public abstract class ISData : IJNSyncId { /// <summary> /// 数据唯一Id /// </summary> public long Id { get; set; } /// <summary> /// 判断是否一样 /// </summary> /// <param name="data"></param> /// <returns></returns> public abstract bool IsEquals(ISData data); } public abstract class SDataSystemBase : SBaseSystem,IJNSyncCycle { public abstract void OnSyncStart(); public abstract void OnSyncUpdate(); public virtual void OnSyncDestroy() { } } /// <summary> /// 状态系统 - 数据层 /// </summary> public abstract class SDataSystem<T> : SDataSystemBase where T : ISData,new() { //数据Id public long Id { get; private set; } public JNRandomSystem Random => GetSystem<JNRandomSystem>(); //数据集 public Dictionary<long, T> Data = new(); public virtual T[] Datas { get { lock (Data) { return Data.Values.ToArray(); } } } public override void OnSyncStart() { //设置数据唯一Id Id = Random.NextId(); } /// <summary> /// 返回最新数据 (收集最新的ISData数据 正常来讲只有服务端会运行) /// </summary> public virtual Dictionary<long, T> GetLatest() { return new (); } } }