public IActionResult GetAll()
        {
            var signals = _signalService.GetAll();

            if (userRole == "Admin") // All signals for the admin
            {
                var model = _mapper.Map <IList <SignalModel> >(signals);
                return(Ok(model));
            }
            else   // Only active signals for normal user
            {
                signals = signals.ToList <Signal>();
                var signalQuery =
                    from Signal signal in signals
                    where signal.Status == Status.Active
                    select signal;
                var model = _mapper.Map <IList <SignalModel> >(signalQuery);
                return(Ok(model));
            }
        }
示例#2
0
        public void Start()
        {
            Task pushEventsToLocalStorageTask = Task.Factory.StartNew(() =>
            {
                List <Signal> extract = new List <Signal>();

                while (true)
                {
                    if (_TokenSource.IsCancellationRequested)
                    {
                        break;
                    }

                    if (movingToLocal || movingToCloud) // Must wait when any data transfer
                    {
                        Thread.Sleep(20);
                        continue;
                    }

                    movingToLocal = true;

                    Signal signal;

                    try
                    {
                        Thread.Sleep(20);

                        extract.Clear();


                        while (_EventCache.TryTake(out signal))
                        {
                            extract.Add(signal);
                        }

                        _Service.Add(extract);
                    }
                    catch (Exception ex)
                    {
                        _Logger.LogError(ex.Message);
                    }
                    finally { movingToLocal = false; }

                    while (_EventCacheTemp.TryTake(out signal))
                    {
                        _EventCache.Add(signal);
                    }

                    Thread.Sleep(IntervalMemToLocal * 1000);
                }
            }, _TokenSource.Token);

            Task transferEventsToCloudStorageTask = Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    Thread.Sleep(IntervalLocalToCloud * 1000);
                    int attempt = 0;

                    while (movingToLocal || movingToCloud)
                    {
                        attempt++;
                        if (attempt > 100) // Do task anyway
                        {
                            break;
                        }
                        Thread.Sleep(100);
                    }

                    movingToCloud = true;

                    try
                    {
                        IEnumerable <Signal> events = _Service.GetAll();

                        foreach (var signal in events)
                        {
                            _CloudAdapter.Enqueue(signal.DeviceId, signal.Data);
                        }

                        _Service.Truncate();
                    }
                    catch (Exception ex)
                    {
                        _Logger.LogError(ex.Message);
                    }
                    finally
                    {
                        movingToCloud = false;
                    }
                }
            }, _TokenSource.Token);
        }