private string TryAddExecutionPointer(string pathId, BaseFlowNode flowNode, ICollection <MessageToken> outcomeValues = null) { ICollection <MessageToken> incoming = new List <MessageToken>(); if (outcomeValues != null) { incoming = outcomeValues; } var instanceId = string.Empty; if (!TryAddInstance(flowNode, pathId, out instanceId)) { var pointer = GetActiveExecutionPointer(pathId, instanceId); if (pointer != null) { var e = new IncomingTokenAddedEvent(Guid.NewGuid().ToString(), AggregateId, Version + 1, pointer.ExecutionPathId, pointer.Id, JsonConvert.SerializeObject(incoming), DateTime.UtcNow); Handle(e); DomainEvents.Add(e); return(pointer.Id); } } var id = Guid.NewGuid().ToString(); var evt = new ExecutionPointerAddedEvent(Guid.NewGuid().ToString(), AggregateId, Version + 1, id, pathId, instanceId, flowNode.EltId, JsonConvert.SerializeObject(incoming), DateTime.UtcNow); Handle(evt); DomainEvents.Add(evt); return(id); }
private void Handle(IncomingTokenAddedEvent evt) { var pointer = GetExecutionPointer(evt.ExecutionPathId, evt.ExecutionPointerId); var tokens = MessageToken.DeserializeLst(evt.SerializedToken); pointer.AddIncoming(tokens); Version = evt.Version; UpdateDateTime = evt.CreateDateTime; }
private void ConsumeMessage(ExecutionPath executionPath, MessageToken messageToken) { foreach (var pointer in executionPath.ActivePointers) { var nodeDef = GetDefinition(pointer.FlowNodeId) as BaseCatchEvent; if (nodeDef == null) { continue; } if (nodeDef.EventDefinitions.Any(_ => _.IsSatisfied(this, messageToken))) { var tokens = new List <MessageToken> { messageToken }; var evt = new IncomingTokenAddedEvent(Guid.NewGuid().ToString(), AggregateId, Version + 1, executionPath.Id, pointer.Id, JsonConvert.SerializeObject(tokens), DateTime.UtcNow); Handle(evt); DomainEvents.Add(evt); } } }