1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
use crate::SystemUiEvent;
use std::{collections::HashMap, sync::{mpsc::Sender, Arc}};
#[derive(Clone)]
pub struct Logger {
system_name: String,
ui_sender : Sender<(String, SystemUiEvent)>,
name_lookup: Arc<HashMap<String, String>>,
}
impl Logger {
pub fn new(system_name: String, system_config: crate::config::System, ui_sender: Sender<(String, SystemUiEvent)>) -> Self {
Self {
system_name,
ui_sender,
name_lookup: Arc::new(system_config.members.iter().map(|member| (member.discord_token.clone(), member.name.clone())).collect::<HashMap<_,_>>()),
}
}
pub async fn log_connect(&self, member_token: String) {
let member_name = self.name_lookup.get(&member_token).expect("Member not found").clone();
let _ = self.ui_sender.send((self.system_name.clone(), SystemUiEvent::GatewayConnect(member_name)));
}
pub async fn log_disconnect(&self, member_token: String) {
let member_name = self.name_lookup.get(&member_token).expect("Member not found").clone();
let _ = self.ui_sender.send((self.system_name.clone(), SystemUiEvent::GatewayDisconnect(member_name)));
}
pub async fn log_err(&self, member_token: Option<String>, message: String) {
let member = member_token.map(|token| self.name_lookup.get(&token).cloned()).flatten();
let _ = self.ui_sender.send((
self.system_name.clone(),
SystemUiEvent::LogLine(if let Some(member_name) = member {
format!("{member_name}: Error: {message}")
} else {
format!("{message}")
})
));
}
pub async fn log_line(&self, member_token: Option<String>, message: String) {
let member = member_token.map(|token| self.name_lookup.get(&token).cloned()).flatten();
let _ = self.ui_sender.send((
self.system_name.clone(),
SystemUiEvent::LogLine(if let Some(member_name) = member {
format!("{member_name}: {message}")
} else {
format!("{message}")
})
));
}
}
|