private void AsyncAutorization(Alarmus.AutorizationMessage msg) { AsyncClient.SetToNullServerResponse(); AsyncClient.SendMessage(msg); /* Серебрянная пуля. * Поток будет ждать, пока данные полностью дойдут * Если избегать этого, то, недождавшись ответа от сервера, сработает ветка SR_NULL * И это происходит достаточно часто. */ Thread.Sleep(500); if (AsyncClient.GetServerResponse() == Alarmus.ServerResponse.SR_AUTORIZATION_SUCCESS) { /* * Вызываем диспетчер, который будет вызывать методы связанные с UI в thread safe режиме */ Dispatcher.Invoke(new System.Action(() => setButtonEnable(true))); Dispatcher.Invoke(new System.Action(() => changeView())); return; } else if (AsyncClient.GetServerResponse() == Alarmus.ServerResponse.SR_AUTORIZATION_FAILED) { MessageBox.Show("Невозможно авторизироваться. Проверьте логин и пароль"); } else if (AsyncClient.GetServerResponse() == Alarmus.ServerResponse.SR_NULL) { MessageBox.Show("Невозможно авторизироваться. Попробуйте позже"); Alarmus.Log.Warning("Этого не должно было произойти..."); } Dispatcher.Invoke(new System.Action(() => setButtonEnable(true))); }
private void Button_Click(object sender, RoutedEventArgs e) { loginBtn.IsEnabled = false; Alarmus.AutorizationMessage msg = new Alarmus.AutorizationMessage(Alarmus.ClientType.CLIENT_USER, loginBox.Text, passwordBox.Password); AsyncClient.Connect(addressBox.Text, 8888); //TODO: Заменить адрес из текст бокса на параметр clientThread = new Thread(() => AsyncAutorization(msg)); clientThread.Start(); }
/// <summary> /// /// </summary> /// <param name="passwordHash"></param> /// <returns></returns> public static bool HasPassword(Alarmus.AutorizationMessage msg) { connection.Open(); string passwordCommand = "SELECT * FROM Users WHERE login = '******' AND password = '******'"; SQLiteCommand command = new SQLiteCommand(passwordCommand, connection); SQLiteDataReader reader = command.ExecuteReader(); if (reader.HasRows) { connection.Close(); return(true); } connection.Close(); return(false); }