mirror of
https://github.com/szymon-jozef/checkers.git
synced 2026-10-27 19:20:44 +01:00
feat: add sending text messages
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
use std::io;
|
||||||
|
|
||||||
use checkers::network::client::Client;
|
use checkers::network::client::Client;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@@ -5,7 +7,20 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
let mut client: Client = Client::new().await;
|
let mut client: Client = Client::new().await;
|
||||||
client.update().await;
|
client.update();
|
||||||
|
|
||||||
|
println!("=== Write to stding to send text messages ===");
|
||||||
|
println!("Write /close to leave");
|
||||||
|
let mut buffer = String::new();
|
||||||
|
loop {
|
||||||
|
io::stdin().read_line(&mut buffer)?;
|
||||||
|
if buffer == "/close\n" {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
client.send_text_message(buffer.clone()).await;
|
||||||
|
buffer.clear();
|
||||||
|
}
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,16 +5,20 @@ use tokio::sync::mpsc::{self, Receiver, Sender};
|
|||||||
|
|
||||||
use crate::network::{
|
use crate::network::{
|
||||||
connection::{Connection, ConnectionType},
|
connection::{Connection, ConnectionType},
|
||||||
message::{ClientMessage, Message, ServerMessage},
|
message::{
|
||||||
|
ClientMessage::{self, TextMessage},
|
||||||
|
Message, ServerMessage,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct ClientSettings {
|
pub struct ClientSettings {
|
||||||
server_url: SocketAddr,
|
server_url: SocketAddr,
|
||||||
name: String,
|
name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Client {
|
pub struct Client {
|
||||||
conn_reciever_incoming: Receiver<(SocketAddr, Message<ServerMessage>)>,
|
conn_reciever_incoming: Option<Receiver<(SocketAddr, Message<ServerMessage>)>>,
|
||||||
conn_sender_outgoing: Sender<Message<ClientMessage>>,
|
conn_sender_outgoing: Sender<Message<ClientMessage>>,
|
||||||
settings: ClientSettings,
|
settings: ClientSettings,
|
||||||
}
|
}
|
||||||
@@ -41,15 +45,25 @@ impl Client {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Client {
|
Client {
|
||||||
conn_reciever_incoming: conn_reciever,
|
conn_reciever_incoming: Some(conn_reciever),
|
||||||
conn_sender_outgoing,
|
conn_sender_outgoing,
|
||||||
settings,
|
settings,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update(&mut self) {
|
pub fn update(&mut self) {
|
||||||
|
let Some(mut conn_reciever_incoming) = self.conn_reciever_incoming.take() else {
|
||||||
|
error!("Tried updating, but there's no conn_reciever of incoming messages!");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
let sender = self.conn_sender_outgoing.clone();
|
||||||
|
|
||||||
|
let settings = self.settings.clone();
|
||||||
|
|
||||||
|
tokio::spawn(async move {
|
||||||
loop {
|
loop {
|
||||||
if let Some(oldest_msg) = self.conn_reciever_incoming.recv().await {
|
if let Some(oldest_msg) = conn_reciever_incoming.recv().await {
|
||||||
let (addr, msg) = oldest_msg;
|
let (addr, msg) = oldest_msg;
|
||||||
info!("Got message from: {:?}", addr);
|
info!("Got message from: {:?}", addr);
|
||||||
|
|
||||||
@@ -57,10 +71,10 @@ impl Client {
|
|||||||
ServerMessage::RequestHandshake => {
|
ServerMessage::RequestHandshake => {
|
||||||
info!("Server requested handshake!");
|
info!("Server requested handshake!");
|
||||||
let msg = Message::new(ClientMessage::AnswerHandshake {
|
let msg = Message::new(ClientMessage::AnswerHandshake {
|
||||||
player_name: self.settings.name.clone(),
|
player_name: settings.name.clone(),
|
||||||
});
|
});
|
||||||
|
|
||||||
self.send_message(msg).await;
|
let _ = sender.send(msg.unwrap()).await;
|
||||||
}
|
}
|
||||||
ServerMessage::AcceptHandshake { player_id } => todo!(),
|
ServerMessage::AcceptHandshake { player_id } => todo!(),
|
||||||
ServerMessage::DeclineHandshake { reason } => todo!(),
|
ServerMessage::DeclineHandshake { reason } => todo!(),
|
||||||
@@ -72,6 +86,12 @@ impl Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn send_text_message(&mut self, content: String) {
|
||||||
|
let msg = Message::new(TextMessage(content));
|
||||||
|
self.send_message(msg).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_message(&mut self, msg: Result<Message<ClientMessage>, postcard::Error>) {
|
async fn send_message(&mut self, msg: Result<Message<ClientMessage>, postcard::Error>) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
use serde::{Deserialize, Serialize, de::DeserializeOwned};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::logic::{
|
use crate::logic::{
|
||||||
@@ -53,6 +53,8 @@ pub enum ClientMessage {
|
|||||||
|
|
||||||
RequestCapture { capture_path: CapturePath },
|
RequestCapture { capture_path: CapturePath },
|
||||||
RequestMove { from: Position, to: Position },
|
RequestMove { from: Position, to: Position },
|
||||||
|
|
||||||
|
TextMessage(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Message<T>
|
pub struct Message<T>
|
||||||
|
|||||||
@@ -120,11 +120,11 @@ impl Server {
|
|||||||
|
|
||||||
msg_opt = self.reciever.recv() => {
|
msg_opt = self.reciever.recv() => {
|
||||||
if let Some(oldest_message) = msg_opt {
|
if let Some(oldest_message) = msg_opt {
|
||||||
let (_addr, msg) = oldest_message;
|
let (addr, msg) = oldest_message;
|
||||||
|
|
||||||
match msg.content {
|
match msg.content {
|
||||||
ClientMessage::AnswerHandshake { player_name: _ } => {
|
ClientMessage::AnswerHandshake { player_name } => {
|
||||||
self.process_handshake();
|
self.process_handshake(addr, player_name);
|
||||||
}
|
}
|
||||||
ClientMessage::RequestCapture { capture_path: _ } => {
|
ClientMessage::RequestCapture { capture_path: _ } => {
|
||||||
self.process_capture();
|
self.process_capture();
|
||||||
@@ -132,6 +132,9 @@ impl Server {
|
|||||||
ClientMessage::RequestMove { from: _, to: _ } => {
|
ClientMessage::RequestMove { from: _, to: _ } => {
|
||||||
self.process_move();
|
self.process_move();
|
||||||
}
|
}
|
||||||
|
ClientMessage::TextMessage (content) => {
|
||||||
|
info!("{} sent us a message: {}", addr, content);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
warn!("Couldn't get latest message!");
|
warn!("Couldn't get latest message!");
|
||||||
@@ -144,8 +147,9 @@ impl Server {
|
|||||||
|
|
||||||
/* ======= Processing messages :D helper functions ======== */
|
/* ======= Processing messages :D helper functions ======== */
|
||||||
|
|
||||||
fn process_handshake(&self) {
|
fn process_handshake(&self, addr: SocketAddr, player_name: String) {
|
||||||
todo!();
|
info!("Client: {:?} sent us his name: {}", addr, player_name);
|
||||||
|
// TODO! Do something with this name i guess
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_capture(&self) {
|
fn process_capture(&self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user