style: format
This commit is contained in:
+25
-24
@@ -15,7 +15,7 @@ use axum::{
|
|||||||
response::{Html, IntoResponse},
|
response::{Html, IntoResponse},
|
||||||
routing::get,
|
routing::get,
|
||||||
};
|
};
|
||||||
use futures::{StreamExt as _};
|
use futures::StreamExt as _;
|
||||||
use rand::random_bool;
|
use rand::random_bool;
|
||||||
use serde::{Deserialize, Serialize, de};
|
use serde::{Deserialize, Serialize, de};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
@@ -74,20 +74,23 @@ async fn main() {
|
|||||||
|
|
||||||
{
|
{
|
||||||
let pingscores = pingscores.clone();
|
let pingscores = pingscores.clone();
|
||||||
tokio::spawn(
|
tokio::spawn(async move {
|
||||||
async move {
|
loop
|
||||||
loop // write pingscores every 30s
|
// write pingscores every 30s
|
||||||
{
|
{
|
||||||
sleep(Duration::from_millis(30000)).await;
|
sleep(Duration::from_millis(30000)).await;
|
||||||
let pingscores = pingscores.lock().unwrap();
|
let pingscores = pingscores.lock().unwrap();
|
||||||
let file_contents: String = serde_json::to_string(&pingscores.clone()).unwrap();
|
let file_contents: String = serde_json::to_string(&pingscores.clone()).unwrap();
|
||||||
drop(pingscores);
|
drop(pingscores);
|
||||||
let mut file = fs::OpenOptions::new().write(true).truncate(true).open(PATH_PINGSCORES).unwrap();
|
let mut file = fs::OpenOptions::new()
|
||||||
|
.write(true)
|
||||||
|
.truncate(true)
|
||||||
|
.open(PATH_PINGSCORES)
|
||||||
|
.unwrap();
|
||||||
file.write_all(file_contents.as_bytes()).unwrap();
|
file.write_all(file_contents.as_bytes()).unwrap();
|
||||||
file.flush().unwrap();
|
file.flush().unwrap();
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
@@ -101,9 +104,7 @@ async fn main() {
|
|||||||
pingscores: Arc::clone(&pingscores),
|
pingscores: Arc::clone(&pingscores),
|
||||||
});
|
});
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:8084")
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:8084").await.unwrap();
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
println!("http://0.0.0.0:8084");
|
println!("http://0.0.0.0:8084");
|
||||||
|
|
||||||
@@ -158,7 +159,11 @@ fn handle_hiscores(
|
|||||||
hiscores_lock.reverse();
|
hiscores_lock.reverse();
|
||||||
let file_contents: String = serde_json::to_string(&hiscores_lock.clone()).unwrap();
|
let file_contents: String = serde_json::to_string(&hiscores_lock.clone()).unwrap();
|
||||||
drop(hiscores_lock);
|
drop(hiscores_lock);
|
||||||
let mut file = fs::OpenOptions::new().write(true).truncate(true).open(PATH_HISCORES).unwrap();
|
let mut file = fs::OpenOptions::new()
|
||||||
|
.write(true)
|
||||||
|
.truncate(true)
|
||||||
|
.open(PATH_HISCORES)
|
||||||
|
.unwrap();
|
||||||
file.write_all(file_contents.as_bytes()).unwrap();
|
file.write_all(file_contents.as_bytes()).unwrap();
|
||||||
drop(file);
|
drop(file);
|
||||||
|
|
||||||
@@ -201,10 +206,7 @@ fn handle_hiscores(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn ws_handler(
|
async fn ws_handler(ws: WebSocketUpgrade, State(state): State<AppState>) -> impl IntoResponse {
|
||||||
ws: WebSocketUpgrade,
|
|
||||||
State(state): State<AppState>,
|
|
||||||
) -> impl IntoResponse {
|
|
||||||
ws.on_upgrade(|socket| async move {
|
ws.on_upgrade(|socket| async move {
|
||||||
handle_socket(
|
handle_socket(
|
||||||
socket,
|
socket,
|
||||||
@@ -230,7 +232,8 @@ async fn handle_socket(
|
|||||||
let hiscores = hiscores.lock().unwrap();
|
let hiscores = hiscores.lock().unwrap();
|
||||||
let loscores = loscores.lock().unwrap();
|
let loscores = loscores.lock().unwrap();
|
||||||
let pingscores = pingscores.lock().unwrap();
|
let pingscores = pingscores.lock().unwrap();
|
||||||
json!({ "hiscores": &*hiscores, "loscores": &*loscores, "pingscores": &*pingscores}).to_string()
|
json!({ "hiscores": &*hiscores, "loscores": &*loscores, "pingscores": &*pingscores})
|
||||||
|
.to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
let name: Arc<str> = match socket.next().await.unwrap().unwrap() {
|
let name: Arc<str> = match socket.next().await.unwrap().unwrap() {
|
||||||
@@ -248,14 +251,13 @@ async fn handle_socket(
|
|||||||
let mut resets: u32 = 0;
|
let mut resets: u32 = 0;
|
||||||
let mut prev: u32 = 0;
|
let mut prev: u32 = 0;
|
||||||
|
|
||||||
let _ = socket
|
let _ = socket.send(Message::Text(msg.into())).await;
|
||||||
.send(Message::Text(msg.into()))
|
|
||||||
.await;
|
|
||||||
|
|
||||||
while let Some(msg) = socket.next().await {
|
while let Some(msg) = socket.next().await {
|
||||||
match msg {
|
match msg {
|
||||||
Ok(Message::Text(_)) => {
|
Ok(Message::Text(_)) => {
|
||||||
if random_bool(CHANCE) { // reset
|
if random_bool(CHANCE) {
|
||||||
|
// reset
|
||||||
let _ = tx.send(LeaderboardUpdate {
|
let _ = tx.send(LeaderboardUpdate {
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
update: LeaderboardUpdateType::Reset {
|
update: LeaderboardUpdateType::Reset {
|
||||||
@@ -264,15 +266,14 @@ async fn handle_socket(
|
|||||||
});
|
});
|
||||||
resets += 1;
|
resets += 1;
|
||||||
value = 0
|
value = 0
|
||||||
} // 1/3 chance of failing
|
}
|
||||||
|
// 1/3 chance of failing
|
||||||
else {
|
else {
|
||||||
value += 1;
|
value += 1;
|
||||||
if prev == 0 {
|
if prev == 0 {
|
||||||
let _ = tx.send(LeaderboardUpdate {
|
let _ = tx.send(LeaderboardUpdate {
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
update: LeaderboardUpdateType::Increment {
|
update: LeaderboardUpdateType::Increment { loscore: resets },
|
||||||
loscore: resets,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
resets = 0;
|
resets = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user