// // PacketSerializer.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 System.Collections.Generic; using NosCore.Packets; using NosCore.Packets.Interfaces; using NosSmooth.Core.Packets.Converters; using Remora.Results; namespace NosSmooth.Core.Packets; /// public class PacketSerializer : IPacketSerializer { private readonly Serializer _serializer; private readonly Deserializer _deserializer; private readonly IEnumerable _specificPacketSerializers; /// /// Initializes a new instance of the class. /// /// The NosCore serializer. /// The NosCore deserializer. /// The specific packet serializers. public PacketSerializer ( Serializer serializer, Deserializer deserializer, IEnumerable specificPacketSerializers ) { _serializer = serializer; _deserializer = deserializer; _specificPacketSerializers = specificPacketSerializers; } /// public Result Serialize(IPacket packet) { try { foreach (var specificPacketSerializer in _specificPacketSerializers) { if (specificPacketSerializer.Serializer && specificPacketSerializer.ShouldHandle(packet)) { return specificPacketSerializer.Serialize(packet); } } return _serializer.Serialize(packet); } catch (Exception e) { return e; } } /// public Result Deserialize(string packetString) { try { foreach (var specificPacketSerializer in _specificPacketSerializers) { if (specificPacketSerializer.Deserializer && specificPacketSerializer.ShouldHandle(packetString)) { return specificPacketSerializer.Deserialize(packetString); } } return Result.FromSuccess(_deserializer.Deserialize(packetString)); } catch (Exception e) { return e; } } /// public Serializer Serializer => _serializer; /// public Deserializer Deserializer => _deserializer; }