Jelajahi Sumber

Fix session id assignment

Sergey Chushin 3 tahun lalu
induk
melakukan
a0263e5a61
1 mengubah file dengan 4 tambahan dan 1 penghapusan
  1. 4 1
      src/db.rs

+ 4 - 1
src/db.rs

@@ -1,6 +1,7 @@
 use std::collections::HashMap;
 
 use serde::{Deserialize, Serialize};
+use std::sync::atomic::{AtomicU32, Ordering};
 use tokio::sync::RwLock;
 
 const ROOT_CHANNEL_ID: u32 = 0;
@@ -14,6 +15,7 @@ pub struct Db {
     users: sled::Tree,
     channels: sled::Tree,
     connected_users: RwLock<HashMap<SessionId, User>>,
+    next_session_id: AtomicU32,
 }
 
 #[derive(Clone)]
@@ -61,12 +63,13 @@ impl Db {
             users,
             channels,
             connected_users: RwLock::new(HashMap::new()),
+            next_session_id: AtomicU32::new(0),
         }
     }
 
     pub async fn add_new_user(&self, username: String) -> u32 {
+        let session_id = self.next_session_id.fetch_add(1, Ordering::SeqCst);
         let mut connected_users = self.connected_users.write().await;
-        let session_id = connected_users.len() as u32;
         connected_users.insert(
             session_id,
             User {