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