2023-05-07 17:11:17 +02:00

39 lines
1.2 KiB
Rust

use std::io;
use nats::{Connection, Handler};
use crate::chat_message::ChatMessage;
const SERVER: &str = "127.0.0.1";
const SUBJECT_MESSAGES: &str = "here.happens.messaging";
pub fn connect_to_nats() -> io::Result<Connection> {
nats::connect(SERVER)
}
pub fn subscribe_to_chat_messages(username: String, nc: &Connection) -> io::Result<Handler> {
// This runs the closure in a separate Thread
let subscription =
nc.subscribe(SUBJECT_MESSAGES)?
.with_handler(move |msg| -> Result<(), io::Error> {
match ChatMessage::try_from(msg.data) {
Ok(message) => {
// Do not show messages from me
if message.author != username {
println!("Received {}", message);
}
}
Err(e) => eprintln!("{}", e),
};
Ok(())
});
Ok(subscription)
}
pub fn publish_message(message: &ChatMessage, nc: &Connection) -> io::Result<()> {
let json_string_utf8 = serde_json::to_string(message).expect("Cannot serialize message");
// TODO: there is no error if server is offline
nc.publish(SUBJECT_MESSAGES, json_string_utf8)?;
Ok(())
}