コード例 #1
0
ファイル: HtmlArea.cs プロジェクト: tfreitasleal/qxdotnet
 protected virtual void OnLoadingError()
 {
     if (LoadingError != null)
     {
         LoadingError.Invoke(this, System.EventArgs.Empty);
     }
 }
コード例 #2
0
 protected virtual void OnLoadingError(Exception e)
 {
     ResetState();
     _synchronizationContext.Send(state =>
     {
         LoadingError?.Invoke(this, new ErrorEventArgs(e));
     }, 0);
 }
コード例 #3
0
 bool Success(bool ok, LoadingError error)
 {
     if (!ok)
     {
         Error(errorCode.ToString(), error);
     }
     return(ok);
 }
コード例 #4
0
 void Error(string msg, LoadingError error)
 {
     this.mErrorCode   = error;
     this.errorContent = msg;
     if (error != LoadingError.RemoteURLConfigLoadFailedOrEmpty)
     {
         if (errorHandler != null)
         {
             errorHandler(msg, error);
         }
     }
 }
コード例 #5
0
    public IEnumerator DoUpdataWithOutCheckResource()
    {
        while (state != UpdateState.Sucess)
        {
            switch (state)
            {
            case UpdateState.None: {
                if (Application.internetReachability == NetworkReachability.NotReachable)
                {
                    mCheckNetReachedTimes++;
                    if (mCheckNetReachedTimes > 3000)
                    {
                        if (netWaring != null)
                        {
                            netWaring.Invoke();
                        }
                    }
                    yield return(null);
                }
                else
                {
                    SetState(UpdateState.WaitForNet);
                }
            }
            break;

            case UpdateState.WaitForNet: {
                if (Application.internetReachability != NetworkReachability.NotReachable)
                {
                    SetState(UpdateState.Sucess);
                }
                else
                {
                    yield return(null);
                }
            }
            break;
            }

            if (mErrorCode != LoadingError.Success)
            {
                Error(errorContent, errorCode);
                SetState(UpdateState.None);
                mErrorCode = LoadingError.Success;
                yield break;
            }
        }
    }
コード例 #6
0
 public override void OnLoadingError(ILevelInfo pLevel, string error)
 {
     LoadingError?.Invoke(new EventArgs <ILevelInfo, string>(pLevel, error));
 }
コード例 #7
0
        private async Task LoadFolderAsync(string id = null)
        {
            // Cancel any previous operation
            _cancellationTokenSource?.Cancel();
            _cancellationTokenSource = new CancellationTokenSource();

            // Check if session is set
            if (AuthenticationService == null)
            {
                throw new InvalidOperationException($"No {nameof(AuthenticationService)} has been specified");
            }

            // Keep a local copy of the token because the source can change while executing this function
            var token = _cancellationTokenSource.Token;

            // Add an option to the REST API in order to get thumbnails for each file
            // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_list_thumbnails
            var options = new[]
            {
                new QueryOption("$expand", "thumbnails"),
            };

            // Create the graph request builder for the drive
            IDriveRequestBuilder driveRequest = AuthenticationService.GraphClient.Me.Drive;

            // If folder id is null, the request refers to the root folder
            IDriveItemRequestBuilder driveItemsRequest;

            if (id == null)
            {
                driveItemsRequest = driveRequest.Root;
            }
            else
            {
                driveItemsRequest = driveRequest.Items[id];
            }

            // Raise the loading event
            FolderLoading?.Invoke(this, EventArgs.Empty);
            try
            {
                try
                {
                    // Make a API request loading 50 items per time
                    var page = await driveItemsRequest.Children.Request(options).Top(50).GetAsync(token);

                    token.ThrowIfCancellationRequested();

                    // Load each page
                    await LoadGridItemsAsync(page, token);

                    token.ThrowIfCancellationRequested();
                }
                finally
                {
                    // Raise the loaded event
                    FolderLoaded?.Invoke(this, EventArgs.Empty);
                }
            }
            catch (OperationCanceledException)
            { }
            catch (Exception ex)
            {
                // Raise the error event
                LoadingError?.Invoke(this, ex);
            }
        }
コード例 #8
0
    public IEnumerator DoUpdata()
    {
        while (state != UpdateState.Sucess)
        {
            switch (state)
            {
            case UpdateState.None: {
                if (Application.internetReachability == NetworkReachability.NotReachable)
                {
                    mCheckNetReachedTimes++;
                    if (mCheckNetReachedTimes > 3000)
                    {
                        if (netWaring != null)
                        {
                            netWaring.Invoke();
                        }
                    }
                    yield return(null);
                }
                else
                {
                    SetState(UpdateState.WaitForNet);
                }
            }
            break;

            case UpdateState.WaitForNet: {
                if (Application.internetReachability != NetworkReachability.NotReachable)
                {
                    SetState(UpdateState.GetLocalAddressConfig);
                }
                else
                {
                    yield return(null);
                }
            }
            break;

            case UpdateState.CheckWifi: {
                if (Application.internetReachability != NetworkReachability.ReachableViaLocalAreaNetwork)
                {
                    mCheckWifiReachedTimes++;
                    if (mCheckWifiReachedTimes > 3000)
                    {
                        if (wifiWaring != null)
                        {
                            wifiWaring.Invoke();
                        }
                        SetState(UpdateState.WaitForWifi);
                    }
                    yield return(null);
                }
                else
                {
                    SetState(UpdateState.WaitForWifi);
                }
            }
            break;

            case UpdateState.WaitForWifi: {
                if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork || allowDownloadWithoutWifi)
                {
                    SetState(UpdateState.DownloadIncrements);
                }
                else
                {
                    yield return(null);
                }
            }
            break;

            case UpdateState.GetLocalAddressConfig: {
                DoNowStep stepLoadResourceAddr = new DoNowStep();
                stepLoadResourceAddr.name      = "加载本地配置";
                stepLoadResourceAddr.onEnd     = TryGetAddressConfig;
                stepLoadResourceAddr.exit      = () => string.IsNullOrEmpty(mRemoteAddress);
                stepLoadResourceAddr.errorCode = LoadingError.ResourceLoginServerAddressConfigNotExist;
                yield return(DoNow(stepLoadResourceAddr));

                SetState(UpdateState.ReadRemoteConfig);
            }
            break;

            case UpdateState.ReadRemoteConfig: {
                LoadOneStep stepGetRemoteConfig = new LoadOneStep();
                stepGetRemoteConfig.name         = "获取服务器配置文件";
                stepGetRemoteConfig.getURL       = () => mRemoteAddress;
                stepGetRemoteConfig.loadDelegate = TryGetRemoteURLConfig;
                stepGetRemoteConfig.exit         = () => string.IsNullOrEmpty(mRemoteVersionFile);
                stepGetRemoteConfig.errorCode    = LoadingError.RemoteURLConfigLoadFailedOrEmpty;
                yield return(DoOneStep(stepGetRemoteConfig));

                if (mErrorCode == LoadingError.RemoteURLConfigLoadFailedOrEmpty)
                {
                    Debug.LogWarning("Error URL Config!" + mRemoteVersionFile);
                    SetState(UpdateState.ReadStreamingVersion);
                }
                else
                {
                    SetState(UpdateState.ReadRemoteVersion);
                }
            }
            break;

            case UpdateState.ReadRemoteVersion: {
                LoadOneStep stepLoadRemoteVersion = new LoadOneStep();
                stepLoadRemoteVersion.name         = "加载服务器版本信息";
                stepLoadRemoteVersion.getURL       = () => mRemoteVersionFile;
                stepLoadRemoteVersion.loadDelegate = TryGetVersionFromRemote;
                stepLoadRemoteVersion.exit         = () => mVersionRemote == null;
                stepLoadRemoteVersion.errorCode    = LoadingError.RemoteVersionLoadFailedOrEmpty;
                yield return(DoOneStep(stepLoadRemoteVersion));

                SetState(UpdateState.ReadRemoteIndex);
            }
            break;

            case UpdateState.ReadRemoteIndex: {
                LoadOneStep stepLoadRemoteIndex = new LoadOneStep();
                stepLoadRemoteIndex.name         = "加载远程索引信息";
                stepLoadRemoteIndex.loadDelegate = TryGetRemoteIndex;
                stepLoadRemoteIndex.exit         = () => false;
                stepLoadRemoteIndex.getURL       = () => mRemoteIndexFileURL;
                stepLoadRemoteIndex.errorCode    = LoadingError.RemoteIndexLoadFailedOrEmpty;
                yield return(DoOneStep(stepLoadRemoteIndex));

                SetState(UpdateState.ReadStreamingVersion);
            }
            break;

            case UpdateState.ReadStreamingVersion: {
                LoadOneStep stepLoadStreamingVersion = new LoadOneStep();
                stepLoadStreamingVersion.name         = "加载Streaming版本信息";
                stepLoadStreamingVersion.loadDelegate = TryGetVersionFromStreamingAsset;
                stepLoadStreamingVersion.exit         = () => false;
                //stepLoadStreamingVersion.getURL = () => getStreamingVersionFile;
                yield return(DoOneStep(stepLoadStreamingVersion));

                SetState(UpdateState.ReadStreaming);
            }
            break;

            case UpdateState.ReadStreaming: {
                LoadOneStep stepLoadStreamingIndex = new LoadOneStep();
                stepLoadStreamingIndex.name         = "加载Streaming索引信息";
                stepLoadStreamingIndex.loadDelegate = TryGetStreamingIndex;
                stepLoadStreamingIndex.exit         = () => false;
                stepLoadStreamingIndex.getURL       = () => getStreamingIndexFile;
                yield return(DoOneStep(stepLoadStreamingIndex));

                SetState(UpdateState.ReadSD);
            }
            break;

            case UpdateState.ReadSD: {
                DoNowStep stepLoadSDInfo = new DoNowStep();
                stepLoadSDInfo.name  = "加载SD版本信息";
                stepLoadSDInfo.onEnd = TryGetInfoFromSD;
                stepLoadSDInfo.exit  = () => false;
                yield return(DoNow(stepLoadSDInfo));

                if (mVersionRemote.ProgramHigherThan(mVersionStreaming))
                {
                    SetState(UpdateState.DownloadPackage);
                }
                else
                {
                    if (mVersionSD == null)
                    {
                        SetState(UpdateState.ExportToSD);
                    }
                    else if (mVersionRemote.HigherThan(mVersionSD))
                    {
                        SetState(UpdateState.DownloadIncrements);
                        //SetState(UpdateState.CheckWifi);
                    }
                    else if (mVersionStreaming.HigherThan(mVersionSD))
                    {
                        SetState(UpdateState.ExportToSD);
                    }
                    else
                    {
                        SetState(UpdateState.Sucess);
                    }
                }
            }
            break;

            case UpdateState.ExportToSD: {
                LoadBeatchStep stepExportToSD = new LoadBeatchStep();
                stepExportToSD.name         = "解压文件中,请不要关闭游戏,此过程不消耗流量";
                stepExportToSD.exit         = () => false;
                stepExportToSD.getURLs      = GetStreamABURLs;
                stepExportToSD.onEnd        = SaveStreamingInfoToSD;
                stepExportToSD.errorCode    = LoadingError.SDSaveVersionOrIndexFailed;
                stepExportToSD.loadDelegate = SaveFileToSD;
                yield return(LoadBeatch(stepExportToSD));

                SetState(UpdateState.ReadSD);
            }
            break;

            case UpdateState.DownloadIncrements: {
                LoadBeatchStep stepLoadIncrement = new LoadBeatchStep();
                stepLoadIncrement.name         = "更新中,请不要关闭游戏";
                stepLoadIncrement.exit         = () => false;
                stepLoadIncrement.getURLs      = GetIncrementABUrls;
                stepLoadIncrement.onEnd        = SaveRemoteInfoToSD;
                stepLoadIncrement.errorCode    = LoadingError.SDSaveVersionOrIndexFailed;
                stepLoadIncrement.loadDelegate = SaveFileToSD;
                yield return(LoadBeatch(stepLoadIncrement));

                SetState(UpdateState.Sucess);
            }
            break;

            case UpdateState.DownloadPackage: {
                mErrorCode = LoadingError.PackageError;
            }
            break;

            case UpdateState.Sucess:
                break;

            default:
                break;
            }

            if (mErrorCode != LoadingError.Success && mErrorCode != LoadingError.RemoteURLConfigLoadFailedOrEmpty)
            {
                Error(errorContent, errorCode);
                SetState(UpdateState.None);
                yield break;
            }
        }
    }