Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public InputInitializer(string key, IRelayInput input, ArrayEx <Action <DateTime>[]> queue, Action <InputInitializer> onDispose)
 {
     Key        = key;
     Input      = input;
     _queue     = queue;
     _onDispose = onDispose;
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public IInputLinks GetInputLinks(IRelayInput input)
        {
            if (input == null)
            {
                return(null);
            }

            var iKey = input.Name ?? string.Empty;

            _inputInitializer.TryGetValue(iKey, out var initializer);
            return(initializer);
        }
Exemplo n.º 5
0
 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);
 }