ChatGPT Codex 5.2 xhigh refactored > 45min

This commit is contained in:
2026-01-13 18:59:12 +01:00
parent f76d59265c
commit b60dcef471
15 changed files with 1672 additions and 367 deletions
+21 -11
View File
@@ -17,6 +17,8 @@ mod context;
mod download;
mod error;
mod handlers;
mod identity;
mod library;
mod local_games;
mod network;
mod path_validation;
@@ -33,7 +35,7 @@ use std::{net::SocketAddr, sync::Arc};
pub use config::{CHUNK_SIZE, MAX_RETRY_COUNT};
pub use error::PeerError;
use lanspread_db::db::{Game, GameFileDescription};
pub use peer_db::{MajorityValidationResult, PeerGameDB, PeerInfo};
pub use peer_db::{MajorityValidationResult, PeerGameDB, PeerId, PeerInfo, PeerUpsert};
use tokio::sync::{
RwLock,
mpsc::{UnboundedReceiver, UnboundedSender},
@@ -48,6 +50,7 @@ use crate::{
handle_list_games_command,
handle_set_game_dir_command,
},
network::send_goodbye,
services::{
run_local_game_monitor,
run_peer_discovery,
@@ -137,13 +140,14 @@ pub fn start_peer(
peer_game_db: Arc<RwLock<PeerGameDB>>,
) -> eyre::Result<UnboundedSender<PeerCommand>> {
log::info!("Starting peer system with game directory: {game_dir}");
let peer_id = identity::load_or_create_peer_id()?;
let (tx_control, rx_control) = tokio::sync::mpsc::unbounded_channel();
// Start the peer in a background task
let tx_control_clone = tx_control.clone();
tokio::spawn(async move {
if let Err(e) = run_peer(rx_control, tx_notify_ui, peer_game_db).await {
if let Err(e) = run_peer(rx_control, tx_notify_ui, peer_game_db, peer_id).await {
log::error!("Peer system failed: {e}");
}
});
@@ -159,9 +163,10 @@ async fn run_peer(
mut rx_control: UnboundedReceiver<PeerCommand>,
tx_notify_ui: UnboundedSender<PeerEvent>,
peer_game_db: Arc<RwLock<PeerGameDB>>,
peer_id: String,
) -> eyre::Result<()> {
// Create the shared context
let ctx = Ctx::new(peer_game_db.clone());
let ctx = Ctx::new(peer_game_db.clone(), peer_id);
let peer_ctx = ctx.to_peer_ctx(tx_notify_ui.clone());
// Start server component
@@ -178,15 +183,9 @@ async fn run_peer(
// Start peer discovery task
let tx_notify_ui_discovery = tx_notify_ui.clone();
let peer_game_db_discovery = ctx.peer_game_db.clone();
let local_peer_addr = ctx.local_peer_addr.clone();
let ctx_discovery = ctx.clone();
tokio::spawn(async move {
run_peer_discovery(
tx_notify_ui_discovery,
peer_game_db_discovery,
local_peer_addr,
)
.await;
run_peer_discovery(tx_notify_ui_discovery, ctx_discovery).await;
});
// Start ping service task
@@ -240,5 +239,16 @@ async fn run_peer(
}
}
let peer_id = ctx.peer_id.as_ref().clone();
let peer_addresses = { ctx.peer_game_db.read().await.get_peer_addresses() };
for peer_addr in peer_addresses {
let peer_id = peer_id.clone();
tokio::spawn(async move {
if let Err(e) = send_goodbye(peer_addr, peer_id).await {
log::warn!("Failed to send Goodbye to {peer_addr}: {e}");
}
});
}
Ok(())
}