private static void OnSteamLoginEnd(MyMasterServiceClient client, IAsyncResult result, Action loginSuccessAction) { try { string username, token; if (MyMwcFinalBuildConstants.STEAM_DEMO) { username = client.EndSteamDemoLogin(out token, result); } else { username = client.EndSteamLogin(out token, result); } var screen = new MyGuiScreenLoginProgress(username, token, () => { MyClientServer.LoggedPlayer.LoggedUsingSteam = true; MyClientServer.LoggedPlayer.SetDisplayName(new StringBuilder(MySteam.UserName)); loginSuccessAction(); }, null); screen.CloseScreenBeforeCallingHandler = true; screen.PasswordHash = token; MyGuiManager.AddScreen(screen); m_loginInProgress = false; } catch (FaultException<MySteamFault> e) { if (e.Detail.SteamFaultCode == SteamFaultCode.NotRegistered) { MyMasterServerAction registerAction = new MyMasterServerAction(MyTextsWrapperEnum.LoginInProgressPleaseWait); registerAction.SetPublicCredentials(); if (String.IsNullOrEmpty(MySteam.SerialKey)) { m_loginInProgress = false; OnSteamRegisterError(new InvalidOperationException("Cannot obtain CD key from Steam")); } else { registerAction.BeginAction = (c) => c.BeginSteamRegister(MySteam.UserId, MySteam.SessionTicket, MySteam.SerialKey, MySteam.UserName, null, c); registerAction.EndAction = (c, r) => c.EndSteamRegister(r); registerAction.ActionSuccess += () => OnSteamRegister(loginSuccessAction); registerAction.ActionFailed += OnSteamRegisterError; registerAction.ShowErrorMessage = false; registerAction.Start(); } } else if (e.Detail.SteamFaultCode == SteamFaultCode.NoMW1ProductsOwned) { m_loginInProgress = false; MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, MyTextsWrapperEnum.SteamNoProductsText, MyTextsWrapperEnum.SteamNoProductsCaption, MyTextsWrapperEnum.Ok, null)); } else if (e.Detail.SteamFaultCode == SteamFaultCode.InvalidTicket) { m_loginInProgress = false; MySteam.RefreshSessionTicket(); MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, MyTextsWrapperEnum.SteamInvalidTicketText, MyTextsWrapperEnum.SteamInvalidTicketCaption, MyTextsWrapperEnum.Ok, null)); } else { m_loginInProgress = false; throw; } } finally { m_loginInProgress = false; } }
private static bool HandleSteamLogin(Action loginSuccessAction) { if (MySteam.IsActive) { if (m_loginInProgress) { Debug.Fail("Login is already in progress!"); MyMwcLog.WriteLine("Login called twice, second call stack trace:"); MyMwcLog.WriteLine(Environment.StackTrace); // Just do nothing, another login is already in progress return true; } m_loginInProgress = true; MyMasterServerAction steamLogin = new MyMasterServerAction(MyTextsWrapperEnum.LoginInProgressPleaseWait); steamLogin.SetPublicCredentials(); if (MyMwcFinalBuildConstants.STEAM_DEMO) { steamLogin.BeginAction = (c) => c.BeginSteamDemoLogin(MySteam.UserId, MySteam.SessionTicket, null, c); } else { steamLogin.BeginAction = (c) => c.BeginSteamLogin(MySteam.UserId, MySteam.SessionTicket, null, c); } steamLogin.EndAction = (c, r) => OnSteamLoginEnd(c, r, loginSuccessAction); steamLogin.Start(); return true; } return false; }