39 lines
1.2 KiB
Rust
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(())
|
|
}
|