From b99d520019d0e03f2d4cfea602e6bce0f602af84 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sun, 11 Jul 2021 15:20:34 -0700 Subject: [PATCH] fix(core): Anchors delta min/max (#656) --- Projects/Server/Serialization/IGenericReader.cs | 11 ++++++++++- Projects/Server/Serialization/IGenericWriter.cs | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Projects/Server/Serialization/IGenericReader.cs b/Projects/Server/Serialization/IGenericReader.cs index 9f8617c85..ca88ba6b6 100644 --- a/Projects/Server/Serialization/IGenericReader.cs +++ b/Projects/Server/Serialization/IGenericReader.cs @@ -36,7 +36,16 @@ namespace Server DateTime ReadDateTime() => new(ReadLong(), DateTimeKind.Utc); TimeSpan ReadTimeSpan() => new(ReadLong()); - DateTime ReadDeltaTime() => new(ReadLong() + DateTime.UtcNow.Ticks, DateTimeKind.Utc); + + DateTime ReadDeltaTime() + { + return ReadLong() switch + { + long.MinValue => DateTime.MinValue, + long.MaxValue => DateTime.MaxValue, + var delta => new DateTime(delta + DateTime.UtcNow.Ticks, DateTimeKind.Utc) + }; + } decimal ReadDecimal() => new(stackalloc int[4] { ReadInt(), ReadInt(), ReadInt(), ReadInt() }); int ReadEncodedInt() { diff --git a/Projects/Server/Serialization/IGenericWriter.cs b/Projects/Server/Serialization/IGenericWriter.cs index 5507f8799..36be59a1a 100644 --- a/Projects/Server/Serialization/IGenericWriter.cs +++ b/Projects/Server/Serialization/IGenericWriter.cs @@ -41,7 +41,7 @@ namespace Server var ticks = (value.Kind switch { DateTimeKind.Local => value.ToUniversalTime(), - DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), + DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), _ => value }).Ticks; @@ -49,10 +49,21 @@ namespace Server } void WriteDeltaTime(DateTime value) { + if (value == DateTime.MinValue) + { + Write(long.MinValue); + return; + } + + if (value == DateTime.MaxValue) + { + Write(long.MaxValue); + } + var ticks = (value.Kind switch { DateTimeKind.Local => value.ToUniversalTime(), - DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), + DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), _ => value }).Ticks;