| | 1 | | namespace NLightning.Infrastructure.Serialization.Factories; |
| | 2 | |
|
| | 3 | | using Domain.Protocol.Constants; |
| | 4 | | using Domain.Protocol.Payloads; |
| | 5 | | using Domain.Protocol.Payloads.Interfaces; |
| | 6 | | using Domain.Serialization.Factories; |
| | 7 | | using Domain.Serialization.Payloads; |
| | 8 | | using Interfaces; |
| | 9 | | using Payloads; |
| | 10 | |
|
| | 11 | | public class PayloadSerializerFactory : IPayloadSerializerFactory |
| | 12 | | { |
| | 13 | | private readonly IFeatureSetSerializer _featureSetSerializer; |
| 4 | 14 | | private readonly Dictionary<Type, IPayloadSerializer> _serializers = new(); |
| 4 | 15 | | private readonly Dictionary<ushort, Type> _ushortTypeDictionary = new(); |
| | 16 | | private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory; |
| | 17 | |
|
| 4 | 18 | | public PayloadSerializerFactory(IFeatureSetSerializer featureSetSerializer, |
| 4 | 19 | | IValueObjectSerializerFactory valueObjectSerializerFactory) |
| | 20 | | { |
| 4 | 21 | | _featureSetSerializer = featureSetSerializer; |
| 4 | 22 | | _valueObjectSerializerFactory = valueObjectSerializerFactory; |
| | 23 | |
|
| 4 | 24 | | RegisterSerializers(); |
| 4 | 25 | | RegisterTypeDictionary(); |
| 4 | 26 | | } |
| | 27 | |
|
| | 28 | | public IPayloadSerializer<TPayloadType>? GetSerializer<TPayloadType>() where TPayloadType : IMessagePayload |
| | 29 | | { |
| 184 | 30 | | return _serializers.GetValueOrDefault(typeof(TPayloadType)) as IPayloadSerializer<TPayloadType>; |
| | 31 | | } |
| | 32 | |
|
| | 33 | | public IPayloadSerializer? GetSerializer(ushort messageType) |
| | 34 | | { |
| 148 | 35 | | var type = _ushortTypeDictionary.GetValueOrDefault(messageType); |
| 148 | 36 | | return type is null ? null : _serializers.GetValueOrDefault(type); |
| | 37 | | } |
| | 38 | |
|
| | 39 | | private void RegisterSerializers() |
| | 40 | | { |
| 4 | 41 | | _serializers.Add(typeof(AcceptChannel2Payload), |
| 4 | 42 | | new AcceptChannel2PayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 43 | | _serializers.Add(typeof(ChannelReadyPayload), new ChannelReadyPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 44 | | _serializers.Add(typeof(ChannelReestablishPayload), |
| 4 | 45 | | new ChannelReestablishPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 46 | | _serializers.Add(typeof(ClosingSignedPayload), |
| 4 | 47 | | new ClosingSignedPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 48 | | _serializers.Add(typeof(CommitmentSignedPayload), |
| 4 | 49 | | new CommitmentSignedPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 50 | | _serializers.Add(typeof(ErrorPayload), new ErrorPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 51 | | _serializers.Add(typeof(InitPayload), new InitPayloadSerializer(_featureSetSerializer)); |
| 4 | 52 | | _serializers.Add(typeof(OpenChannel2Payload), new OpenChannel2PayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 53 | | _serializers.Add(typeof(PingPayload), new PingPayloadSerializer()); |
| 4 | 54 | | _serializers.Add(typeof(PongPayload), new PongPayloadSerializer()); |
| 4 | 55 | | _serializers.Add(typeof(RevokeAndAckPayload), new RevokeAndAckPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 56 | | _serializers.Add(typeof(ShutdownPayload), new ShutdownPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 57 | | _serializers.Add(typeof(StfuPayload), new StfuPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 58 | | _serializers.Add(typeof(TxAbortPayload), new TxAbortPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 59 | | _serializers.Add(typeof(TxAckRbfPayload), new TxAckRbfPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 60 | | _serializers.Add(typeof(TxAddInputPayload), new TxAddInputPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 61 | | _serializers.Add(typeof(TxAddOutputPayload), new TxAddOutputPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 62 | | _serializers.Add(typeof(TxCompletePayload), new TxCompletePayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 63 | | _serializers.Add(typeof(TxInitRbfPayload), new TxInitRbfPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 64 | | _serializers.Add(typeof(TxRemoveInputPayload), |
| 4 | 65 | | new TxRemoveInputPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 66 | | _serializers.Add(typeof(TxRemoveOutputPayload), |
| 4 | 67 | | new TxRemoveOutputPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 68 | | _serializers.Add(typeof(TxSignaturesPayload), new TxSignaturesPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 69 | | _serializers.Add(typeof(UpdateAddHtlcPayload), |
| 4 | 70 | | new UpdateAddHtlcPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 71 | | _serializers.Add(typeof(UpdateFailHtlcPayload), |
| 4 | 72 | | new UpdateFailHtlcPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 73 | | _serializers.Add(typeof(UpdateFailMalformedHtlcPayload), |
| 4 | 74 | | new UpdateFailMalformedHtlcPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 75 | | _serializers.Add(typeof(UpdateFeePayload), new UpdateFeePayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 76 | | _serializers.Add(typeof(UpdateFulfillHtlcPayload), |
| 4 | 77 | | new UpdateFulfillHtlcPayloadSerializer(_valueObjectSerializerFactory)); |
| 4 | 78 | | } |
| | 79 | |
|
| | 80 | | private void RegisterTypeDictionary() |
| | 81 | | { |
| 4 | 82 | | _ushortTypeDictionary.Add(MessageTypes.ACCEPT_CHANNEL_2, typeof(AcceptChannel2Payload)); |
| 4 | 83 | | _ushortTypeDictionary.Add(MessageTypes.CHANNEL_READY, typeof(ChannelReadyPayload)); |
| 4 | 84 | | _ushortTypeDictionary.Add(MessageTypes.CHANNEL_REESTABLISH, typeof(ChannelReestablishPayload)); |
| 4 | 85 | | _ushortTypeDictionary.Add(MessageTypes.CLOSING_SIGNED, typeof(ClosingSignedPayload)); |
| 4 | 86 | | _ushortTypeDictionary.Add(MessageTypes.COMMITMENT_SIGNED, typeof(CommitmentSignedPayload)); |
| 4 | 87 | | _ushortTypeDictionary.Add(MessageTypes.ERROR, typeof(ErrorPayload)); |
| 4 | 88 | | _ushortTypeDictionary.Add(MessageTypes.INIT, typeof(InitPayload)); |
| 4 | 89 | | _ushortTypeDictionary.Add(MessageTypes.OPEN_CHANNEL_2, typeof(OpenChannel2Payload)); |
| 4 | 90 | | _ushortTypeDictionary.Add(MessageTypes.PING, typeof(PingPayload)); |
| 4 | 91 | | _ushortTypeDictionary.Add(MessageTypes.PONG, typeof(PongPayload)); |
| 4 | 92 | | _ushortTypeDictionary.Add(MessageTypes.REVOKE_AND_ACK, typeof(RevokeAndAckPayload)); |
| 4 | 93 | | _ushortTypeDictionary.Add(MessageTypes.SHUTDOWN, typeof(ShutdownPayload)); |
| 4 | 94 | | _ushortTypeDictionary.Add(MessageTypes.STFU, typeof(StfuPayload)); |
| 4 | 95 | | _ushortTypeDictionary.Add(MessageTypes.TX_ABORT, typeof(TxAbortPayload)); |
| 4 | 96 | | _ushortTypeDictionary.Add(MessageTypes.TX_ACK_RBF, typeof(TxAckRbfPayload)); |
| 4 | 97 | | _ushortTypeDictionary.Add(MessageTypes.TX_ADD_INPUT, typeof(TxAddInputPayload)); |
| 4 | 98 | | _ushortTypeDictionary.Add(MessageTypes.TX_ADD_OUTPUT, typeof(TxAddOutputPayload)); |
| 4 | 99 | | _ushortTypeDictionary.Add(MessageTypes.TX_COMPLETE, typeof(TxCompletePayload)); |
| 4 | 100 | | _ushortTypeDictionary.Add(MessageTypes.TX_INIT_RBF, typeof(TxInitRbfPayload)); |
| 4 | 101 | | _ushortTypeDictionary.Add(MessageTypes.TX_REMOVE_INPUT, typeof(TxRemoveInputPayload)); |
| 4 | 102 | | _ushortTypeDictionary.Add(MessageTypes.TX_REMOVE_OUTPUT, typeof(TxRemoveOutputPayload)); |
| 4 | 103 | | _ushortTypeDictionary.Add(MessageTypes.TX_SIGNATURES, typeof(TxSignaturesPayload)); |
| 4 | 104 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_ADD_HTLC, typeof(UpdateAddHtlcPayload)); |
| 4 | 105 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FAIL_HTLC, typeof(UpdateFailHtlcPayload)); |
| 4 | 106 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FAIL_MALFORMED_HTLC, typeof(UpdateFailMalformedHtlcPayload)); |
| 4 | 107 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FEE, typeof(UpdateFeePayload)); |
| 4 | 108 | | _ushortTypeDictionary.Add(MessageTypes.UPDATE_FULFILL_HTLC, typeof(UpdateFulfillHtlcPayload)); |
| 4 | 109 | | _ushortTypeDictionary.Add(MessageTypes.WARNING, typeof(ErrorPayload)); |
| 4 | 110 | | } |
| | 111 | | } |