//============================================================================== // Created on: 01/02/2004 // Login panel for Match Setup // // Written by Ron Prestenback // © 2003, Epic Games, Inc. All Rights Reserved //============================================================================== class MatchSetupLoginPanel extends MatchSetupPanelBase config(LoginCache); var() config bool bAutoLogin, bKeepHistory; var() config array LoginHistory; var() editconst noexport string CurrentIP, CurrentPort; var automated GUILabel l_Title, l_Status; var automated moEditBox ed_LoginName; var automated moEditBox ed_LoginPassword; var automated GUIButton b_Submit, b_Cancel; var() localized string NoUsernameSpecified, NoPasswordSpecified, InvalidLoginText, WaitingForLoginText, LoggedText, ButtonLoginText, ButtonLogoutText, PleaseWaitText; function InitComponent( GUIController C, GUIComponent O ) { local PlayerController PC; local string str; local int i; Super.InitComponent(C, O); PC = PlayerOwner(); ed_LoginPassword.MyEditBox.bConvertSpaces = True; str = PC.GetServerNetworkAddress(); if ( str != "" ) { if ( !Divide(str, ":", CurrentIP, CurrentPort) ) { CurrentIP = str; CurrentPort = "7777"; } } i = FindCredentials(CurrentIP, CurrentPort); if ( i != -1 ) { ed_Loginname.SetText(LoginHistory[i].Username); ed_LoginPassword.SetText(LoginHistory[i].Password); if ( LoginHistory[i].bAutoLogin ) InternalOnClick(b_Submit); } else if ( PC.PlayerReplicationInfo != None ) ed_LoginName.SetText(PC.PlayerReplicationInfo.PlayerName); } function Opened(GUIComponent Sender) { Super.Opened(Sender); UpdateSubmitButton(); } function bool InternalOnClick(GUIComponent Sender) { local string uname, upass; if ( VRI == None ) return true; if ( Sender == b_Submit ) { if ( b_Submit.Caption == ButtonLoginText ) { uname = ed_LoginName.GetText(); upass = ed_LoginPassword.GetText(); if ( uname == "" ) { SetFocus(ed_LoginName); UpdateStatus(NoUsernameSpecified); return true; } if ( upass == "" ) { SetFocus(ed_LoginPassword); UpdateStatus(NoPasswordSpecified); return true; } SendLogin(uname,upass); } else if ( b_Submit.Caption == ButtonLogoutText ) { SendLogout(); } return true; } if ( Sender == b_Cancel ) { Controller.CloseMenu(false); return true; } return true; } function bool UserNameKeyEvent( out byte Key, out byte State, float Delta ) { if ( State == 3 && (Key == 0x0D || Key == 0x28) ) // enter or down { ed_LoginPassword.SetFocus(none); return true; } return false; } function bool PasswordKeyEvent( out byte Key, out byte State, float Delta ) { if ( State == 3 ) { if ( Key == 0x0D ) // enter return InternalOnClick(b_Submit); else if ( Key == 0x26 ) // up { ed_LoginName.SetFocus(none); return true; } } return false; } protected function UpdateStatus(string NewStatusMsg ) { l_Status.Caption = NewStatusMsg; UpdateSubmitButton(); } protected function int FindCredentials( coerce string IP, coerce string Port ) { local int i; for ( i = 0; i < LoginHistory.Length; i++ ) if ( LoginHistory[i].IP == IP && LoginHistory[i].Port == Port ) return i; return -1; } protected function SaveCredentials() { local AutoLoginInfo NewInfo; local int i; if ( !bKeepHistory ) return; NewInfo.UserName = ed_LoginName.GetText(); NewInfo.Password = ed_LoginPassword.GetText(); if ( NewInfo.Password == "" ) return; NewInfo.IP = CurrentIP; NewInfo.Port = CurrentPort; i = FindCredentials(NewInfo.IP, NewInfo.Port); if ( i == -1 ) i = LoginHistory.Length; LoginHistory[i] = NewInfo; SaveConfig(); } function UpdateSubmitButton() { switch( l_Status.Caption ) { case WaitingForLoginText: b_Submit.Caption = ButtonLogoutText; DisableComponent(b_Submit); break; case LoggedText: b_Submit.Caption = ButtonLogoutText; EnableComponent(b_Submit); break; case LoggedText @ PleaseWaitText: b_Submit.Caption = ButtonLogoutText; DisableComponent(b_Submit); break; default: EnableComponent(b_Submit); b_Submit.Caption = ButtonLoginText; break; } } function SendLogin( string UserName, string Password ) { DisableComponent(ed_LoginName); DisableComponent(ed_LoginPassword); EnableComponent(b_Cancel); UpdateStatus(WaitingForLoginText); VRI.MatchSetupLogin(UserName, Password); } function SendLogout(); function LoggedIn() { Super.LoggedIn(); DisableComponent(b_Cancel); UpdateStatus(LoggedText @ PleaseWaitText); SaveCredentials(); VRI.RequestMatchSettings(True,True); } function LoggedOut() { Super.LoggedOut(); EnableComponent(b_Submit); EnableComponent(ed_LoginName); EnableComponent(ed_LoginPassword); UpdateStatus(""); } function LoginFailed() { EnableComponent(b_Submit); EnableComponent(ed_LoginName); EnableComponent(ed_LoginPassword); DisableComponent(b_Cancel); UpdateStatus(InvalidLoginText); SetFocus(ed_LoginPassword); } function ReceiveComplete() { Super.ReceiveComplete(); UpdateStatus(LoggedText); } defaultproperties { PanelCaption="Login" OnLogIn=LoggedIn OnLogout=LoggedOut WaitingForLoginText="Please wait while your login credentials are verified..." NoUsernameSpecified="In order to login to match setup, you must supply a username." NoPasswordSpecified="In order to login to match setup, you must supply a password." InvalidLoginText="Login attempt failed - invalid username or password." LoggedText="Successfully logged into match setup!" PleaseWaitText="Complete data transfer will take a few seconds..." ButtonLoginText="Login" ButtonLogoutText="Logout" Begin Object class=GUILabel Name=TitleLabel WinWidth=0.521077 WinHeight=0.152803 WinLeft=0.244935 WinTop=0.012808 Caption="Match Setup Login" TextAlign=TXTA_Center RenderWeight=1 StyleName="TextLabel" FontScale=FNS_Large bBoundToParent=True bScaleToParent=True End Object // l_Title=TitleLabel Begin Object class=GUILabel Name=StatusLabel TextAlign=TXTA_Center bMultiLine=True VertAlign=TXTA_Center FontScale=FNS_Large StyleName="TextLabel" WinTop=0.571450 WinLeft=0.167765 WinWidth=0.670595 WinHeight=0.413253 RenderWeight=1.000000 bBoundToParent=True bScaleToParent=True End Object l_Status=StatusLabel Begin Object class=moEditBox Name=UserIDEditBox WinWidth=0.659385 WinHeight=0.081981 WinLeft=0.174240 WinTop=0.209260 Caption="UserID" TabOrder=1 CaptionWidth=0.1 OnKeyEvent=UserNameKeyEvent bBoundToParent=True bScaleToParent=True End Object ed_LoginName=UserIDEditBox Begin Object class=moEditBox Name=PasswordEditBox WinWidth=0.659385 WinHeight=0.081981 WinLeft=0.174240 WinTop=0.326729 Caption="Password" TabOrder=2 CaptionWidth=0.1 OnKeyEvent=PasswordKeyEvent bBoundToParent=True bScaleToParent=True bMaskText=True End Object ed_LoginPassword=PasswordEditBox Begin Object class=GUIButton Name=LoginButton Caption="Login" WinWidth=0.137685 WinHeight=0.070180 WinLeft=0.680482 WinTop=0.477284 OnClick=InternalOnClick TabOrder=3 RenderWeight=1.0 bBoundToParent=True bScaleToParent=True End Object b_Submit=LoginButton Begin Object class=GUIButton Name=CancelButton Caption="Cancel" WinWidth=0.139293 WinHeight=0.076611 WinLeft=0.513741 WinTop=0.474198 OnClick=InternalOnClick TabOrder=4 RenderWeight=1.0 bBoundToParent=True bScaleToParent=True End Object b_Cancel=CancelButton WinTop=0.248697 WinHeight=0.352864 WinWidth=1.0 WinLeft=0.0 bKeepHistory=True }