private static object UpConvert(IUpConverterFactory upConverterFactory, Type messageType, object message)
        {
            var converter = upConverterFactory.CreateInstanceFor(messageType);

            while (converter != null)
            {
                message   = upConverterFactory.Invoke(converter, messageType, message);
                converter = upConverterFactory.CreateInstanceFor(message.GetType());
            }
            return(message);
        }
        public static MessageEnvelope Transform(ISerializer serializer, IUpConverterFactory upConverterFactory, MessageRaw raw)
        {
            var message        = DeserializeMessage(serializer, raw);
            var customMetadata = DeserializeMetadata(serializer, raw);

            if (upConverterFactory != null)
            {
                message = UpConvert(upConverterFactory, message.GetType(), message);
            }

            return(new MessageEnvelope(message, customMetadata, raw));
        }
Example #3
0
        private static IEvent UpConvert(IUpConverterFactory upConverterFactory, Type eventType, IEvent @event)
        {
            if (upConverterFactory == null)
            {
                return(@event);
            }

            var upConverter = upConverterFactory.CreateInstance(eventType);

            while (upConverter != null)
            {
                @event      = ((dynamic)upConverter).Convert((dynamic)@event);
                upConverter = upConverterFactory.CreateInstance(@event.GetType());
            }
            return(@event);
        }
Example #4
0
        public PollerContext(IContractsRegistry contractsRegistry, ILogger logger, IPollerStateRepository stateRepository, IUpConverterFactory upConverterFactory)
        {
            if (contractsRegistry == null)
            {
                throw new ArgumentNullException(nameof(contractsRegistry));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            if (stateRepository == null)
            {
                throw new ArgumentNullException(nameof(stateRepository));
            }

            ContractsRegistry  = contractsRegistry;
            Logger             = logger;
            StateRepository    = stateRepository;
            UpConverterFactory = upConverterFactory;
        }
Example #5
0
        public Runner(IContractsRegistry contractsRegistry, ILogger logger, IPollerStateRepository stateRepository, SubscriptionPoller poller, IUpConverterFactory upConverterFactory)
        {
            if (poller == null)
            {
                throw new ArgumentNullException(nameof(poller));
            }
            Poller = poller;

            _pollerContext = new PollerContext(contractsRegistry, logger, stateRepository, upConverterFactory);
            _startedAt     = new InterlockedDateTime(DateTime.MaxValue);
            _timeoutCalc   = new PollerTimeoutCalculator(Poller.GetFetchTimeout());
            _runnerTimer   = CreateTimer(_timeoutCalc);
        }
Example #6
0
        public async Task <List <ExtractedEvent> > FetchAsync(IContractsRegistry registry, IUpConverterFactory upConverterFactory, long lastVersion, int?subscriptionId, CancellationToken cancellationToken = new CancellationToken())
        {
            List <ExtractedEvent> extractedEvents = null;

            using (var cnn = new SqlConnection(_connectionString))
            {
                await cnn.OpenAsync(cancellationToken).NotOnCapturedContext();

                var cmd = cnn.CreateCommand();
                OnSqlCommandCreated(cmd, lastVersion, subscriptionId, _fetchLimit);
                using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SingleResult | CommandBehavior.SequentialAccess, cancellationToken).NotOnCapturedContext())
                {
                    if (reader.HasRows)
                    {
                        extractedEvents = new List <ExtractedEvent>(_fetchLimit);
                        while (await reader.ReadAsync(cancellationToken).NotOnCapturedContext())
                        {
                            var eventType = registry.GetType(await reader.GetFieldValueAsync <string>(colIndexForContractName, cancellationToken).NotOnCapturedContext());

                            var @event   = UpConvert(upConverterFactory, eventType, _serializer.Deserialize <IEvent>(await reader.GetFieldValueAsync <byte[]>(colIndexForEventPayload, cancellationToken).NotOnCapturedContext(), eventType));
                            var metadata = await reader.IsDBNullAsync(colIndexForMetaPayload, cancellationToken).NotOnCapturedContext()
                                ? null
                                : _serializer.Deserialize <IDictionary <string, object> >(await reader.GetFieldValueAsync <byte[]>(colIndexForMetaPayload, cancellationToken).NotOnCapturedContext(), metadataType);

                            var envelope = new EventEnvelope(
                                await reader.GetFieldValueAsync <Guid>(colIndexForStreamId, cancellationToken).NotOnCapturedContext(),         // StreamId 0
                                await reader.GetFieldValueAsync <Guid>(colIndexForCommitId, cancellationToken).NotOnCapturedContext(),         // CommitId 1
                                await reader.GetFieldValueAsync <DateTime>(colIndexForCreatedAtUtc, cancellationToken).NotOnCapturedContext(), // CreatedAtUtc 2
                                await reader.GetFieldValueAsync <long>(colIndexForEventId, cancellationToken).NotOnCapturedContext(),          // EventId 3
                                await reader.GetFieldValueAsync <int>(colIndexForVersion, cancellationToken).NotOnCapturedContext(),           // Version 4
                                @event,
                                metadata);

                            extractedEvents.Add(new ExtractedEvent(envelope, GetType()));
                        }
                    }
                }
            }
            return(extractedEvents ?? new List <ExtractedEvent>(0));
        }
Example #7
0
 public ProjectorBase WithUpConverterFactory(IUpConverterFactory factory)
 {
     UpConverterFactory = factory;
     return(this);
 }
Example #8
0
 public EventStoreSubscriptions WithUpConverterFactory(IUpConverterFactory factory)
 {
     _upConverterFactory = factory;
     return(this);
 }