private void Req_Login(LoginForm sourceForm, string loginRequest, Socket client) { //Log Console.WriteLine("req_login:Sending: " + loginRequest); // Send request to remote host Send(client, loginRequest); sendDone.WaitOne(10); //If send fails due to no connection, exit, error message will be shown by send operation if (!connectionOpen) { client.Shutdown(SocketShutdown.Both); client.Close(); return; } ; // Receive the response from the remote device. Receive(client); receiveDone.WaitOne(10); //If receive fails due to no connection, exit, error message will be shown by receive operation if (!connectionOpen) { client.Shutdown(SocketShutdown.Both); client.Close(); return; } ; // Wait for response for up to 3sec, set cursor to wait while we do so, disable button and input boxes while we do so sourceForm.btn_Login.Enabled = false; sourceForm.tb_PasswordInput.Enabled = false; sourceForm.tb_UsernameInput.Enabled = false; sourceForm.btn_Login.Text = "Wait..."; sourceForm.Cursor = Cursors.WaitCursor; DateTime ThreeSecsTime = DateTime.Now.AddSeconds(3); int waitTime = 0; while (response == "" && DateTime.Now < ThreeSecsTime) { Thread.Sleep(10); waitTime++; } ; waitTime = waitTime * 10; //Log with wait time Console.WriteLine("req_login:"******":Response: " + response); //Exit with error on non-response and re-enable buttons and text box and change cursor if (response == ("")) { sourceForm.errorMessage("The connection timed out, please try again."); sourceForm.btn_Login.Enabled = true; sourceForm.tb_PasswordInput.Enabled = true; sourceForm.tb_UsernameInput.Enabled = true; sourceForm.btn_Login.Text = "Login"; sourceForm.Cursor = Cursors.Default; return; } ; //Exit with error on failed login and re-enable buttons and text box and change cursor if (response.StartsWith("LOGIN_FAIL")) { sourceForm.errorMessage("Login failed, please check your username and password then try again."); sourceForm.btn_Login.Enabled = true; sourceForm.tb_PasswordInput.Enabled = true; sourceForm.tb_UsernameInput.Enabled = true; sourceForm.btn_Login.Text = "Login"; sourceForm.Cursor = Cursors.Default; return; } ; //Exit with error on unknown response and re-enable buttons and text box and change cursor if (!response.StartsWith("LOGIN_SUCCESS")) { sourceForm.errorMessage("Unknown response received, login failed."); sourceForm.btn_Login.Enabled = true; sourceForm.tb_PasswordInput.Enabled = true; sourceForm.tb_UsernameInput.Enabled = true; sourceForm.btn_Login.Text = "Login"; sourceForm.Cursor = Cursors.Default; return; } ; // Logged in successfully //Change button text sourceForm.btn_Login.Text = "Loading"; //Split response into array //Remove [ and ] from data response = response.TrimStart(new char[] { '[' }); response = response.TrimEnd(new char[] { ']' }); //Split data by : char string[] responseArray = response.Split(':'); //Extract communication GUID from response UInt32 communicationGUID = Convert.ToUInt32(responseArray[1]); //Extract database id from response UInt32 databaseID = Convert.ToUInt32(responseArray[2]); //Extract privilege level from response string privilegeLevel = responseArray[3]; //Extract personal info from response List <string> personalInfo = new List <string>(); personalInfo.Add(responseArray[4]); personalInfo.Add(responseArray[6]); personalInfo.Add(responseArray[7]); personalInfo.Add(responseArray[8]); personalInfo.Add(responseArray[9]); personalInfo.Add(responseArray[10]); personalInfo.Add(responseArray[11]); personalInfo.Add(responseArray[12]); personalInfo.Add(responseArray[13]); personalInfo.Add(responseArray[14]); personalInfo.Add(responseArray[15]); personalInfo.Add(responseArray[16]); personalInfo.Add(responseArray[17]); personalInfo.Add(responseArray[18]); //Decide what to do next based on privilage level switch (privilegeLevel.ToUpper()) { case "VENUEMANAGER": { Console.WriteLine("Setting up Venue Manager login..."); //Create venue manager object, with data included //Load venue manager interface break; } case "AGENT": { Console.WriteLine("Setting up Agent login..."); //Create agent object, with data included //Load customer interface for agent break; } case "CUSTOMER": { Console.WriteLine("Setting up Customer login..."); //Create customer object, with data included //Load customer interface break; } default: { //Unknown user type, show error sourceForm.errorMessage("Unknown response received, login failed."); break; } } }
private void HandleDataRequest(Form sourceForm, string dataRequest, Socket client) { SByte typeNum = 0; //Get Form Type if (sourceForm.GetType().Name == "Form") { typeNum = 0; } ; if (sourceForm.GetType().Name == "LoginForm") { typeNum = 1; } ; if (sourceForm.GetType().Name == "RegistrationForm") { typeNum = 2; } ; //Use form type switch (typeNum) { //Login Form case 1: { //Parse form as it's own data type LoginForm srcFrm = (LoginForm)sourceForm; //Login if (dataRequest.Contains("LOGIN")) { Req_Login(srcFrm, dataRequest, client); } ; //Exit Switch break; } //Registration Form case 2: { //Parse form as it's own data type RegistrationForm srcFrm = (RegistrationForm)sourceForm; //Register account if (dataRequest.Contains("ADD_USER")) { Req_Register(srcFrm, dataRequest, client); } ; //Exit Switch break; } default: { //Wait for response, set cursor to wait sourceForm.Cursor = Cursors.WaitCursor; Thread.Sleep(1000); sourceForm.Cursor = Cursors.Default; //Exit switch break; } } }