public async Task <NetworkResponse> PostJson(string relativeUrl, string body)
        {
            try {
                if (!string.IsNullOrEmpty(AuthToken))
                {
                    _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AuthToken);
                }
                var content = new StringContent(body, Encoding.UTF8, "application/json");
                var result  = await _client.PostAsync(_baseUrl + relativeUrl, content);

                var responseText = await result.Content.ReadAsStringAsync();

                if (!result.IsSuccessStatusCode)
                {
                    _logger.ErrorFormat(this, "PostJson failed: {0} {1}", (int)result.StatusCode, result.ReasonPhrase);
                }
                return(new NetworkResponse(result.IsSuccessStatusCode, responseText, (int)result.StatusCode));
            } catch (Exception e) {
                _logger.ErrorFormat(this, "PostJson failed: {0}", e);
                return(new NetworkResponse(false, "", -1));
            }
        }
        public async Task Update(ICommand command)
        {
            var state  = _state.State;
            var config = _state.Config;
            var runner = new CommandRunner(_offsetTime.Offset, command, state, config);

            foreach (var item in runner)
            {
                _logger.DebugFormat(this, "Start executing command: {0}", item.Command);
                if (!item.IsValid())
                {
                    _logger.ErrorFormat(this, "Command is invalid: {0}", item.Command);
                    return;
                }
                item.Execute();
                _logger.DebugFormat(this, "End executing command: {0}", item.Command);
                var container = _handlers.GetOrDefault(item.Command.GetType());
                if (container != null)
                {
                    var handlers = container.GetHandlers();
                    foreach (var handler in handlers)
                    {
                        await container.Invoke(handler, item.Command);

                        OnStateUpdated(state);
                    }
                }
                OnStateUpdated(state);
            }
            var response = await _api.Post(new IntentRequest(_state.User.Login, state.Version, command));

            if (!response.Success)
            {
                _logger.Error(this, "State declined from server.");
                return;
            }
            var result = response.Result;

            state.Version = result.NewVersion;
            _logger.Debug(this, "State approved from server.");
        }
Example #3
0
        public async Task <NetworkResponse> PostJson(string relativeUrl, string body)
        {
            try {
                var data = Encoding.UTF8.GetBytes(body);
                var req  = new UnityWebRequest(_settings.BaseUrl + relativeUrl, UnityWebRequest.kHttpVerbPOST);
                if (!string.IsNullOrEmpty(AuthToken))
                {
                    req.SetRequestHeader("Authorization", "Bearer " + AuthToken);
                }
                req.uploadHandler   = new UploadHandlerRaw(data);
                req.downloadHandler = new DownloadHandlerBuffer();
                req.SetRequestHeader("Accept", "application/json; charset=UTF-8");
                req.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
                await req.SendWebRequest();

                var isFailed = req.isHttpError || req.isNetworkError;
                return(new NetworkResponse(!isFailed, req.downloadHandler.text, (int)req.responseCode));
            } catch (Exception e) {
                _logger.ErrorFormat(this, "PostJson failed: {0}", e);
                return(new NetworkResponse(false, "", -1));
            }
        }