private void LoginThreadOnLoginFinishEvent(LoginInfo loginInfo) { if (loginInfo.Suc) { GridConfig.SaveConfig(); var username = loginInfo.UN; try { var javaPath = GridConfig.txtJavaPath.Text; var javaXmx = GridConfig.txtJavaXmx.Text; var selectVer = GridGame.listVer.SelectedItem.ToString(); var extArg = GridConfig.txtExtJArg.Text; BmclCore.Game = new Launcher.Launcher(javaPath, javaXmx, username, selectVer, BmclCore.GameInfo, extArg, loginInfo); BmclCore.Game.StateChangeEvent += Game_StateChangeEvent; BmclCore.Game.Gameexit += launcher_gameexit; BmclCore.Game.GameStartUp += Game_GameStartUp; } catch (Exception ex) { _starter.Topmost = false; _starter.Close(); MessageBox.Show("启动失败:" + ex.Message); Logger.log(ex); return; } } else { _starter.Topmost = false; MessageBox.Show("登录失败:" + loginInfo.Errinfo); Logger.log("登录失败" + loginInfo.Errinfo, Logger.LogType.Error); BmclCore.GameRunning = false; } if (BmclCore.Game == null) { _starter.Topmost = false; Logger.log("启动器初始化失败,放弃启动", Logger.LogType.Crash); BmclCore.GameRunning = false; } else { BmclCore.Game.Start(); this.Hide(); } }
private async void btnStart_Click(object sender, RoutedEventArgs e) { //TODO 分离launcher方法 if (GridConfig.txtUserName.Text == "!!!") { MessageBox.Show(this, "请先修改用户名"); TabMain.SelectedIndex = 1; GridConfig.txtUserName.Focus(); return; } GridConfig.SaveConfig(); var somethingBad = false; try { var selectedVersion = GridGame.GetSelectedVersion(); Logger.Info($"正在启动{selectedVersion},使用的登陆方式为{GridConfig.listAuth.SelectedItem}"); _frmPrs = new FrmPrs(LangManager.GetLangFromResource(selectedVersion)); _frmPrs.Show(); _frmPrs.ChangeStatus(LangManager.GetLangFromResource("LauncherAuth")); var launcher = await BmclCore.GameManager.LaunchGame(selectedVersion, false); if (launcher == null) { _frmPrs.Close(); _frmPrs = null; return; } launcher.OnGameLaunch += Launcher_OnGameLaunch; launcher.OnGameStart += Game_GameStartUp; launcher.OnGameExit += launcher_gameexit; await launcher.Start(); } catch (NoSelectGameException exception) { Logger.Fatal(exception); somethingBad = true; MessageBox.Show(this, exception.Message, Title, MessageBoxButton.OK, MessageBoxImage.Error); } catch (NoJavaException exception) { Logger.Fatal(exception); somethingBad = true; MessageBox.Show(this, exception.Message, Title, MessageBoxButton.OK, MessageBoxImage.Error); } catch (AnotherGameRunningException exception) { Logger.Fatal(exception); somethingBad = true; MessageBox.Show(this, exception.Message, Title, MessageBoxButton.OK, MessageBoxImage.Error); } catch (DownloadLibException exception) { Logger.Fatal(exception); somethingBad = true; MessageBox.Show(this, exception.Message, Title, MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (somethingBad) { _frmPrs?.Close(); _frmPrs = null; } } }