/// <summary>
        /// 选择确定取消弹窗
        /// </summary>
        /// <param name="message"></param>
        /// <param name="action"></param>
        /// <param name="e"></param>
        public async void ChooseTips(Action <bool, int> action, DialogClosingEventHandler e = null)
        {
            try
            {
                if (e == null)
                {
                    e = closingEventHandler;
                }
                var sampleMessageDialog = new ChooseDialog();
                await DialogHost.Show(sampleMessageDialog, "ReadDialog", e);

                action(sampleMessageDialog.isCancel, sampleMessageDialog.ChooseIndex);
            }
            catch (Exception ex)
            {
                Logger.Default.Error(ex.Message);
            }
        }
        private async Task CheckCrashAsync()
        {
            var after = GetReportFiles().Except(Before).ToList();

            if (after.Count != 0)
            {
                await Dispatcher.Invoke(async() =>
                {
                    var chooseDialog = new ChooseDialog("要上传崩溃报告喵?", "Origind Launcher 检测到了一个 Minecraft 崩溃报告.",
                                                        "上传");
                    await DialogHost.Show(chooseDialog, "RootDialog");
                    if (chooseDialog.Result)
                    {
                        MessageUploadManager.CrashReport(new UploadData(
                                                             $"游戏运行时异常: {File.ReadAllText(after.FirstOrDefault())}"));
                    }
                });
            }
        }
Esempio n. 3
0
        private async void Next(object sender, RoutedEventArgs e)
        {
            var username = Username.Text;

            if (string.IsNullOrWhiteSpace(username) || !new Regex(@"^[a-zA-Z0-9_]+$").Match(username).Success)
            {
                Snackbar.MessageQueue.Enqueue("用户名只能包含字母,数字,以及下划线.");
                return;
            }

            if (IsLogin)
            {
                var account = new Account(username, SHA512Computer.Compute(Password.Password), "注册");
                var status  = await Task.Run(() => account.Login());

                if (status != LoginStatus.Successful)
                {
                    Snackbar.MessageQueue.Enqueue("密码不正确或服务器错误.");
                    return;
                }
                Config.Instance.PlayerAccount = account;
                try
                {
                    await Task.Run(() => Config.Instance.DisableHardwareSpeedup = RenderInfoGetter.IsIntelVideoCard);
                }
                catch (Exception exception)
                {
                    Trace.WriteLine(exception);
                }
            }
            else
            {
                var status = await Task.Run(() => AccountManager.UserExists(username));

                if (status != LoginStatus.NotFound)
                {
                    Snackbar.MessageQueue.Enqueue("用户已存在或服务器错误.");
                    return;
                }

                if (username.Length < 3)
                {
                    Snackbar.MessageQueue.Enqueue("用户名太短啦!");
                    return;
                }

                if (Password.Password.Length < 5)
                {
                    Snackbar.MessageQueue.Enqueue("密码太短啦!");
                    return;
                }

                var account = new Account(username, SHA512Computer.Compute(Password.Password), "注册");
                var result  = await Task.Run(() => account.Register());

                if (result != RegisterStatus.Successful)
                {
                    Snackbar.MessageQueue.Enqueue("注册失败 请重试?");
                    return;
                }
                Config.Instance.PlayerAccount = account;
                try
                {
                    await Task.Run(() => Config.Instance.DisableHardwareSpeedup = RenderInfoGetter.IsIntelVideoCard);
                }
                catch (Exception exception)
                {
                    Trace.WriteLine(exception);
                }
            }
            if (!DirectoryHelper.IsCurrentDirectoryWritable)
            {
                await Dispatcher.Invoke(async() =>
                {
                    var chooseDialog = new ChooseDialog("要让这个文件夹有写入权限吗?", "Origind Launcher 可能没有文件夹的写入权限.", "添加写入权限");
                    await DialogHost.Show(chooseDialog, "SetupWindowDialogHost");
                    if (chooseDialog.Result)
                    {
                        DirectoryHelper.AddCurrentDirectoryWritePermission();
                    }
                });
            }

            Config.Save();
            Dispatcher.Invoke(() => Window.GetWindow(this).FlyoutAndClose(() =>
            {
                //if (Directory.Exists(ClientManager.GameStorageDirectory))
                //{
                //    ClientManager.CurrentInfo = ClientManager.MakeClientInfo();
                //    ClientManager.Save();
                //}

                Process.Start(Process.GetCurrentProcess().MainModule.FileName);
                Application.Current.Shutdown();
            }));
        }
Esempio n. 4
0
        private async void StartButton_OnClick(object sender, RoutedEventArgs e)
        {
            EnsureUpdatePathExists();
            //await UpdateUpdatePathAsync(); 其他服务器的兼容
            //foreach (Window currentWindow in Application.Current.Windows) 更好的方案
            //    currentWindow.Flyout();

            if (Config.Instance.PlayerAccount.Login() == LoginStatus.NotFound)
            {
                MainSnackbar.MessageQueue.Enqueue("登录失败.", "查看详情", () => Dispatcher.Invoke(async() =>
                {
                    var chooseDialog = new ChooseDialog("要重新注册吗?",
                                                        "很抱歉, 因为我们的技术删库跑路, 所有的玩家数据库都没了. 按下重新注册来用你当前的账号重新注册.", "重新注册");
                    await DialogHost.Show(chooseDialog, "RootDialog");
                    if (chooseDialog.Result)
                    {
                        Config.Instance.PlayerAccount.Register();
                    }
                }));
                return;
            }
            StartButton.IsEnabled = false;

            if (!Config.Instance.DisableUpdateCheck)
            {
                // 检测更新状态
                if (!CheckUpdate(out var updateStatus))
                {
                    OnLaunchError("更新检测失败");
                    return;
                }

                // 等待更新
                if (updateStatus)
                {
                    var result = await UpdateClientAsync();

                    if (!result)
                    {
                        OnLaunchError("更新失败.");
                        return;
                    }
                }
            }

            BeginCrashReportDetector();
            KMCCCBugFix();

            // 启动游戏
            var gameManager = new GameManager();
            var lpm         = new LaunchProgressManager();

            gameManager.OnGameExit += (handle, i) =>
            {
                async Task Callback()
                {
                    LoginManager.Stop();
                    this.Show();
                    lpm.Close();
                    await CheckCrashAsync();
                }

                Dispatcher.Invoke(Callback);
            };

            gameManager.OnGameLog += (lh, log) => lpm.OnGameLog(log);
            // 游戏状态
            var lh1 = gameManager.Run();

            if (!lh1.Success)
            {
                MessageUploadManager.CrashReport(
                    new UploadData($"游戏启动时异常: {lh1.ErrorMessage} {lh1.Exception?.SerializeException()}"));
                OnLaunchError($"游戏启动时异常: {lh1.ErrorMessage}");
                return;
            }

            if (Config.Instance.LaunchProgress)
            {
                lpm.Begin(lh1.Handle);
            }
            LoginManager.Start();

            // 退出
            StartButton.IsEnabled = true;
            Hide();
        }