mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-21 23:32:39 +02:00
Replaced actix with axum
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user