// // 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; } } }