Outgoing and Incoming Messages
This commit is contained in:
parent
cf55f3ea7e
commit
f5cc02b78b
1 changed files with 38 additions and 3 deletions
41
src/main.rs
41
src/main.rs
|
|
@ -11,6 +11,7 @@ use cli::Cli;
|
|||
use ratatui::{
|
||||
crossterm::event::{self, KeyCode},
|
||||
layout::{Constraint, Direction, Layout},
|
||||
style::{Color, Style},
|
||||
text::{Line, Span},
|
||||
widgets::{Block, Borders, Paragraph, Widget},
|
||||
};
|
||||
|
|
@ -22,6 +23,15 @@ fn make_textarea<'a>() -> TextArea<'a> {
|
|||
ta
|
||||
}
|
||||
|
||||
enum MessageType {
|
||||
Outgoing,
|
||||
Incoming,
|
||||
}
|
||||
struct Message {
|
||||
content: String,
|
||||
message_type: MessageType,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Cli::parse();
|
||||
|
||||
|
|
@ -37,25 +47,42 @@ fn main() {
|
|||
};
|
||||
|
||||
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 mut reader = BufReader::new(stream.try_clone().unwrap());
|
||||
let tx_read_msg = tx_read_msg.clone();
|
||||
std::thread::spawn(move || {
|
||||
loop {
|
||||
let mut r = String::new();
|
||||
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 tx_read_msg = tx_read_msg.clone();
|
||||
std::thread::spawn(move || {
|
||||
loop {
|
||||
let input = rx_send_msg.recv().unwrap();
|
||||
|
||||
let msg_content = format!("{}\n", input);
|
||||
|
||||
stream.write_all(input.as_bytes()).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(
|
||||
messages
|
||||
.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<_>>(),
|
||||
),
|
||||
top,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue