91 lines
2.4 KiB
Rust
91 lines
2.4 KiB
Rust
use crate::db;
|
|
use crate::encrypting;
|
|
use async_std::{
|
|
io,
|
|
net::{TcpListener, TcpStream},
|
|
task,
|
|
};
|
|
use async_tungstenite::{accept_async, tungstenite::Message, WebSocketStream};
|
|
use futures::{SinkExt, StreamExt};
|
|
use serde_derive::Deserialize;
|
|
use std::env;
|
|
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?;
|
|
|
|
println!("Debugging!");
|
|
while let Ok((stream, _)) = listener.accept().await {
|
|
task::spawn(accept_client(stream));
|
|
}
|
|
println!("Debugging 2!");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
struct FrontMsg {
|
|
userID: u32,
|
|
receiverID: u32,
|
|
message: String,
|
|
time: String,
|
|
}
|
|
|
|
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) => {
|
|
let jsoned = msg.unwrap();
|
|
let res: serde_json::Result<FrontMsg> =
|
|
serde_json::from_str(jsoned.to_text().unwrap());
|
|
if let Ok(received_msg) = res {
|
|
let msg = received_msg.message;
|
|
|
|
/* message example
|
|
{
|
|
"userID": 123456789,
|
|
"receiverID": 123456789,
|
|
"message": "hey dude",
|
|
"time": "Tue Oct 13 2020 18:31:22 GMT+0300 (Eastern European Summer Time)",
|
|
|
|
}
|
|
*/
|
|
sender
|
|
.send(Message::Text(String::from("Sended").to_owned()))
|
|
.await
|
|
.expect("ooops");
|
|
} else {
|
|
println!("seems, that messsage formatted wrong");
|
|
println!("{:?}", res);
|
|
}
|
|
|
|
new_msg = receiver.next();
|
|
}
|
|
None => {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|