private void DefineGraph(IReadOnlyDictionary <string, int> portCount, HashSet <IDictionary <string, object> > links, TransitionHandler <State <object>, State <object>, Type> handler) { var link = new Dictionary <string, object>(); var address = handler.GetAddress().Split(new string[] { "::" }, StringSplitOptions.None); link.Add("source", handler.GetStateTransition().GetSourceName()); link.Add("target", handler.GetStateTransition().GetTargetName()); link.Add("label", address.Length == 3 ? address[2] : "TO"); var sourcePortKey = handler.GetStateTransition().GetSourceName(); var sourcePort = address.Length != 3 ? (portCount[sourcePortKey] != 0 ? portCount[sourcePortKey] + 1 : 0) : 1; var targetPortKey = string.Concat("TO", "::", handler.GetStateTransition().GetTargetName()); int targetPort = address.Length != 3 ? (portCount[targetPortKey] != 0 ? portCount[targetPortKey] + 1 : 1) : 0; link.Add("port", sourcePort + targetPort); links.Add(link); }
public ICompletes <StateTransition <TState, TRawState, TTypeState> > ApplyEvent <TN>(TN @event) where TN : Event { TransitionHandler <TState, TRawState, TTypeState> handler = _transitionHandlerMap.First(x => x.Key == @event.GetEventType()).Value; try { if (handler == null) { throw new SystemException(string.Concat("The event with type [", @event.GetEventType(), "] does not match a" + " valid transition handler in the processor kernel.")); } return(Completes().With(handler.GetStateTransition())); } catch (Exception ex) { Logger.Debug(ex.Message, ex); return(Completes().With <StateTransition <TState, TRawState, TTypeState> >(null)); } }