/// <summary> /// Try to register client. Send response about result. /// </summary> /// <param name="client">client.</param> /// <param name="message">client's message.</param> private void RegisterClient(MpClient client, RegisterRequestMessage message) { Message response; if (string.IsNullOrEmpty(message.Login) || string.IsNullOrEmpty(message.Password) || message.Login.Length > 20 || message.Password.Length > 30) { response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.Error }; } else { if (DBoperations.Register(message.Login, message.Password)) { log.Info($"Client registered: {message.Login}"); response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.Success }; } else { response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.Fail }; } } try { // response to client client.SendMessage(response); } catch (ConnectionInterruptedException e) { log.Error(e); } // close connection log.Info($"Client disconnected. ip {((IPEndPoint)client.tcpClient.Client.RemoteEndPoint).Address.ToString()}"); try { client.Close(); } catch (ConnectionInterruptedException e) { log.Error(e); } }
/// <summary> /// Try to login client. Send response about result. /// </summary> /// <param name="client">client.</param> /// <param name="message">client's message.</param> private void LoginClient(MpClient client, LoginRequestMessage message) { bool isLoggedIn = false; Message response; if (string.IsNullOrEmpty(message.Login) || string.IsNullOrEmpty(message.Password) || message.Login.Length > 20 || message.Password.Length > 30) { response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.Error }; } else if (usersHandler.GetOnlineUser(message.Login) != null) { response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.AlreadyLogin }; } else { int id; // client's id in db if (DBoperations.Login(message.Login, message.Password, out id)) { log.Info($"Client login: {message.Login}"); // user is online OnlineUser user = new OnlineUser(id, message.Login, client); usersHandler.AddUser(user); isLoggedIn = true; response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.Success }; } else { response = new LoginRegisterResponseMessage { Response = LoginRegisterResponse.Fail }; } } try { // response to client client.SendMessage(response); } catch (ConnectionInterruptedException e) { log.Error(e); } // close connection with client if client not logged in if (!isLoggedIn) { log.Info($"Client disconnected. ip {((IPEndPoint)client.tcpClient.Client.RemoteEndPoint).Address.ToString()}"); try { client.Close(); } catch (ConnectionInterruptedException e) { log.Error(e); } } }