public IRelayConnector Connect(IRelayInput input, IRelayOutput output) { if (input == null || output == null) { return(null); } var iKey = input.Name ?? string.Empty; var oKey = output.Name ?? string.Empty; if (!_inputInitializer.TryGetValue(iKey, out var inputInitializer)) { _inputInitializer.Add(iKey, inputInitializer = new InputInitializer(iKey, input, _queue, RemoveInputInitializer)); } if (!_outputInitializer.TryGetValue(oKey, out var outputInitializer)) { _outputInitializer.Add(oKey, outputInitializer = new OutputInitializer(oKey, output, RemoveOutputInitializer)); } var key = $"{iKey}-{oKey}"; if (!_connectors.TryGetValue(key, out var connector)) { _connectors.Add(key, connector = new RelayConnector(key, inputInitializer, outputInitializer, _lazyInitializer, RemoveConnector)); } return(connector); }
public InputInitializer(string key, IRelayInput input, ArrayEx <Action <DateTime>[]> queue, Action <InputInitializer> onDispose) { Key = key; Input = input; _queue = queue; _onDispose = onDispose; }
public bool HasCallback(IRelayInput input) { if (input == null) { return(false); } var iKey = input.Name ?? string.Empty; return(_inputInitializer.TryGetValue(iKey, out var initializer) && initializer.HasCallbacks); }
public IInputLinks GetInputLinks(IRelayInput input) { if (input == null) { return(null); } var iKey = input.Name ?? string.Empty; _inputInitializer.TryGetValue(iKey, out var initializer); return(initializer); }
public InputRuntime( PulseSource *pulseSource, IRelayInput input, Action <DateTime>[] callbacks, ArrayEx <Action <DateTime>[]> callbackQueue) { _callbacks = callbacks; _callbackQueue = callbackQueue; _pulseSource = pulseSource; _subscription = _callbacks.Length > 0 ? input.Subscribe(PulseWithCallbacks) : input.Subscribe(Pulse); }