public void HandleEventInstance(ProjectionValueReturned eventInstance)
 {
     if (_requestedProjections.Contains(eventInstance))
     {
         _requestedProjections.Remove(eventInstance);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
 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);
            }
        }