From f541cc348f93a88deab5de23e08918e408318fa7 Mon Sep 17 00:00:00 2001 From: horhik Date: Mon, 12 Oct 2020 21:17:49 +0300 Subject: [PATCH] add simple frontend listener --- src/chat/chat_api_base.rs | 8 ++-- src/chat/front_conn.rs | 81 +++++++++++++++++++++++++++++++++++++++ src/chat/serv_conn.rs | 0 src/chat/types.rs | 0 4 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 src/chat/front_conn.rs create mode 100644 src/chat/serv_conn.rs create mode 100644 src/chat/types.rs diff --git a/src/chat/chat_api_base.rs b/src/chat/chat_api_base.rs index af475a3..0096b25 100644 --- a/src/chat/chat_api_base.rs +++ b/src/chat/chat_api_base.rs @@ -1,11 +1,11 @@ - pub struct Message { sender_id: i32, message: String, } -pub fn show_message () { +pub struct ClientServer {} +pub struct FrontendServer {} -} +pub fn show_message() {} -pub fn main () {} \ No newline at end of file +fn main() {} diff --git a/src/chat/front_conn.rs b/src/chat/front_conn.rs new file mode 100644 index 0000000..2a6bc76 --- /dev/null +++ b/src/chat/front_conn.rs @@ -0,0 +1,81 @@ +type Decoded = String; +type Encoded = String; + +trait Handler { + fn process(code: State) -> Message; + fn send(socket: &WebSocketStream, msg: Message); +} +struct MessageServer { + new_message: bool, + text: String, +} + +struct MessageClient { + message_queue: Vec, +} + +impl MessageServer { + fn new() -> MessageServer { + MessageServer { + new_message: false, + text: String::from(""), + } + } +} + +impl MessageClient { + fn new() -> MessageClient { + MessageClient { + message_queue: vec![], + } + } +} + +pub fn listen_client() -> io::Result<()> { + task::block_on(connect_to_client()) +} + +async fn connect_to_client() -> io::Result<()> { + let addr = env::args() + .nth(1) + .unwrap_or_else(|| "127.0.0.1:8080".to_string()); + + let listener = TcpListener::bind(&addr).await?; + + while let Ok((stream, _)) = listener.accept().await { + task::spawn(accept_client(stream)); + } + + Ok(()) +} + +async fn accept_client(stream: TcpStream) -> io::Result<()> { + let addr = stream + .peer_addr() + .expect("connected streams should have a peer address"); + println!("Peer address: {}", addr); + + let ws = accept_async(stream) + .await + .expect("err during the ws handshake"); + + println!("connected to: {}", addr); + + let (mut sender, mut receiver) = ws.split(); + let mut new_msg = receiver.next(); + loop { + match new_msg.await { + Some(msg) => { + println!("{:?}", msg.unwrap().into_text().unwrap()); + sender + .send(Message::Text("msg".to_owned())) + .await + .expect("ooops"); + new_msg = receiver.next(); + } + None => break, + } + } + + Ok(()) +} diff --git a/src/chat/serv_conn.rs b/src/chat/serv_conn.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/chat/types.rs b/src/chat/types.rs new file mode 100644 index 0000000..e69de29