From 9033f4ee833928da4589d933d3b3f041b78f1799 Mon Sep 17 00:00:00 2001 From: Jonni Liljamo Date: Mon, 6 Mar 2023 12:00:12 +0200 Subject: [PATCH] wip(client, server): handle auth and connecting --- client/src/plugins/menu/ui/connect/ui.rs | 155 ++++++++++-------- .../src/plugins/networking/systems/events.rs | 36 +++- server/src/systems/event/mod.rs | 2 + 3 files changed, 123 insertions(+), 70 deletions(-) diff --git a/client/src/plugins/menu/ui/connect/ui.rs b/client/src/plugins/menu/ui/connect/ui.rs index 8061784..3869cce 100644 --- a/client/src/plugins/menu/ui/connect/ui.rs +++ b/client/src/plugins/menu/ui/connect/ui.rs @@ -6,10 +6,18 @@ * See LICENSE for licensing information. */ -use bevy::ecs::{system::ResMut, system::Resource}; +use bevy::ecs::{ + system::Resource, + system::{Res, ResMut}, +}; use bevy_inspector_egui::bevy_egui::{egui, EguiContext}; +use laurelin_shared::server::messages::Auth; +use naia_bevy_client::Client; -use crate::util::egui::{menuwindow, password}; +use crate::{ + cfg::CfgDev, + util::egui::{menuwindow, password}, +}; #[derive(Default, Resource)] pub struct ConnectScreenData { @@ -22,7 +30,7 @@ pub struct ConnectScreenData { pub error: String, } -#[derive(Default)] +#[derive(Default, PartialEq)] pub enum ConnectState { #[default] Login, @@ -31,84 +39,97 @@ pub enum ConnectState { Registering, } -pub fn ui(mut egui_context: ResMut, mut data: ResMut) { +pub fn ui( + mut egui_context: ResMut, + mut data: ResMut, + mut client: Client, + cfg_dev: Res, +) { menuwindow( egui_context.ctx_mut(), "Connect", &egui::Vec2::new(400., 600.), - |ui| { - match data.state { - ConnectState::Login => { - ui.horizontal(|ui| { - ui.label("Email:"); - ui.text_edit_singleline(&mut data.email) - }); - ui.horizontal(|ui| { - ui.label("Password:"); - ui.add(password(&mut data.password)); - }); + |ui| match data.state { + ConnectState::Login => { + ui.horizontal(|ui| { + ui.label("Email:"); + ui.text_edit_singleline(&mut data.email) + }); + ui.horizontal(|ui| { + ui.label("Password:"); + ui.add(password(&mut data.password)); + }); + + if !data.error.is_empty() { + ui.label(egui::RichText::new(&data.error).color(egui::Color32::RED)); + } - if !data.error.is_empty() { - ui.label(egui::RichText::new(&data.error).color(egui::Color32::RED)); + ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { + if ui.button("Login").clicked() { + data.error.clear(); + data.state = ConnectState::LoggingIn; + + client.auth(Auth::new(None, &data.email, &data.password)); + client.connect(&cfg_dev.server_address) } + }); + ui.vertical_centered(|ui| { + ui.label("I don't have an account:"); + if ui.link("Register").clicked() { + *data = ConnectScreenData::default(); + data.state = ConnectState::Register; + } + }); + } + ConnectState::Register => { + ui.horizontal(|ui| { + ui.label("Username:"); + ui.text_edit_singleline(&mut data.username) + }); + ui.horizontal(|ui| { + ui.label("Email:"); + ui.text_edit_singleline(&mut data.email) + }); + ui.horizontal(|ui| { + ui.label("Password:"); + ui.add(password(&mut data.password)); + }); + ui.horizontal(|ui| { + ui.label("Confirm password:"); + ui.add(password(&mut data.password_confirm)); + }); + + if !data.error.is_empty() { + ui.label(egui::RichText::new(&data.error).color(egui::Color32::RED)); + } + + ui.add_enabled_ui(data.password == data.password_confirm, |ui| { ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { - if ui.button("Login").clicked() { + if ui.button("Register").clicked() { data.error.clear(); - // yoink - } - }); + data.state = ConnectState::Registering; - ui.vertical_centered(|ui| { - ui.label("I don't have an account:"); - if ui.link("Register").clicked() { - *data = ConnectScreenData::default(); - data.state = ConnectState::Register; + client.auth(Auth::new( + Some(data.username.clone()), + &data.email, + &data.password, + )); + client.connect(&cfg_dev.server_address) } }); - } - ConnectState::Register => { - ui.horizontal(|ui| { - ui.label("Username:"); - ui.text_edit_singleline(&mut data.username) - }); - ui.horizontal(|ui| { - ui.label("Email:"); - ui.text_edit_singleline(&mut data.email) - }); - ui.horizontal(|ui| { - ui.label("Password:"); - ui.add(password(&mut data.password)); - }); - ui.horizontal(|ui| { - ui.label("Confirm password:"); - ui.add(password(&mut data.password_confirm)); - }); + }); - if !data.error.is_empty() { - ui.label(egui::RichText::new(&data.error).color(egui::Color32::RED)); + ui.vertical_centered(|ui| { + ui.label("I have an account:"); + if ui.link("Login").clicked() { + *data = ConnectScreenData::default(); + data.state = ConnectState::Login; } - - ui.add_enabled_ui(data.password == data.password_confirm, |ui| { - ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { - if ui.button("Register").clicked() { - data.error.clear(); - // yoink - } - }); - }); - - ui.vertical_centered(|ui| { - ui.label("I have an account:"); - if ui.link("Login").clicked() { - *data = ConnectScreenData::default(); - data.state = ConnectState::Login; - } - }); - } - _ => { - ui.spinner(); - } + }); + } + _ => { + ui.spinner(); } }, ); diff --git a/client/src/plugins/networking/systems/events.rs b/client/src/plugins/networking/systems/events.rs index 02c723e..da16e0e 100644 --- a/client/src/plugins/networking/systems/events.rs +++ b/client/src/plugins/networking/systems/events.rs @@ -6,8 +6,38 @@ * See LICENSE for licensing information. */ -pub fn connect_events() {} +use bevy::prelude::*; +use naia_bevy_client::{ + events::{ConnectEvent, DisconnectEvent, RejectEvent}, + Client, +}; -pub fn reject_events() {} +use crate::plugins::menu::ui::connect::{ConnectScreenData, ConnectState}; -pub fn disconnect_events() {} +pub fn connect_events(mut ev: EventReader, client: Client) { + for _ in ev.iter() { + info!("?"); + if let Ok(server_address) = client.server_address() { + info!("Laurelin client connected to: '{}'", server_address); + } + } +} + +pub fn reject_events(mut ev: EventReader, mut data: ResMut) { + for _ in ev.iter() { + warn!("Laurelin client rejected from connecting to server!"); + + data.error = "rejected from connecting".to_string(); + data.state = if data.state == ConnectState::LoggingIn { + ConnectState::Login + } else { + ConnectState::Register + } + } +} + +pub fn disconnect_events(mut ev: EventReader) { + for _ in ev.iter() { + info!("Laurelin client disconnected from server."); + } +} diff --git a/server/src/systems/event/mod.rs b/server/src/systems/event/mod.rs index 7d9a452..0b826cc 100644 --- a/server/src/systems/event/mod.rs +++ b/server/src/systems/event/mod.rs @@ -17,9 +17,11 @@ pub(crate) fn auth_events(mut ev: EventReader, mut server: Server) { match auth.username { Some(username) => { // register + server.reject_connection(&user_key); } None => { // login + server.reject_connection(&user_key); } } } -- 2.44.1