public async Task <bool> UploadBytes(string url, byte[] data)
        {
            try
            {
                if (_networkInformation.QuickNetworkCheck())
                {
                    var native = new NativeMessageHandler();

                    var httpClient = new HttpClient(native);
                    var message    = new HttpRequestMessage(HttpMethod.Post, url);

                    native.RegisterForProgress(message, (bytes, totalBytes, expected) => new TransferProgressMessage(url, bytes, totalBytes, expected, true).Send());

                    var content = new ByteArrayContent(data);

                    message.Content = content;

                    var result = await httpClient.SendAsync(message);

                    return(result.IsSuccessStatusCode);
                }
            }
            catch
            {
                Debug.WriteLine("WARNING: Could not upload: {0}", url);
            }

            return(false);
        }
Пример #2
0
        public async Task <bool> UploadBytes(string url, byte[] data)
        {
            try
            {
                if (_networkInformation.QuickNetworkCheck())
                {
                    var httpClient = new HttpClient();
                    var message    = new HttpRequestMessage(HttpMethod.Post, url);

                    var content = new ByteArrayContent(data);

                    message.Content = content;

                    var result = await httpClient.SendAsync(message);

                    return(result.IsSuccessStatusCode);
                }
            }
            catch
            {
                Debug.WriteLine("WARNING: Could not upload: {0}", url);
            }

            return(false);
        }
Пример #3
0
        Task _runStage(XFlowState state)
        {
            if (state.State != XFlowStates.WaitingForNetwork && state.State != XFlowStates.WaitingForRetry &&
                state.State != XFlowStates.WaitingToStart)
            {
                return(null);
            }

            if (_inProgressStates.Contains(state))
            {
                return(null);
            }


            var t = Task.Run(async() =>
            {
                var stage = _getStage(state);

                if (stage.RequiresNetwork && !_networkStatus.QuickNetworkCheck())
                {
                    state.State = XFlowStates.WaitingForNetwork;
                    await Task.Yield();
                    return;
                }

                state.Text = stage.ProcessingText;

                state.State     = XFlowStates.InProgress;
                state.Timestamp = DateTime.UtcNow;


                if (stage.IsDisconnectedProcess)
                {
                    state.State = XFlowStates.DisconnectedProcessing;
                    await _save();
                    Debug.WriteLine("Stopping flow for disconnected state, will resume when asked. {0}", state);
                    return;
                }

                await _save();

                XStageResult failResult = null;

                try
                {
                    if (_inProgressStates.Contains(state))
                    {
                        return;
                    }

                    _inProgressStates.Add(state);

                    var result = await stage.Function(state.ItemId);

                    if (result.Id != Guid.Empty)
                    {
                        state.ItemId = result.Id;
                    }

                    state.PreviousStageResult = result;

                    _inProgressStates.Remove(state);

                    if (!result.IsSuccess)
                    {
                        await _failResult(state);
                    }
                    else
                    {
                        await _successResult(state);
                    }
                }
                catch (Exception ex)
                {
                    _inProgressStates.Remove(state);
                    failResult = new XStageResult(false, state.ItemId, null, exception: ex.ToString());
                }

                if (failResult != null)
                {
                    state.PreviousStageResult = failResult;

                    var stateString = _entitySerialiser.Serialise(state);

                    Debug.WriteLine("Caught exception process: {0}", stateString);

                    await _failResult(state);
                }

                _cancelProcessWait();
            });

            return(t);
        }