Match relay in the save/login service: WebSocket rooms, seats, ready, 100 ms turn confirmation and checksum relay
This commit is contained in:
1 parent
42034b062b
commit
848ab0f677
6 files changed
+956
-6
No files matched your search
@@ -39,6 +39,9 @@ use std::{
|
||||
};
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
mod netplay;
|
||||
use netplay::Netplay;
|
||||
|
||||
const MAX_SAVE: usize = 1024 * 1024;
|
||||
const MAX_TOTAL: u64 = 500 * 1024 * 1024;
|
||||
const WRITES_PER_MINUTE: usize = 30;
|
||||
@@ -59,6 +62,7 @@ struct AppState {
|
||||
sessions: Arc<Mutex<HashMap<String, String>>>, // token -> user name
|
||||
writes: Arc<Mutex<Vec<u64>>>,
|
||||
logins: Arc<Mutex<Vec<u64>>>,
|
||||
netplay: Arc<Mutex<Netplay>>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone)]
|
||||
@@ -193,6 +197,13 @@ impl AppState {
|
||||
self.store_sessions().await;
|
||||
token
|
||||
}
|
||||
|
||||
// the user behind a WebSocket query token (login is optional in a match lobby)
|
||||
pub async fn user_by_token(&self, token: &str) -> Option<String> {
|
||||
let token = token.trim();
|
||||
let name = self.sessions.lock().await.get(token).cloned()?;
|
||||
self.users.lock().await.iter().find(|u| u.name == name).map(|u| u.name.clone())
|
||||
}
|
||||
}
|
||||
|
||||
async fn total_size(dir: &PathBuf) -> u64 {
|
||||
@@ -506,6 +517,7 @@ async fn main() {
|
||||
sessions: Arc::new(Mutex::new(sessions)),
|
||||
writes: Arc::new(Mutex::new(Vec::new())),
|
||||
logins: Arc::new(Mutex::new(Vec::new())),
|
||||
netplay: Arc::new(Mutex::new(Netplay::new())),
|
||||
};
|
||||
let app = Router::new()
|
||||
.route("/api/health", get(health))
|
||||
@@ -516,6 +528,7 @@ async fn main() {
|
||||
.route("/api/password", post(change_password))
|
||||
.route("/api/users", get(list_users).post(create_user))
|
||||
.route("/api/users/{name}", delete(delete_user))
|
||||
.route("/api/netplay/ws", get(netplay::netplay_ws))
|
||||
.route("/api/saves", get(list).post(create))
|
||||
.route("/api/saves/{id}", get(get_save).put(overwrite).delete(delete_save))
|
||||
.layer(DefaultBodyLimit::max(MAX_SAVE + 1024))
|
||||
|
||||
Reference in new issue
Block a user