예제 #1
0
        private void DownloadMeta(CancellationToken cancellationToken)
        {
            _logger.LogDebug("Downloading resource meta...");

            var downloader = _createNewHttpDownloader(_destinationMetaPath, _resource.GetMetaUrls());

            downloader.Download(cancellationToken);

            _logger.LogDebug("Resource meta downloaded.");
        }
    private void Initialize(PatcherData data)
    {
        _cache = new UnityCache(data.AppSecret);

        if (IsCachedBannerAvailable())
        {
            _logger.LogDebug(string.Format("A cached banner image is available at {0}", CachedBannerPath));
            LoadBannerImage(CachedBannerPath, OldImage);
        }

        var patcher = Patcher.Instance;

        patcher.AppInfo
        .SkipWhile(info => info.Id == default(int))
        .Select(info => new Data
        {
            BannerData = new PatcherBannerData
            {
                ImageUrl         = info.PatcherBannerImage,
                Dimensions       = info.PatcherBannerImageDimensions,
                ModificationDate = info.PatcherBannerImageUpdatedAt
            },
            BannerFilePath = Path.Combine(data.AppDataPath, BannerImageFilename)
        })
        .ObserveOnMainThread()
        .Subscribe(OnBannerDataUpdate);
        //TODO: Dispose subscription
    }
예제 #3
0
        private void EnforceCorrectScreenSize()
        {
            string screenSizeFilePath = Path.Combine(Application.dataPath, ScreenSizeFilename);

            _logger.LogDebug("Reading correct screen size from " + screenSizeFilePath);

            if (!File.Exists(screenSizeFilePath))
            {
                _logger.LogWarning(screenSizeFilePath + " file does not exist.");
                return;
            }

            var screenResolutionText = File.ReadAllText(screenSizeFilePath).Split(' ');

            try
            {
                int width  = int.Parse(screenResolutionText[0]);
                int height = int.Parse(screenResolutionText[1]);

                PlayerPrefs.SetInt("Screenmanager Resolution Width", width);
                PlayerPrefs.SetInt("Screenmanager Resolution Height", height);
                PlayerPrefs.SetInt("Screenmanager Is Fullscreen mode", 0);

                Screen.SetResolution(width, height, false);
            }
            catch (System.Exception e)
            {
                _logger.LogError("Failed to correct screen sizing due to an exception.", e);
            }
        }
예제 #4
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;
            }
        }
예제 #5
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;
            }
        }
예제 #6
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);
            }
        }