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)); }
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); }
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; }
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); }
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)); }
public ProjectorBase WithUpConverterFactory(IUpConverterFactory factory) { UpConverterFactory = factory; return(this); }
public EventStoreSubscriptions WithUpConverterFactory(IUpConverterFactory factory) { _upConverterFactory = factory; return(this); }