| | 1 | | namespace NLightning.Infrastructure.Serialization.Factories; |
| | 2 | |
|
| | 3 | | using Domain.Protocol.Constants; |
| | 4 | | using Domain.Protocol.Factories; |
| | 5 | | using Domain.Protocol.Messages; |
| | 6 | | using Domain.Protocol.Messages.Interfaces; |
| | 7 | | using Domain.Serialization.Factories; |
| | 8 | | using Domain.Serialization.Messages.Types; |
| | 9 | | using Interfaces; |
| | 10 | | using Messages.Types; |
| | 11 | |
|
| | 12 | | public class MessageTypeSerializerFactory : IMessageTypeSerializerFactory |
| | 13 | | { |
| 0 | 14 | | private readonly Dictionary<Type, IMessageTypeSerializer> _serializers = new(); |
| 0 | 15 | | private readonly Dictionary<ushort, Type> _ushortTypeDictionary = new(); |
| | 16 | | private readonly IPayloadSerializerFactory _payloadSerializerFactory; |
| | 17 | | private readonly ITlvConverterFactory _tlvConverterFactory; |
| | 18 | | private readonly ITlvStreamSerializer _tlvStreamSerializer; |
| | 19 | |
|
| 0 | 20 | | public MessageTypeSerializerFactory(IPayloadSerializerFactory payloadSerializerFactory, |
| 0 | 21 | | ITlvConverterFactory tlvConverterFactory, |
| 0 | 22 | | ITlvStreamSerializer tlvStreamSerializer) |
| | 23 | | { |
| 0 | 24 | | _payloadSerializerFactory = payloadSerializerFactory; |
| 0 | 25 | | _tlvConverterFactory = tlvConverterFactory; |
| 0 | 26 | | _tlvStreamSerializer = tlvStreamSerializer; |
| | 27 | |
|
| 0 | 28 | | RegisterSerializers(); |
| 0 | 29 | | RegisterTypeDictionary(); |
| 0 | 30 | | } |
| | 31 | |
|
| | 32 | | public IMessageTypeSerializer<TMessageType>? GetSerializer<TMessageType>() where TMessageType : IMessage |
| | 33 | | { |
| 0 | 34 | | return _serializers.GetValueOrDefault(typeof(TMessageType)) as IMessageTypeSerializer<TMessageType>; |
| | 35 | | } |
| | 36 | |
|
| | 37 | | public IMessageTypeSerializer? GetSerializer(ushort messageType) |
| | 38 | | { |
| 0 | 39 | | var type = _ushortTypeDictionary.GetValueOrDefault(messageType); |
| 0 | 40 | | if (type is null) |
| 0 | 41 | | return null; |
| | 42 | |
|
| 0 | 43 | | return _serializers.GetValueOrDefault(type); |
| | 44 | | } |
| | 45 | |
|
| | 46 | | private void RegisterSerializers() |
| | 47 | | { |
| 0 | 48 | | _serializers.Add(typeof(AcceptChannel2Message), |
| 0 | 49 | | new AcceptChannel2MessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 50 | | _tlvStreamSerializer)); |
| 0 | 51 | | _serializers.Add(typeof(ChannelReadyMessage), |
| 0 | 52 | | new ChannelReadyMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 53 | | _tlvStreamSerializer)); |
| 0 | 54 | | _serializers.Add(typeof(ChannelReestablishMessage), |
| 0 | 55 | | new ChannelReestablishMessageTypeSerializer(_payloadSerializerFactory, |
| 0 | 56 | | _tlvConverterFactory, _tlvStreamSerializer)); |
| 0 | 57 | | _serializers.Add(typeof(ClosingSignedMessage), |
| 0 | 58 | | new ClosingSignedMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 59 | | _tlvStreamSerializer)); |
| 0 | 60 | | _serializers.Add(typeof(CommitmentSignedMessage), |
| 0 | 61 | | new CommitmentSignedMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 62 | | _serializers.Add(typeof(ErrorMessage), new ErrorMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 63 | | _serializers.Add(typeof(InitMessage), |
| 0 | 64 | | new InitMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 65 | | _tlvStreamSerializer)); |
| 0 | 66 | | _serializers.Add(typeof(OpenChannel2Message), |
| 0 | 67 | | new OpenChannel2MessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 68 | | _tlvStreamSerializer)); |
| 0 | 69 | | _serializers.Add(typeof(PingMessage), new PingMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 70 | | _serializers.Add(typeof(PongMessage), new PongMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 71 | | _serializers.Add(typeof(RevokeAndAckMessage), |
| 0 | 72 | | new RevokeAndAckMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 73 | | _serializers.Add(typeof(ShutdownMessage), new ShutdownMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 74 | | _serializers.Add(typeof(StfuMessage), new StfuMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 75 | | _serializers.Add(typeof(TxAbortMessage), new TxAbortMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 76 | | _serializers.Add(typeof(TxAckRbfMessage), |
| 0 | 77 | | new TxAckRbfMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 78 | | _tlvStreamSerializer)); |
| 0 | 79 | | _serializers.Add(typeof(TxAddInputMessage), new TxAddInputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 80 | | _serializers.Add(typeof(TxAddOutputMessage), |
| 0 | 81 | | new TxAddOutputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 82 | | _serializers.Add(typeof(TxCompleteMessage), new TxCompleteMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 83 | | _serializers.Add(typeof(TxInitRbfMessage), |
| 0 | 84 | | new TxInitRbfMessageTypeSerializer(_payloadSerializerFactory, _tlvConverterFactory, |
| 0 | 85 | | _tlvStreamSerializer)); |
| 0 | 86 | | _serializers.Add(typeof(TxRemoveInputMessage), |
| 0 | 87 | | new TxRemoveInputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 88 | | _serializers.Add(typeof(TxRemoveOutputMessage), |
| 0 | 89 | | new TxRemoveOutputMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 90 | | _serializers.Add(typeof(TxSignaturesMessage), |
| 0 | 91 | | new TxSignaturesMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 92 | | _serializers.Add(typeof(UpdateAddHtlcMessage), |
| 0 | 93 | | new UpdateAddHtlcMessageTypeSerializer(_payloadSerializerFactory, |
| 0 | 94 | | _tlvConverterFactory, _tlvStreamSerializer)); |
| 0 | 95 | | _serializers.Add(typeof(UpdateFailHtlcMessage), |
| 0 | 96 | | new UpdateFailHtlcMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 97 | | _serializers.Add(typeof(UpdateFailMalformedHtlcMessage), |
| 0 | 98 | | new UpdateFailMalformedHtlcMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 99 | | _serializers.Add(typeof(UpdateFeeMessage), new UpdateFeeMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 100 | | _serializers.Add(typeof(UpdateFulfillHtlcMessage), |
| 0 | 101 | | new UpdateFulfillHtlcMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 102 | | _serializers.Add(typeof(WarningMessage), new WarningMessageTypeSerializer(_payloadSerializerFactory)); |
| 0 | 103 | | } |
| | 104 | |
|
| | 105 | | private void RegisterTypeDictionary() |
| | 106 | | { |
| 0 | 107 | | _ushortTypeDictionary.Add(MessageTypes.ACCEPT_CHANNEL_2, typeof(AcceptChannel2Message)); |
| 0 | 108 | | _ushortTypeDictionary.Add(MessageTypes.CHANNEL_READY, typeof(ChannelReadyMessage)); |
| 0 | 109 | | _ushortTypeDictionary.Add(MessageTypes.CHANNEL_REESTABLISH, typeof(ChannelReestablishMessage)); |
| 0 | 110 | | _ushortTypeDictionary.Add(MessageTypes.CLOSING_SIGNED, typeof(ClosingSignedMessage)); |
| 0 | 111 | | _ushortTypeDictionary.Add(MessageTypes.COMMITMENT_SIGNED, typeof(CommitmentSignedMessage)); |
| 0 | 112 | | _ushortTypeDictionary.Add(MessageTypes.ERROR, typeof(ErrorMessage)); |
| 0 | 113 | | _ushortTypeDictionary.Add(MessageTypes.INIT, typeof(InitMessage)); |
| 0 | 114 | | _ushortTypeDictionary.Add(MessageTypes.OPEN_CHANNEL_2, typeof(OpenChannel2Message)); |
| 0 | 115 | | _ushortTypeDictionary.Add(MessageTypes.PING, typeof(PingMessage)); |
| 0 | 116 | | _ushortTypeDictionary.Add(MessageTypes.PONG, typeof(PingMessage)); |
| 0 | 117 | | _ushortTypeDictionary.Add(MessageTypes.REVOKE_AND_ACK, typeof(RevokeAndAckMessage)); |
| 0 | 118 | | _ushortTypeDictionary.Add(MessageTypes.SHUTDOWN, typeof(ShutdownMessage)); |
| 0 | 119 | | _ushortTypeDictionary.Add(MessageTypes.STFU, typeof(StfuMessage)); |
| 0 | 120 | | _ushortTypeDictionary.Add(MessageTypes.TX_ABORT, typeof(TxAbortMessage)); |
| 0 | 121 | | _ushortTypeDictionary.Add(MessageTypes.TX_ACK_RBF, typeof(TxAckRbfMessage)); |
| 0 | 122 | | _ushortTypeDictionary.Add(MessageTypes.TX_ADD_INPUT, typeof(TxAddInputMessage)); |
| 0 | 123 | | _ushortTypeDictionary.Add(MessageTypes.TX_ADD_OUTPUT, typeof(TxAddOutputMessage)); |
| 0 | 124 | | _ushortTypeDictionary.Add(MessageTypes.TX_COMPLETE, typeof(TxCompleteMessage)); |
| 0 | 125 | | _ushortTypeDictionary.Add(MessageTypes.TX_INIT_RBF, typeof(TxInitRbfMessage)); |
| 0 | 126 | | _ushortTypeDictionary.Add(MessageTypes.TX_REMOVE_INPUT, typeof(TxRemoveInputMessage)); |
| 0 | 127 | | _ushortTypeDictionary.Add(MessageTypes.TX_REMOVE_OUTPUT, typeof(TxRemoveOutputMessage)); |
| 0 | 128 | | _ushortTypeDictionary.Add(MessageTypes.TX_SIGNATURES, typeof(TxSignaturesMessage)); |
| 0 | 129 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_ADD_HTLC, typeof(UpdateAddHtlcMessage)); |
| 0 | 130 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FAIL_HTLC, typeof(UpdateFailHtlcMessage)); |
| 0 | 131 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FAIL_MALFORMED_HTLC, typeof(UpdateFailMalformedHtlcMessage)); |
| 0 | 132 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FEE, typeof(UpdateFeeMessage)); |
| 0 | 133 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FULFILL_HTLC, typeof(UpdateFulfillHtlcMessage)); |
| 0 | 134 | | _ushortTypeDictionary.Add(MessageTypes.WARNING, typeof(WarningMessage)); |
| 0 | 135 | | } |
| | 136 | | } |