keep track of names on the server

This commit is contained in:
Andy Killorin 2024-12-07 21:20:29 -05:00
parent d034bbd989
commit 46527362d7
Signed by: ank
GPG key ID: B6241CA3B552BCA4

View file

@ -86,7 +86,7 @@ async fn main() -> Result<()>{
fish: fish.clone(), fish: fish.clone(),
last_badge: last_badge.clone(), last_badge: last_badge.clone(),
net_status: network_status.clone(), net_status: network_status.clone(),
badge_map badge_map : badge_map.clone(),
}); });
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap(); let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
@ -99,6 +99,14 @@ async fn main() -> Result<()>{
loop { loop {
match get_recent_badge(fish_.clone()).await { match get_recent_badge(fish_.clone()).await {
Result::Ok(badge) => { Result::Ok(badge) => {
let name = Name::from_badge(badge);
let name = match name {
Name::Unknown => {
badge_map.read().await.get(&badge).unwrap_or(&"Unknown".to_string()).clone()
},
name => format!("{name:?}"),
};
info!("badge scanned: {name} ({badge:#0x})");
*last_badge.write().await = (badge, Instant::now()); *last_badge.write().await = (badge, Instant::now());
}, },
Err(e) => { Err(e) => {
@ -184,7 +192,6 @@ async fn get_recent_badge(fish: Arc<Semaphore>) -> Result<u64> {
let badge = conn.read_u64().await?; let badge = conn.read_u64().await?;
if badge != 0 { if badge != 0 {
info!("new badge: {badge:#0x}");
Ok(badge) Ok(badge)
} else { } else {
Err(anyhow::anyhow!("no badge present")) Err(anyhow::anyhow!("no badge present"))
@ -336,6 +343,8 @@ async fn set_last(
let (last_badge, _) = *state.last_badge.read().await; let (last_badge, _) = *state.last_badge.read().await;
state.badge_map.write().await.insert(last_badge, input.name.clone());
let name_e = match input.name.as_str() { let name_e = match input.name.as_str() {
"Tess" => Name::Tess, "Tess" => Name::Tess,
"Amaia" => Name::Amaia, "Amaia" => Name::Amaia,
@ -345,11 +354,7 @@ async fn set_last(
"Thia" => Name::Thia, "Thia" => Name::Thia,
"Michael" => Name::Michael, "Michael" => Name::Michael,
"Zoey" => Name::Zoey, "Zoey" => Name::Zoey,
name => { _ => Name::Unknown,
state.badge_map.write().await.insert(last_badge, name.to_string());
Name::Unknown
},
}; };
info!("setting {} ({name_e:?}) to {last_badge:#0x}", input.name); info!("setting {} ({name_e:?}) to {last_badge:#0x}", input.name);