Replaced actix with axum

This commit is contained in:
euzu
2025-03-11 16:07:06 +01:00
parent 988f87173e
commit fe50ecbb23
60 changed files with 1774 additions and 1934 deletions
+22 -26
View File
@@ -1,6 +1,6 @@
use std::collections::HashMap;
use std::sync::atomic::{AtomicU32, Ordering};
use parking_lot::RwLock;
use tokio::sync::RwLock;
pub struct ActiveUserManager {
pub user: RwLock<HashMap<String, AtomicU32>>,
@@ -19,44 +19,40 @@ impl ActiveUserManager {
}
}
pub fn user_connections(&self, username: &str) -> u32 {
if let Some(counter) = self.user.read().get(username) {
pub async fn user_connections(&self, username: &str) -> u32 {
if let Some(counter) = self.user.read().await.get(username) {
return counter.load(std::sync::atomic::Ordering::SeqCst);
}
0
}
pub fn active_users(&self) -> usize {
self.user.read().len()
pub async fn active_users(&self) -> usize {
self.user.read().await.len()
}
pub fn active_connections(&self) -> usize {
self.user.read().values().map(|c| c.load(Ordering::SeqCst) as usize).sum()
pub async fn active_connections(&self) -> usize {
self.user.read().await.values().map(|c| c.load(Ordering::SeqCst) as usize).sum()
}
pub fn add_connection(&self, username: &str) -> (usize, usize) {
{
let mut lock = self.user.write();
if let Some(counter) = lock.get(username) {
counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
} else {
lock.insert(username.to_string(), AtomicU32::new(1));
}
drop(lock);
pub async fn add_connection(&self, username: &str) -> (usize, usize) {
let mut lock = self.user.write().await;
if let Some(counter) = lock.get(username) {
counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
} else {
lock.insert(username.to_string(), AtomicU32::new(1));
}
(self.active_users(), self.active_connections())
drop(lock);
(self.active_users().await, self.active_connections().await)
}
pub fn remove_connection(&self, username: &str) -> (usize, usize) {
{
let mut lock = self.user.write();
if let Some(counter) = lock.get(username) {
if counter.fetch_sub(1, std::sync::atomic::Ordering::SeqCst) == 1 {
lock.remove(username);
}
pub async fn remove_connection(&self, username: &str) -> (usize, usize) {
let mut lock = self.user.write().await;
if let Some(counter) = lock.get(username) {
if counter.fetch_sub(1, std::sync::atomic::Ordering::SeqCst) == 1 {
lock.remove(username);
}
drop(lock);
}
(self.active_users(), self.active_connections())
drop(lock);
(self.active_users().await, self.active_connections().await)
}
}