Outgoing and Incoming Messages

This commit is contained in:
Mona Mayrhofer 2025-04-13 13:48:02 +02:00
parent cf55f3ea7e
commit f5cc02b78b
No known key found for this signature in database
GPG key ID: 5C83114FA383C6A0

View file

@ -11,6 +11,7 @@ use cli::Cli;
use ratatui::{ use ratatui::{
crossterm::event::{self, KeyCode}, crossterm::event::{self, KeyCode},
layout::{Constraint, Direction, Layout}, layout::{Constraint, Direction, Layout},
style::{Color, Style},
text::{Line, Span}, text::{Line, Span},
widgets::{Block, Borders, Paragraph, Widget}, widgets::{Block, Borders, Paragraph, Widget},
}; };
@ -22,6 +23,15 @@ fn make_textarea<'a>() -> TextArea<'a> {
ta ta
} }
enum MessageType {
Outgoing,
Incoming,
}
struct Message {
content: String,
message_type: MessageType,
}
fn main() { fn main() {
let args = Cli::parse(); let args = Cli::parse();
@ -37,25 +47,42 @@ fn main() {
}; };
let (tx_send_msg, rx_send_msg) = std::sync::mpsc::channel::<String>(); let (tx_send_msg, rx_send_msg) = std::sync::mpsc::channel::<String>();
let (tx_read_msg, rx_read_msg) = std::sync::mpsc::channel::<String>(); let (tx_read_msg, rx_read_msg) = std::sync::mpsc::channel::<Message>();
let listener_thread = { let listener_thread = {
let mut reader = BufReader::new(stream.try_clone().unwrap()); let mut reader = BufReader::new(stream.try_clone().unwrap());
let tx_read_msg = tx_read_msg.clone();
std::thread::spawn(move || { std::thread::spawn(move || {
loop { loop {
let mut r = String::new(); let mut r = String::new();
reader.read_line(&mut r).unwrap(); reader.read_line(&mut r).unwrap();
tx_read_msg.send(r).unwrap(); tx_read_msg
.send(Message {
content: r,
message_type: MessageType::Incoming,
})
.unwrap();
} }
}) })
}; };
let writer_thread = { let writer_thread = {
let tx_read_msg = tx_read_msg.clone();
std::thread::spawn(move || { std::thread::spawn(move || {
loop { loop {
let input = rx_send_msg.recv().unwrap(); let input = rx_send_msg.recv().unwrap();
let msg_content = format!("{}\n", input);
stream.write_all(input.as_bytes()).unwrap(); stream.write_all(input.as_bytes()).unwrap();
stream.write_all(b"\n").unwrap(); stream.write_all(b"\n").unwrap();
tx_read_msg
.send(Message {
content: msg_content,
message_type: MessageType::Outgoing,
})
.unwrap();
} }
}) })
}; };
@ -88,7 +115,15 @@ fn main() {
Paragraph::new( Paragraph::new(
messages messages
.iter() .iter()
.map(|it| Line::from(it.clone())) .map(|it| match it.message_type {
MessageType::Outgoing => {
Line::from(format!("> {}", it.content))
.style(Style::default().fg(Color::DarkGray))
}
MessageType::Incoming => {
Line::from(it.content.clone()).style(Style::default())
}
})
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
), ),
top, top,