ChatGPT Codex 5.2 xhigh refactored > 45min
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user