package Screens { import flash.display.Sprite; import flash.events.*; import Services.ClientService; import Services.DebugService; import Services.UserService; public class LoginScreen extends Sprite { private var widget : w_login = new w_login(); private var available : Boolean = false; //indicates if the username entered in the create user dialog is available private var logging_in : Boolean = false; //ensures that only one login attempt is tried at a time //Services private var client : ClientService = SystemController.getInstance().clientService; private var debug : DebugService = SystemController.getInstance().debugService; private var user : UserService = SystemController.getInstance().userService; // Bootstrap public function LoginScreen() { addEventListener(Event.ADDED_TO_STAGE, init); addChild(widget); // Set tab index properties widget.user_existing.username.tabIndex = 0; widget.user_existing.password.tabIndex = 1; widget.user_existing.submit.tabIndex = 2; widget.user_create.username.tabIndex = 3; widget.user_create.password.tabIndex = 4; widget.user_create.confirm.tabIndex = 5; widget.user_create.submit.tabIndex = 6; // Set up event listeners on the 'login' and 'create user' buttons widget.user_existing.submit.addEventListener(MouseEvent.CLICK, login); widget.user_existing.addEventListener(KeyboardEvent.KEY_DOWN, checkEnterExisting); widget.user_create.addEventListener(KeyboardEvent.KEY_DOWN, checkEnterNew); widget.user_create.submit.addEventListener(MouseEvent.CLICK, createUser); widget.user_create.username.addEventListener(Event.CHANGE, checkAvailability); } // Run when user first sees the screen private function init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); widget.x = stage.stageWidth / 2; widget.y = stage.stageHeight / 2; // Start cursor in username text box for existing users stage.focus = widget.user_existing.username; log("Initiated"); } // Login Existing User private function login(e:MouseEvent = null):void { log("Submit clicked for existing user"); var username:String; var password:String; username = widget.user_existing.username.text; password = widget.user_existing.password.text; if (!logging_in) client.socketSend("LOGIN:" + username + "|" + password); logging_in = true; } // Listen for "Enter" to be pressed private function checkEnterExisting(e:KeyboardEvent):void { if (e.keyCode == 13) login(); } // Run when the ClientService receives indication that something failed public function loginFailed(msg:String):void { widget.status.text = "Login Failed - " + msg; logging_in = false; } // Listen for "Enter" to be pressed private function checkEnterNew(e:KeyboardEvent):void { if (e.keyCode == 13) createUser(); } // Run when the user clicks a button wanting to create a new user and log in with it private function createUser(e:MouseEvent = null):void { log("Submit clicked for new user"); var username:String; var password:String; var confirm:String; username = widget.user_create.username.text; password = widget.user_create.password.text; confirm = widget.user_create.confirm.text; if (available && confirm == password) { // Log in user if (!logging_in) client.socketSend("CREATEUSER:" + username + "|" + password); logging_in = true; } else { // Error cases when password doesn't match confirmation or username is unavailable widget.status_newuser.text = "Error creating new user - Username is not available or your password and confirmation do not match."; } } // Listen for "Enter" to be pressed private function checkEnterCreate(e:KeyboardEvent):void { if (e.keyCode == 13) createUser(); } // Run when the ClientService receives indication that something failed public function createUserFailed(msg:String):void { widget.status_newuser.text = "Unable to create new user"; logging_in = false; } // Run when the user changes a "username" text field with the intent of creating a new user with that name private function checkAvailability(e:Event):void { available = false; var username:String; username = widget.user_create.username.text; username = widget.user_create.username.text; log("Check availability of '" + username + "'"); client.socketSend("CHECKUSER:" + username); } // ClientService reports that username is available public function userAvailable(username:String):void { available = true; } public function terminate(args:String):void { widget.user_existing.submit.removeEventListener(MouseEvent.CLICK, login); widget.user_existing.removeEventListener(KeyboardEvent.KEY_DOWN, checkEnterExisting); widget.user_create.submit.removeEventListener(MouseEvent.CLICK, createUser); widget.user_create.username.removeEventListener(Event.CHANGE, checkAvailability); user.setup(args); SystemController.getInstance().animateChangeScreen(this, ScreenIndex.MAIN); } private function log(msg:String):void { debug.log("LoginScreen | " + msg); } } }