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