Client: WIP GUI

This commit is contained in:
Leon Grünewald 2024-06-02 12:40:29 +02:00
parent 88aacacb19
commit c14f3c4558
3 changed files with 32 additions and 12 deletions

5
src/client/events.rs Normal file
View file

@ -0,0 +1,5 @@
#[derive(Clone, Debug)]
pub enum ChatAppEvent {
ConnectButtonPress,
HostTextInputChanged(String)
}

View file

@ -1,10 +1,11 @@
mod websocket;
mod events;
use iced::widget::{column, Column, button, text_input, text};
use iced::{Application, Command, Element, Pixels, settings::Settings};
use iced_futures::Subscription;
use websocket::websocket;
use crate::websocket::AppWebsocketConfig;
use websocket::{websocket, AppWebsocketConfig};
use events::ChatAppEvent;
fn main() -> iced::Result {
let settings = Settings {
@ -25,12 +26,6 @@ struct ChatApp {
host: String
}
#[derive(Clone, Debug)]
enum ChatAppEvent {
ConnectButtonPress,
HostTextInputChanged(String)
}
impl ChatApp {
fn view_auth(&self) -> Element<<ChatApp as Application>::Message> {
column![

View file

@ -1,9 +1,15 @@
use futures_util::stream::{SplitSink, SplitStream};
use futures_util::StreamExt;
use iced::subscription::{Subscription, channel};
use tokio::net::TcpStream;
use tokio_tungstenite::{connect_async, MaybeTlsStream, WebSocketStream};
use crate::events::ChatAppEvent;
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug)]
pub enum AppWebsocketState {
Disconnected,
Connected
Error(String),
Connected(SplitSink<WebSocketStream<MaybeTlsStream<TcpStream>>, tokio_tungstenite::tungstenite::Message>, SplitStream<WebSocketStream<MaybeTlsStream<TcpStream>>>)
}
#[derive(Debug, Clone, PartialEq)]
@ -23,7 +29,7 @@ impl AppWebsocketConfig {
}
}
pub fn websocket(config: AppWebsocketConfig) -> Subscription<super::ChatAppEvent> {
pub fn websocket(config: AppWebsocketConfig) -> Subscription<ChatAppEvent> {
struct Websocket;
channel(
@ -33,7 +39,21 @@ pub fn websocket(config: AppWebsocketConfig) -> Subscription<super::ChatAppEvent
let mut state = AppWebsocketState::Disconnected;
loop {
match &state {
AppWebsocketState::Disconnected => {
match connect_async(&config.host).await {
Ok((conn, res)) => {
let (ws_recv, ws_send) = conn.split();
state = AppWebsocketState::Connected(ws_recv, ws_send);
},
Err(err) => {
state = AppWebsocketState::Error(err.to_string());
}
}
}
AppWebsocketState::Connected(ws_recv, ws_send) => {}
_ => {}
}
}
}
)