44 lines
No EOL
1.5 KiB
Rust
44 lines
No EOL
1.5 KiB
Rust
use telnet::Telnet;
|
|
use crate::{commands, wrappers};
|
|
use crate::models::{Client, Event, EventType};
|
|
use crate::response::Response;
|
|
|
|
pub fn register_events(connection: &mut Telnet, events: Vec<EventType>) -> Result<(), String> {
|
|
for event in events {
|
|
if commands::clientnotifyregister(connection, 1, event).is_err() {
|
|
return Err(String::from("Failed to register event listener."));
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
pub fn handle_event_response(connection: &mut Telnet, response: Response, known_clients: &mut Vec<Client>) {
|
|
if let Response::Event(event_type, params) = response {
|
|
|
|
let event = Event::new(connection, event_type, params, known_clients);
|
|
match serde_json::to_string(&event) {
|
|
Ok(json) => println!("{}", json),
|
|
Err(err) => {
|
|
// TODO: Handle serialization error
|
|
eprintln!("Serialization error: {}", err);
|
|
}
|
|
}
|
|
|
|
if let Ok(new_clients) = wrappers::get_clients(connection) {
|
|
*known_clients = new_clients;
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn loop_response_reader(connection: &mut Telnet) {
|
|
let mut known_clients = wrappers::get_clients(connection).unwrap_or_else(|_| Vec::new());
|
|
loop {
|
|
match commands::read_response(connection, true, String::new()) {
|
|
Ok(response) => handle_event_response(connection, response, &mut known_clients),
|
|
Err(_) => {
|
|
// print error?
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
} |