let user handler own user lookup map
This commit is contained in:
parent
7e18d5e1c1
commit
3900ec55d4
3 changed files with 10 additions and 12 deletions
|
@ -74,7 +74,6 @@ pub struct AppState {
|
||||||
pub tx_game_handler: mpsc::Sender<GameHandlerMessage>,
|
pub tx_game_handler: mpsc::Sender<GameHandlerMessage>,
|
||||||
pub tx_incoming_message_handler: mpsc::Sender<(SocketAddr, Message)>,
|
pub tx_incoming_message_handler: mpsc::Sender<(SocketAddr, Message)>,
|
||||||
pub tx_user_handler: mpsc::Sender<UserHandlerMessage>,
|
pub tx_user_handler: mpsc::Sender<UserHandlerMessage>,
|
||||||
pub users_by_id: RwLock<HashMap<String, Arc<RwLock<User>>>>,
|
|
||||||
pub white_cards_by_id: HashMap<String, Arc<CardWhiteWithID>>,
|
pub white_cards_by_id: HashMap<String, Arc<CardWhiteWithID>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,6 @@ async fn main() -> Result<()> {
|
||||||
let offline_users = RwLock::new(HashMap::<String, Arc<RwLock<User>>>::new());
|
let offline_users = RwLock::new(HashMap::<String, Arc<RwLock<User>>>::new());
|
||||||
let online_users = RwLock::new(HashMap::<SocketAddr, Arc<RwLock<User>>>::new());
|
let online_users = RwLock::new(HashMap::<SocketAddr, Arc<RwLock<User>>>::new());
|
||||||
let reserved_names = RwLock::new(HashSet::<String>::new());
|
let reserved_names = RwLock::new(HashSet::<String>::new());
|
||||||
let users_by_id = RwLock::new(HashMap::<String, Arc<RwLock<User>>>::new());
|
|
||||||
|
|
||||||
let app_state = Arc::new(AppState {
|
let app_state = Arc::new(AppState {
|
||||||
first_names,
|
first_names,
|
||||||
|
@ -94,7 +93,6 @@ async fn main() -> Result<()> {
|
||||||
tx_game_handler,
|
tx_game_handler,
|
||||||
tx_incoming_message_handler,
|
tx_incoming_message_handler,
|
||||||
tx_user_handler,
|
tx_user_handler,
|
||||||
users_by_id,
|
|
||||||
white_cards_by_id,
|
white_cards_by_id,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -113,7 +111,7 @@ async fn main() -> Result<()> {
|
||||||
// TODO: Make an outgoing message handler?
|
// TODO: Make an outgoing message handler?
|
||||||
|
|
||||||
// Spawn task to handle User things
|
// Spawn task to handle User things
|
||||||
let user_handler = UserHandler::new(app_state.clone());
|
let mut user_handler = UserHandler::new(app_state.clone());
|
||||||
tokio::task::Builder::new()
|
tokio::task::Builder::new()
|
||||||
.name("User Handler")
|
.name("User Handler")
|
||||||
.spawn(async move {
|
.spawn(async move {
|
||||||
|
|
|
@ -14,6 +14,7 @@ use std::sync::{Arc, RwLock};
|
||||||
pub struct UserHandler {
|
pub struct UserHandler {
|
||||||
/// Pointer to global state
|
/// Pointer to global state
|
||||||
state: Arc<AppState>,
|
state: Arc<AppState>,
|
||||||
|
users_by_id: HashMap<String, Arc<RwLock<User>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum DmUserMethod {
|
pub enum DmUserMethod {
|
||||||
|
@ -40,11 +41,14 @@ pub enum SendUserMessage {
|
||||||
impl UserHandler {
|
impl UserHandler {
|
||||||
/// Returns new UserHandler
|
/// Returns new UserHandler
|
||||||
pub fn new(state: Arc<AppState>) -> Self {
|
pub fn new(state: Arc<AppState>) -> Self {
|
||||||
UserHandler { state }
|
UserHandler {
|
||||||
|
state,
|
||||||
|
users_by_id: HashMap::<String, Arc<RwLock<User>>>::new(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles incoming messages
|
/// Handles incoming messages
|
||||||
pub async fn handle(&self, message: UserHandlerMessage) {
|
pub async fn handle(&mut self, message: UserHandlerMessage) {
|
||||||
match message {
|
match message {
|
||||||
NewUser(user, addr) => {
|
NewUser(user, addr) => {
|
||||||
// TODO: make this not async
|
// TODO: make this not async
|
||||||
|
@ -63,7 +67,7 @@ impl UserHandler {
|
||||||
// Determine lookup method
|
// Determine lookup method
|
||||||
match method {
|
match method {
|
||||||
Id(id) => {
|
Id(id) => {
|
||||||
if let Some(user) = self.state.users_by_id.read().unwrap().get(&id) {
|
if let Some(user) = self.users_by_id.get(&id) {
|
||||||
tx = user.read().unwrap().tx.clone();
|
tx = user.read().unwrap().tx.clone();
|
||||||
} else {
|
} else {
|
||||||
tracing::error!("Attempted to send message to invalid user id!");
|
tracing::error!("Attempted to send message to invalid user id!");
|
||||||
|
@ -113,7 +117,7 @@ impl UserHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create, register, and hydrate new user
|
/// Create, register, and hydrate new user
|
||||||
async fn set_up_new_user(&self, user: User, addr: SocketAddr) {
|
async fn set_up_new_user(&mut self, user: User, addr: SocketAddr) {
|
||||||
let user_tx = user.tx.clone();
|
let user_tx = user.tx.clone();
|
||||||
let new_user = Arc::new(RwLock::new(user));
|
let new_user = Arc::new(RwLock::new(user));
|
||||||
|
|
||||||
|
@ -123,10 +127,7 @@ impl UserHandler {
|
||||||
tokio::spawn(async move { tx.send(msg).await });
|
tokio::spawn(async move { tx.send(msg).await });
|
||||||
|
|
||||||
// Register uuid
|
// Register uuid
|
||||||
self.state
|
self.users_by_id
|
||||||
.users_by_id
|
|
||||||
.write()
|
|
||||||
.unwrap()
|
|
||||||
.insert(new_user.read().unwrap().uuid.clone(), new_user.clone());
|
.insert(new_user.read().unwrap().uuid.clone(), new_user.clone());
|
||||||
|
|
||||||
// Register online using `addr` as key until something longer lived exists
|
// Register online using `addr` as key until something longer lived exists
|
||||||
|
|
Loading…
Add table
Reference in a new issue