enums for leaderboard type
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
||||
{"deadvey":58,"anon":15,"error":0}
|
||||
{"anon":15,"deadvey":58,"error":0}
|
||||
Binary file not shown.
+16
-11
@@ -24,10 +24,16 @@ struct Entry
|
||||
score: u32,
|
||||
person: String,
|
||||
}
|
||||
enum Leaderboard
|
||||
{
|
||||
Hiscores,
|
||||
Loscores,
|
||||
Pingscores,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct AppState {
|
||||
tx: mpsc::Sender<(Entry,u8)>,
|
||||
tx: mpsc::Sender<(Entry,Leaderboard)>,
|
||||
hiscores: Arc<Mutex<Vec<Entry>>>,
|
||||
loscores: Arc<Mutex<Vec<Entry>>>,
|
||||
pingscores: Arc<Mutex<HashMap<String,u64>>>,
|
||||
@@ -47,7 +53,7 @@ async fn main() {
|
||||
let loscore_clone1 = Arc::clone(&loscores);
|
||||
let pingscore_clone1 = Arc::clone(&pingscores);
|
||||
|
||||
let (tx, rx) = mpsc::channel::<(Entry,u8)>();
|
||||
let (tx, rx) = mpsc::channel::<(Entry,Leaderboard)>();
|
||||
|
||||
tokio::spawn(
|
||||
async move {
|
||||
@@ -94,7 +100,7 @@ async fn leaderboard() -> Html<&'static str> {
|
||||
Html(include_str!("../leaderboard.html"))
|
||||
}
|
||||
// receiver: 0 for hiscore, 1 for loscore, 2 for pingscore
|
||||
fn handle_hiscores(rx: mpsc::Receiver<(Entry, u8)>, hiscores_arc: Arc<Mutex<Vec<Entry>>>, loscores_arc: Arc<Mutex<Vec<Entry>>>,pingscores_arc: Arc<Mutex<HashMap<String,u64>>>,)
|
||||
fn handle_hiscores(rx: mpsc::Receiver<(Entry, Leaderboard)>, hiscores_arc: Arc<Mutex<Vec<Entry>>>, loscores_arc: Arc<Mutex<Vec<Entry>>>,pingscores_arc: Arc<Mutex<HashMap<String,u64>>>,)
|
||||
{
|
||||
// Panic galore
|
||||
let mut hiscores = hiscores_arc.lock().unwrap();
|
||||
@@ -109,7 +115,7 @@ fn handle_hiscores(rx: mpsc::Receiver<(Entry, u8)>, hiscores_arc: Arc<Mutex<Vec<
|
||||
{
|
||||
match rx.recv()
|
||||
{
|
||||
Ok((new_entry,0)) =>
|
||||
Ok((new_entry,Leaderboard::Hiscores)) =>
|
||||
{
|
||||
let mut hiscores = hiscores_arc.lock().unwrap();
|
||||
if new_entry.score > hiscores[19].score {
|
||||
@@ -125,7 +131,7 @@ fn handle_hiscores(rx: mpsc::Receiver<(Entry, u8)>, hiscores_arc: Arc<Mutex<Vec<
|
||||
file.flush().unwrap();
|
||||
}
|
||||
},
|
||||
Ok((new_entry,1)) =>
|
||||
Ok((new_entry,Leaderboard::Loscores)) =>
|
||||
{
|
||||
let mut loscores = loscores_arc.lock().unwrap();
|
||||
if new_entry.score > loscores[19].score {
|
||||
@@ -141,14 +147,13 @@ fn handle_hiscores(rx: mpsc::Receiver<(Entry, u8)>, hiscores_arc: Arc<Mutex<Vec<
|
||||
file.flush().unwrap();
|
||||
}
|
||||
},
|
||||
Ok((new_entry,2)) =>
|
||||
Ok((new_entry,Leaderboard::Pingscores)) =>
|
||||
{
|
||||
let name = new_entry.person;
|
||||
let mut pingscores = pingscores_arc.lock().unwrap();
|
||||
*pingscores.entry(name).or_insert(0) += 1;
|
||||
drop(pingscores);
|
||||
}
|
||||
Ok((_,_)) => println!("Invalid number"),
|
||||
Err(error) => println!("{error}"),
|
||||
}
|
||||
}
|
||||
@@ -172,7 +177,7 @@ async fn ws_handler(
|
||||
async fn handle_socket
|
||||
(
|
||||
mut socket: WebSocket,
|
||||
tx: mpsc::Sender<(Entry,u8)>,
|
||||
tx: mpsc::Sender<(Entry,Leaderboard)>,
|
||||
hiscores_arc: Arc<Mutex<Vec<Entry>>>,
|
||||
loscores_arc: Arc<Mutex<Vec<Entry>>>,
|
||||
pingscores_arc: Arc<Mutex<HashMap<String, u64>>>,
|
||||
@@ -202,12 +207,12 @@ async fn handle_socket
|
||||
match msg {
|
||||
Ok(Message::Text(_)) => {
|
||||
if random_bool(CHANCE) {
|
||||
let _ = tx.send((Entry{ person: name.clone(), score: value },0)); //hiscores
|
||||
let _ = tx.send((Entry{ person: name.clone(), score: 0 },2)); //hiscores
|
||||
let _ = tx.send((Entry{ person: name.clone(), score: value },Leaderboard::Hiscores)); //hiscores
|
||||
let _ = tx.send((Entry{ person: name.clone(), score: 0 },Leaderboard::Pingscores)); //pingscores
|
||||
if value == 0
|
||||
{
|
||||
resets += 1;
|
||||
let _ = tx.send((Entry{ person: name.clone(), score: resets },1));//loscores
|
||||
let _ = tx.send((Entry{ person: name.clone(), score: resets },Leaderboard::Loscores));//loscores
|
||||
}
|
||||
else { resets = 0 };
|
||||
value = 0
|
||||
|
||||
Reference in New Issue
Block a user