private void CanBricklet_FrameReadCallback(BrickletCANV2 sender, byte frameType, long identifier, byte[] data)
        {
            var can = new CanPackage((CanFrameType)frameType, identifier, data);

            CurrentInput = can;
            InputUpdated?.Invoke(this, new SensorUpdatedEventArgs <CanPackage>(can));
        }
        /// <summary>
        /// Прочитать входные данные из файла, обработать их и сохранить для последующих действий.
        /// </summary>
        /// <param name="file">Ссылка на выбранный файл.</param>
        /// <exception cref="InvalidInputFileException">Входные данные в файле не в поддерживаемом формате.</exception>
        public async Task SetFromFile(IFileReference file)
        {
            await using var stream = await file.CreateMemoryStreamAsync(4096);

            using var reader = new StreamReader(stream);
            var content      = reader.ReadToEnd();
            var decerialized = JsonConvert.DeserializeObject <KnapsackInput>(content);

            if (decerialized?.Items == null || decerialized.Knapsack == null)
            {
                throw new InvalidInputFileException();
            }

            Input = decerialized;
            InputUpdated?.Invoke();
        }
        private void UpdateInputState(object sender, ElapsedEventArgs e)
        {
            var newInputDateTime = _inputSources.GetLastInputTime();

            if (newInputDateTime.Subtract(_lastInputDateTime).TotalMilliseconds > 1000)
            {
                if (_lastInputDateTime.AddMilliseconds(_maxElapsedTimeMilliseconds) < newInputDateTime)
                {
                    _lastInputUpdateDateTime = DateTime.Now;
                    InputStarted?.Invoke(this, newInputDateTime);
                }
                else if (_lastInputUpdateDateTime.AddMilliseconds(_inputUpdateFrequencyMilliseconds) < DateTime.Now)
                {
                    _lastInputUpdateDateTime = DateTime.Now;
                    InputUpdated?.Invoke(this, newInputDateTime);
                }

                _lastInputDateTime = newInputDateTime;
            }
        }
 public void UpdateInput()
 {
     InputUpdated?.Invoke(this, EventArgs.Empty);
 }