private void DownloadTorrentFile(CancellationToken cancellationToken)
        {
            _logger.LogDebug("Downloading torrent file...");
            _logger.LogTrace("torrentFilePath = " + TorrentFilePath);

            var torrentFileDownloader = _createNewHttpDownloader(TorrentFilePath, _resource.TorrentUrls);

            torrentFileDownloader.Download(cancellationToken);

            _logger.LogDebug("Torrent file downloaded.");
        }
Beispiel #2
0
        public IHttpResponse Get(HttpGetRequest getRequest)
        {
            try
            {
                _logger.LogDebug("Sending GET request to " + getRequest.Address);

                if (getRequest.Range != null)
                {
                    throw new NotImplementedException();
                }

                _logger.LogTrace("timeout  = " + getRequest.Timeout);

                var result = new WWWResult();

                var waitHandle = UnityDispatcher.InvokeCoroutine(GetWWW(getRequest, result));

                waitHandle.WaitOne(TimeSpan.FromMilliseconds(getRequest.Timeout));

                lock (result)
                {
                    if (!result.IsDone)
                    {
                        throw new WebException("Timeout.", WebExceptionStatus.Timeout);
                    }

                    var statusCode = ReadStatusCode(result);

                    _logger.LogDebug("Successfuly received response.");
                    return(new UnityHttpResponse(result.Text, statusCode, ResponseEncoding));
                }
            }
            catch (Exception e)
            {
                _logger.LogError("Failed to get response.", e);
                throw;
            }
        }
Beispiel #3
0
        public override void Prepare([NotNull] UpdaterStatus status, CancellationToken cancellationToken)
        {
            if (status == null)
            {
                throw new ArgumentNullException("status");
            }

            try
            {
                _logger.LogDebug("Preparing diff installation...");

                base.Prepare(status, cancellationToken);

                _localData.PrepareForWriting();

                _previousContentSummary = _remoteMetaData.GetContentSummary(_versionId - 1, cancellationToken);
                _contentSummary         = _remoteMetaData.GetContentSummary(_versionId, cancellationToken);
                _diffSummary            = _remoteMetaData.GetDiffSummary(_versionId, cancellationToken);

                double unarchivePackageWeight = StatusWeightHelper.GetUnarchivePackageWeight(_diffSummary.Size);
                _logger.LogTrace("unarchivePackageWeight = " + unarchivePackageWeight);
                _unarchivePackageStatusReporter = new OperationStatus
                {
                    Weight = { Value = unarchivePackageWeight }
                };
                status.RegisterOperation(_unarchivePackageStatusReporter);

                double addFilesWeight = StatusWeightHelper.GetAddDiffFilesWeight(_diffSummary);
                _logger.LogTrace("addFilesWeight = " + addFilesWeight);
                _addFilesStatusReporter = new OperationStatus
                {
                    Weight = { Value = addFilesWeight }
                };
                status.RegisterOperation(_addFilesStatusReporter);

                double modifiedFilesWeight = StatusWeightHelper.GetModifyDiffFilesWeight(_diffSummary);
                _logger.LogTrace("modifiedFilesWeight = " + modifiedFilesWeight);
                _modifiedFilesStatusReporter = new OperationStatus
                {
                    Weight = { Value = modifiedFilesWeight }
                };
                status.RegisterOperation(_modifiedFilesStatusReporter);

                double removeFilesWeight = StatusWeightHelper.GetRemoveDiffFilesWeight(_diffSummary);
                _logger.LogTrace("removeFilesWeight = " + removeFilesWeight);
                _removeFilesStatusReporter = new OperationStatus
                {
                    Weight = { Value = removeFilesWeight }
                };
                status.RegisterOperation(_removeFilesStatusReporter);

                _logger.LogDebug("Diff installation prepared.");
            }
            catch (Exception e)
            {
                _logger.LogError("Failed to prepare diff installation.", e);
                throw;
            }
        }
Beispiel #4
0
        private bool TrySendRequest(ApiConnectionServer server, Request request, ServerType serverType,
                                    out IApiResponse response)
        {
            Logger.LogDebug(
                string.Format(
                    "Trying to get response from server ({0}): '{1}:{2}' (uses HTTPS: {3})...",
                    serverType,
                    server.Host,
                    server.RealPort,
                    server.UseHttps));

            response = null;

            List <Exception> exceptionsList;

            switch (serverType)
            {
            case ServerType.MainServer:
                exceptionsList = request.MainServerExceptions;
                break;

            case ServerType.CacheServer:
                exceptionsList = request.CacheServersExceptions;
                break;

            default:
                throw new ArgumentOutOfRangeException(serverType.ToString(), serverType, null);
            }

            try
            {
                var uri = new UriBuilder
                {
                    Scheme = server.UseHttps ? "https" : "http",
                    Host   = server.Host,
                    Path   = request.Path,
                    Query  = request.Query,
                    Port   = server.RealPort
                }.Uri;

                var httpResponse = MakeResponse(uri, request);

                Logger.LogDebug("Received response. Checking whether it is valid...");
                Logger.LogTrace(
                    string.Format(
                        "Response status code: {0}",
                        httpResponse.StatusCode));

                if (IsResponseValid(httpResponse, serverType))
                {
                    Logger.LogDebug("Response is valid.");
                    response = new ApiResponse(httpResponse);
                    return(true);
                }

                Logger.LogWarning("Response is not valid.");

                if (IsResponseUnexpectedError(httpResponse, serverType))
                {
                    throw new ApiResponseException((int)httpResponse.StatusCode);
                }

                throw new ApiServerConnectionException(
                          string.Format(
                              "Server \'{0}\' returned code {1}",
                              server.Host,
                              (int)httpResponse.StatusCode));
            }
            catch (WebException webException)
            {
                Logger.LogWarning("Error while connecting to the API server.", webException);
                exceptionsList.Add(webException);
                return(false);
            }
            catch (ApiServerConnectionException e)
            {
                Logger.LogWarning("Error while connecting to the API server.", e);
                exceptionsList.Add(e);
                return(false);
            }
        }