public void HandleEventInstance(ProjectionValueReturned eventInstance) { if (_requestedProjections.Contains(eventInstance)) { _requestedProjections.Remove(eventInstance); } }
public async Task PostProjectionResponse(string domainName, string entityTypeName, string instanceKey, string projectionTypeName, Nullable <DateTime> asOfDate, string correlationIdentifier, int asOfSequenceNumber, object projectionResult) { EventStream esQry = new EventStream(new EventStreamAttribute(MakeDomainQueryName(DomainName), QueryName, UniqueIdentifier), context: _queryContext); ProjectionValueReturned evRet = new ProjectionValueReturned() { DomainName = domainName, EntityTypeName = entityTypeName, InstanceKey = instanceKey, AsOfDate = asOfDate, AsOfSequenceNumber = asOfSequenceNumber, CorrelationIdentifier = correlationIdentifier, ProjectionTypeName = projectionTypeName, DateLogged = DateTime.UtcNow, Value = projectionResult }; await esQry.AppendEvent(evRet); }
/// <summary> /// Append a projection response to the command event stream /// </summary> /// <param name="domainName"></param> /// <param name="entityTypeName"></param> /// <param name="instanceKey"></param> /// <param name="projectionTypeName"></param> /// <param name="asOfDate"></param> /// <param name="correlationIdentifier"></param> /// <param name="asOfSequenceNumber"></param> /// <param name="projectionResult"></param> /// <returns></returns> public async Task PostProjectionResponse(string domainName, string entityTypeName, string instanceKey, string projectionTypeName, Nullable <DateTime> asOfDate, string correlationIdentifier, int asOfSequenceNumber, IProjection projectionResult) { EventStream esCmd = new EventStream(new EventStreamAttribute(MakeDomainCommandName(DomainName), CommandName, UniqueIdentifier, notificationDispatcherName: _commandDispatcherName), context: _commandContext); ProjectionValueReturned evRet = new ProjectionValueReturned() { ProjectionDomainName = domainName, ProjectionEntityTypeName = entityTypeName, ProjectionInstanceKey = instanceKey, AsOfDate = asOfDate, AsOfSequenceNumber = asOfSequenceNumber, CorrelationIdentifier = correlationIdentifier, ProjectionTypeName = projectionTypeName, DateLogged = DateTime.UtcNow, Value = projectionResult.ToString() }; await esCmd.AppendEvent(evRet); }
public void HandleEventInstance(ProjectionValueReturned eventInstance) { if (_requestedProjections.Contains(eventInstance, _comparer)) { ProjectionComparer compareTo = new ProjectionComparer(eventInstance); int pos = _requestedProjections.FindIndex(0, compareTo.Equals); if (pos >= 0) { _requestedProjections.RemoveAt(pos); } } }
/// <summary> /// A projection was evaluated and the results returned for this query /// </summary> /// <param name="eventHandled"> /// Detail of the projection value returned /// </param> public void HandleEvent(ProjectionValueReturned eventHandled) { if (null != eventHandled) { #region Logging if (null != log) { log.LogDebug($"Query projection value returned {eventHandled.ProjectionTypeName } for { eventHandled.DomainName }.{eventHandled.AggregateType}.{eventHandled.AggregateInstanceKey } as at {eventHandled.AsOfDate} in { nameof(Query_Projections_Projection)}"); } #endregion // remove this from this to the unprocessed list int unprocessedIndex = unprocessedRequests.FindIndex(f => f.DomainName == eventHandled.DomainName && f.AggregateType == eventHandled.AggregateType && f.AggregateInstanceKey == eventHandled.AggregateInstanceKey); if (unprocessedIndex >= 0) { unprocessedRequests.RemoveAt(unprocessedIndex); } // remove it from any in-progress list int inflightIndex = inflightRequests.FindIndex(f => f.DomainName == eventHandled.DomainName && f.AggregateType == eventHandled.AggregateType && f.AggregateInstanceKey == eventHandled.AggregateInstanceKey); if (inflightIndex >= 0) { inflightRequests.RemoveAt(inflightIndex); } // add it to the processed list processedRequests.Add(eventHandled); } }