// // PacketSerializerProvider.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 Microsoft.Extensions.DependencyInjection; using NosCore.Packets; using NosSmooth.Core.Packets.Converters; namespace NosSmooth.Core.Packets; /// /// Provides serializer for the server or client packets. /// public class PacketSerializerProvider { private readonly List _clientPacketTypes; private readonly List _serverPacketTypes; private IPacketSerializer? _serverSerializer; private IPacketSerializer? _clientSerializer; private IServiceProvider _serviceProvider; /// /// Initializes a new instance of the class. /// /// The types of client packets. /// The types of server packets. /// The service provider for dependency injection. public PacketSerializerProvider(List clientPacketTypes, List serverPacketTypes, IServiceProvider serviceProvider) { _clientPacketTypes = clientPacketTypes; _serverPacketTypes = serverPacketTypes; _serviceProvider = serviceProvider; } /// /// Gets the server serializer. /// public IPacketSerializer ServerSerializer { get { if (_serverSerializer is null) { _serverSerializer = new PacketSerializer ( new Serializer(_serverPacketTypes), new Deserializer(_serverPacketTypes), _serviceProvider.GetServices() ); } return _serverSerializer; } } /// /// Gets the client serializer. /// public IPacketSerializer ClientSerializer { get { if (_clientSerializer is null) { _clientSerializer = new PacketSerializer ( new Serializer(_clientPacketTypes), new Deserializer(_clientPacketTypes), _serviceProvider.GetServices() ); } return _clientSerializer; } } }