From 915617cbbb0c5c81ef3812ee5fd3097e501b7beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Sun, 26 Dec 2021 23:15:02 +0100 Subject: [PATCH] feat: add in packet specific serializer --- .../Packets/Converters/InPacketSerializer.cs | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Core/NosSmooth.Core/Packets/Converters/InPacketSerializer.cs diff --git a/Core/NosSmooth.Core/Packets/Converters/InPacketSerializer.cs b/Core/NosSmooth.Core/Packets/Converters/InPacketSerializer.cs new file mode 100644 index 0000000..061703f --- /dev/null +++ b/Core/NosSmooth.Core/Packets/Converters/InPacketSerializer.cs @@ -0,0 +1,74 @@ +// +// InPacketSerializer.cs +// +// Copyright (c) František Boháček. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using NosCore.Packets.ServerPackets.Visibility; +using NosCore.Shared.Enumerations; +using Remora.Results; + +namespace NosSmooth.Core.Packets.Converters; + +/// +/// Deserializes InPacket correctly. +/// +public class InPacketSerializer : SpecificPacketSerializer +{ + private readonly PacketSerializerProvider _packetSerializerProvider; + + /// + /// Initializes a new instance of the class. + /// + /// The provider of packet serializer. + public InPacketSerializer(PacketSerializerProvider packetSerializerProvider) + { + _packetSerializerProvider = packetSerializerProvider; + } + + /// + public override bool Serializer => false; + + /// + public override bool Deserializer => true; + + /// + public override Result Serialize(InPacket packet) + { + throw new System.NotImplementedException(); + } + + /// + public override Result Deserialize(string packetString) + { + try + { + var deserializer = _packetSerializerProvider.ServerSerializer.Deserializer; + var inPacket = (InPacket)deserializer.Deserialize(packetString); + + var splitted = packetString.Split(new char[] { ' ' }, 8); + switch (inPacket.VisualType) + { + case VisualType.Player: + inPacket.InCharacterSubPacket = (InCharacterSubPacket?)deserializer + .DeserializeHeaderlessIPacket(typeof(InCharacterSubPacket), splitted[7]); + break; + case VisualType.Object: + inPacket.InItemSubPacket = (InItemSubPacket?)deserializer + .DeserializeHeaderlessIPacket(typeof(InItemSubPacket), splitted[7]); + break; + default: + inPacket.InNonPlayerSubPacket = (InNonPlayerSubPacket?)deserializer + .DeserializeHeaderlessIPacket(typeof(InNonPlayerSubPacket), splitted[7]); + break; + } + + return inPacket; + } + catch (Exception e) + { + return e; + } + } +} \ No newline at end of file -- 2.48.1