refactor (Opus 4.5): modularize and split

This commit is contained in:
2025-11-28 21:10:42 +01:00
parent df01131f8d
commit 53c7fe10ba
11 changed files with 3301 additions and 2729 deletions
+74
View File
@@ -0,0 +1,74 @@
//! Shared context types for the peer system.
use std::{
collections::{HashMap, HashSet},
net::SocketAddr,
sync::Arc,
};
use lanspread_db::db::GameDB;
use tokio::{sync::RwLock, task::JoinHandle};
use crate::{PeerEvent, peer_db::PeerGameDB};
/// Main context for the peer system.
#[derive(Clone)]
pub struct Ctx {
pub game_dir: Arc<RwLock<Option<String>>>,
pub local_game_db: Arc<RwLock<Option<GameDB>>>,
pub peer_game_db: Arc<RwLock<PeerGameDB>>,
pub local_peer_addr: Arc<RwLock<Option<SocketAddr>>>,
pub downloading_games: Arc<RwLock<HashSet<String>>>,
pub active_downloads: Arc<RwLock<HashMap<String, JoinHandle<()>>>>,
}
/// Context for peer connection handling.
#[derive(Clone)]
pub struct PeerCtx {
pub game_dir: Arc<RwLock<Option<String>>>,
pub local_game_db: Arc<RwLock<Option<GameDB>>>,
pub local_peer_addr: Arc<RwLock<Option<SocketAddr>>>,
pub downloading_games: Arc<RwLock<HashSet<String>>>,
pub peer_game_db: Arc<RwLock<PeerGameDB>>,
pub tx_notify_ui: tokio::sync::mpsc::UnboundedSender<PeerEvent>,
}
impl std::fmt::Debug for PeerCtx {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("PeerCtx")
.field("game_dir", &"...")
.field("local_game_db", &"...")
.field("local_peer_addr", &"...")
.field("downloading_games", &"...")
.finish()
}
}
impl Ctx {
/// Creates a new context with the given peer game database.
pub fn new(peer_game_db: Arc<RwLock<PeerGameDB>>) -> Self {
Self {
game_dir: Arc::new(RwLock::new(None)),
local_game_db: Arc::new(RwLock::new(None)),
peer_game_db,
local_peer_addr: Arc::new(RwLock::new(None)),
downloading_games: Arc::new(RwLock::new(HashSet::new())),
active_downloads: Arc::new(RwLock::new(HashMap::new())),
}
}
/// Creates a `PeerCtx` from this context.
pub fn to_peer_ctx(
&self,
tx_notify_ui: tokio::sync::mpsc::UnboundedSender<PeerEvent>,
) -> PeerCtx {
PeerCtx {
game_dir: self.game_dir.clone(),
local_game_db: self.local_game_db.clone(),
local_peer_addr: self.local_peer_addr.clone(),
downloading_games: self.downloading_games.clone(),
peer_game_db: self.peer_game_db.clone(),
tx_notify_ui,
}
}
}