| | 1 | | using NLightning.Domain.Protocol.Interfaces; |
| | 2 | | using NLightning.Domain.Serialization.Interfaces; |
| | 3 | |
|
| | 4 | | namespace NLightning.Infrastructure.Serialization.Factories; |
| | 5 | |
|
| | 6 | | using Domain.Protocol.Constants; |
| | 7 | | using Domain.Protocol.Messages; |
| | 8 | | using Interfaces; |
| | 9 | | using Messages.Types; |
| | 10 | |
|
| | 11 | | public class MessageTypeSerializerFactory : IMessageTypeSerializerFactory |
| | 12 | | { |
| 0 | 13 | | private readonly Dictionary<Type, IMessageTypeSerializer> _serializers = new(); |
| 0 | 14 | | private readonly Dictionary<MessageTypes, Type> _messageTypeDictionary = new(); |
| | 15 | | private readonly IPayloadSerializerFactory _payloadSerializerFactory; |
| | 16 | | private readonly ITlvConverterFactory _tlvConverterFactory; |
| | 17 | | private readonly ITlvStreamSerializer _tlvStreamSerializer; |
| | 18 | |
|
| 0 | 19 | | public MessageTypeSerializerFactory(IPayloadSerializerFactory payloadSerializerFactory, |
| 0 | 20 | | ITlvConverterFactory tlvConverterFactory, |
| 0 | 21 | | ITlvStreamSerializer tlvStreamSerializer) |
| | 22 | | { |
| 0 | 23 | | _payloadSerializerFactory = payloadSerializerFactory; |
| 0 | 24 | | _tlvConverterFactory = tlvConverterFactory; |
| 0 | 25 | | _tlvStreamSerializer = tlvStreamSerializer; |
| | 26 | |
|
| 0 | 27 | | RegisterSerializers(); |
| 0 | 28 | | RegisterTypeDictionary(); |
| 0 | 29 | | } |
| | 30 | |
|
| | 31 | | public IMessageTypeSerializer<TMessageType>? GetSerializer<TMessageType>() where TMessageType : IMessage |
| | 32 | | { |
| 0 | 33 | | return _serializers.GetValueOrDefault(typeof(TMessageType)) as IMessageTypeSerializer<TMessageType>; |
| | 34 | | } |
| | 35 | |
|
| | 36 | | public IMessageTypeSerializer? GetSerializer(MessageTypes messageType) |
| | 37 | | { |
| 0 | 38 | | var type = _messageTypeDictionary.GetValueOrDefault(messageType); |
| 0 | 39 | | if (type is null) |
| 0 | 40 | | return null; |
| | 41 | |
|
| 0 | 42 | | return _serializers.GetValueOrDefault(type); |
| | 43 | | } |
| | 44 | |
|
| | 45 | | private void RegisterSerializers() |
| | 46 | | { |
| 0 | 47 | | _serializers.Add(typeof(AcceptChannel1Message), |
| 0 | 48 | | new AcceptChannel1MessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 49 | | _tlvStreamSerializer)); |
| 0 | 50 | | _serializers.Add(typeof(AcceptChannel2Message), |
| 0 | 51 | | new AcceptChannel2MessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 52 | | _tlvStreamSerializer)); |
| 0 | 53 | | _serializers.Add(typeof(ChannelReadyMessage), |
| 0 | 54 | | new ChannelReadyMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 55 | | _tlvStreamSerializer)); |
| 0 | 56 | | _serializers.Add(typeof(ChannelReestablishMessage), |
| 0 | 57 | | new ChannelReestablishMessageTypeSerializer(_payloadSerializerFactory, |
| 0 | 58 | | _tlvConverterFactory, _tlvStreamSerializer)); |
| 0 | 59 | | _serializers.Add(typeof(ClosingSignedMessage), |
| 0 | 60 | | new ClosingSignedMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 61 | | _tlvStreamSerializer)); |
| 0 | 62 | | _serializers.Add(typeof(CommitmentSignedMessage), |
| 0 | 63 | | new CommitmentSignedMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 64 | | _serializers.Add(typeof(ErrorMessage), new ErrorMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 65 | | _serializers.Add(typeof(FundingCreatedMessage), |
| 0 | 66 | | new FundingCreatedMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 67 | | _serializers.Add(typeof(FundingSignedMessage), |
| 0 | 68 | | new FundingSignedMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 69 | | _serializers.Add(typeof(InitMessage), |
| 0 | 70 | | new InitMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 71 | | _tlvStreamSerializer)); |
| 0 | 72 | | _serializers.Add(typeof(OpenChannel1Message), |
| 0 | 73 | | new OpenChannel1MessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 74 | | _tlvStreamSerializer)); |
| 0 | 75 | | _serializers.Add(typeof(OpenChannel2Message), |
| 0 | 76 | | new OpenChannel2MessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 77 | | _tlvStreamSerializer)); |
| 0 | 78 | | _serializers.Add(typeof(PingMessage), new PingMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 79 | | _serializers.Add(typeof(PongMessage), new PongMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 80 | | _serializers.Add(typeof(RevokeAndAckMessage), |
| 0 | 81 | | new RevokeAndAckMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 82 | | _serializers.Add(typeof(ShutdownMessage), new ShutdownMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 83 | | _serializers.Add(typeof(StfuMessage), new StfuMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 84 | | _serializers.Add(typeof(TxAbortMessage), new TxAbortMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 85 | | _serializers.Add(typeof(TxAckRbfMessage), |
| 0 | 86 | | new TxAckRbfMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 87 | | _tlvStreamSerializer)); |
| 0 | 88 | | _serializers.Add(typeof(TxAddInputMessage), new TxAddInputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 89 | | _serializers.Add(typeof(TxAddOutputMessage), |
| 0 | 90 | | new TxAddOutputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 91 | | _serializers.Add(typeof(TxCompleteMessage), new TxCompleteMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 92 | | _serializers.Add(typeof(TxInitRbfMessage), |
| 0 | 93 | | new TxInitRbfMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 94 | | _tlvStreamSerializer)); |
| 0 | 95 | | _serializers.Add(typeof(TxRemoveInputMessage), |
| 0 | 96 | | new TxRemoveInputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 97 | | _serializers.Add(typeof(TxRemoveOutputMessage), |
| 0 | 98 | | new TxRemoveOutputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 99 | | _serializers.Add(typeof(TxSignaturesMessage), |
| 0 | 100 | | new TxSignaturesMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 101 | | _serializers.Add(typeof(UpdateAddHtlcMessage), |
| 0 | 102 | | new UpdateAddHtlcMessageTypeSerializer(_payloadSerializerFactory, |
| 0 | 103 | | _tlvConverterFactory, _tlvStreamSerializer)); |
| 0 | 104 | | _serializers.Add(typeof(UpdateFailHtlcMessage), |
| 0 | 105 | | new UpdateFailHtlcMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 106 | | _serializers.Add(typeof(UpdateFailMalformedHtlcMessage), |
| 0 | 107 | | new UpdateFailMalformedHtlcMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 108 | | _serializers.Add(typeof(UpdateFeeMessage), new UpdateFeeMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 109 | | _serializers.Add(typeof(UpdateFulfillHtlcMessage), |
| 0 | 110 | | new UpdateFulfillHtlcMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 111 | | _serializers.Add(typeof(WarningMessage), new WarningMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 112 | | } |
| | 113 | |
|
| | 114 | | private void RegisterTypeDictionary() |
| | 115 | | { |
| 0 | 116 | | _messageTypeDictionary.Add(MessageTypes.AcceptChannel, typeof(AcceptChannel1Message)); |
| 0 | 117 | | _messageTypeDictionary.Add(MessageTypes.AcceptChannel2, typeof(AcceptChannel2Message)); |
| 0 | 118 | | _messageTypeDictionary.Add(MessageTypes.ChannelReady, typeof(ChannelReadyMessage)); |
| 0 | 119 | | _messageTypeDictionary.Add(MessageTypes.ChannelReestablish, typeof(ChannelReestablishMessage)); |
| 0 | 120 | | _messageTypeDictionary.Add(MessageTypes.ClosingSigned, typeof(ClosingSignedMessage)); |
| 0 | 121 | | _messageTypeDictionary.Add(MessageTypes.CommitmentSigned, typeof(CommitmentSignedMessage)); |
| 0 | 122 | | _messageTypeDictionary.Add(MessageTypes.Error, typeof(ErrorMessage)); |
| 0 | 123 | | _messageTypeDictionary.Add(MessageTypes.FundingCreated, typeof(FundingCreatedMessage)); |
| 0 | 124 | | _messageTypeDictionary.Add(MessageTypes.FundingSigned, typeof(FundingSignedMessage)); |
| 0 | 125 | | _messageTypeDictionary.Add(MessageTypes.Init, typeof(InitMessage)); |
| 0 | 126 | | _messageTypeDictionary.Add(MessageTypes.OpenChannel, typeof(OpenChannel1Message)); |
| 0 | 127 | | _messageTypeDictionary.Add(MessageTypes.OpenChannel2, typeof(OpenChannel2Message)); |
| 0 | 128 | | _messageTypeDictionary.Add(MessageTypes.Ping, typeof(PingMessage)); |
| 0 | 129 | | _messageTypeDictionary.Add(MessageTypes.Pong, typeof(PingMessage)); |
| 0 | 130 | | _messageTypeDictionary.Add(MessageTypes.RevokeAndAck, typeof(RevokeAndAckMessage)); |
| 0 | 131 | | _messageTypeDictionary.Add(MessageTypes.Shutdown, typeof(ShutdownMessage)); |
| 0 | 132 | | _messageTypeDictionary.Add(MessageTypes.Stfu, typeof(StfuMessage)); |
| 0 | 133 | | _messageTypeDictionary.Add(MessageTypes.TxAbort, typeof(TxAbortMessage)); |
| 0 | 134 | | _messageTypeDictionary.Add(MessageTypes.TxAckRbf, typeof(TxAckRbfMessage)); |
| 0 | 135 | | _messageTypeDictionary.Add(MessageTypes.TxAddInput, typeof(TxAddInputMessage)); |
| 0 | 136 | | _messageTypeDictionary.Add(MessageTypes.TxAddOutput, typeof(TxAddOutputMessage)); |
| 0 | 137 | | _messageTypeDictionary.Add(MessageTypes.TxComplete, typeof(TxCompleteMessage)); |
| 0 | 138 | | _messageTypeDictionary.Add(MessageTypes.TxInitRbf, typeof(TxInitRbfMessage)); |
| 0 | 139 | | _messageTypeDictionary.Add(MessageTypes.TxRemoveInput, typeof(TxRemoveInputMessage)); |
| 0 | 140 | | _messageTypeDictionary.Add(MessageTypes.TxRemoveOutput, typeof(TxRemoveOutputMessage)); |
| 0 | 141 | | _messageTypeDictionary.Add(MessageTypes.TxSignatures, typeof(TxSignaturesMessage)); |
| 0 | 142 | | _messageTypeDictionary.Add(MessageTypes.UpdateAddHtlc, typeof(UpdateAddHtlcMessage)); |
| 0 | 143 | | _messageTypeDictionary.Add(MessageTypes.UpdateFailHtlc, typeof(UpdateFailHtlcMessage)); |
| 0 | 144 | | _messageTypeDictionary.Add(MessageTypes.UpdateFailMalformedHtlc, typeof(UpdateFailMalformedHtlcMessage)); |
| 0 | 145 | | _messageTypeDictionary.Add(MessageTypes.UpdateFee, typeof(UpdateFeeMessage)); |
| 0 | 146 | | _messageTypeDictionary.Add(MessageTypes.UpdateFulfillHtlc, typeof(UpdateFulfillHtlcMessage)); |
| 0 | 147 | | _messageTypeDictionary.Add(MessageTypes.Warning, typeof(WarningMessage)); |
| 0 | 148 | | } |
| | 149 | | } |