示例#1
0
        private async void ApiUpdate(ApiData apiData)
        {
            try
            {
                if (!_apiDataUpdates.ContainsKey(apiData.ApiKey))
                {
                    _apiDataUpdates.TryAdd(apiData.ApiKey, apiData);
                }

                if (!_apiUpdateBusy)
                {
                    _apiUpdateBusy = true;

                    while (_apiDataUpdates.Count > 0)
                    {
                        var apiUpdates = _apiDataUpdates.Values.ToList();
                        _apiDataUpdates.Clear();

                        var postData = new PostApiStatus()
                        {
                            SecurityToken = _sharedSettings.SecurityToken,
                            ApiData       = apiUpdates
                        };

                        var start = new Stopwatch();
                        start.Start();
                        var result = await _sharedSettings.PostAsync <PostApiStatus, ReturnValue>("Remote/UpdateApi", postData, CancellationToken.None);

                        start.Stop();
                        _logger.LogTrace("Send api results completed in {0}ms.", start.ElapsedMilliseconds);

                        if (result.Success == false)
                        {
                            _logger.LogError(250, result.Exception,
                                             "Update api results failed.  Return message was: {0}." + result.Message);
                        }

                        // wait a little while for more tasks results to arrive.
                        await Task.Delay(500);
                    }

                    _apiUpdateBusy = false;
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(250, ex,
                                 "Update api status failed with error.  Error was: {0}." + ex.Message);
                _apiUpdateBusy = false;
            }
        }
        public async Task <ReturnValue> UpdateApi([FromBody] PostApiStatus apiData, CancellationToken cancellationToken)
        {
            try
            {
                if (string.IsNullOrEmpty(apiData.SecurityToken))
                {
                    return(new ReturnValue(false, $"Could not update api status as no security token was provided by the remote agent.", null));
                }

                //send any update to results to the clients
                foreach (var item in apiData.ApiData)
                {
                    await _operations.BroadcastHubMessageAsync(item.HubKey, EClientCommand.ApiStatus, item, cancellationToken);
                }

                return(new ReturnValue(true));
            }
            catch (Exception ex)
            {
                return(new ReturnValue(false, "Error occurred in UpdateTasks. " + ex.Message, ex));
            }
        }