registration put

This commit is contained in:
2026-01-02 22:27:26 +01:00
parent 1d72d7500a
commit 1914c68c9f
3 changed files with 181 additions and 94 deletions

View File

@@ -5,7 +5,7 @@ use client_network::{
use crossbeam_channel::{Receiver, Sender};
use egui::{
Align, Align2, Button, CentralPanel, CollapsingHeader, Context, Id, LayerId, Layout, Order,
Popup, ScrollArea, SidePanel, TopBottomPanel, Ui, ViewportCommand,
Popup, ScrollArea, SidePanel, TextStyle, TopBottomPanel, Ui, ViewportCommand,
};
use std::collections::HashMap;
@@ -29,7 +29,8 @@ pub struct P2PClientApp {
status_message: String,
known_peers: Vec<String>,
connect_address_input: String,
connect_server_name_input: String,
connected_address: String,
connect_name_input: String,
// Key: Parent Directory Hash (String), Value: List of children FileNode
loaded_fs: HashMap<String, MerkleTree>,
@@ -40,6 +41,8 @@ pub struct P2PClientApp {
server_status: ServerStatus,
show_network_popup: bool, // gérer selon besoin
error_message: Option<String>, // Some(message) -> afficher, None -> rien
}
impl P2PClientApp {
@@ -59,13 +62,21 @@ impl P2PClientApp {
status_message: "Client Initialized. Awaiting network status...".to_string(),
known_peers: vec!["bob".to_string()],
connect_address_input: "https://jch.irif.fr:8443".to_string(),
connect_server_name_input: "jch.irif.fr".to_string(),
connected_address: "".to_string(),
loaded_fs,
active_peer: None,
server_status: ServerStatus::NotConnected,
show_network_popup: false,
error_message: None,
connect_name_input: "bob".to_string(),
}
}
pub fn show_error(&mut self, msg: impl Into<String>) {
self.error_message = Some(msg.into());
}
pub fn clear_error(&mut self) {
self.error_message = None;
}
}
// --- eframe::App Trait Implementation ---
@@ -127,14 +138,24 @@ impl eframe::App for P2PClientApp {
// root_hash,
// ));
}
NetworkEvent::Connected() => {
NetworkEvent::Connected(ip) => {
self.server_status = ServerStatus::Connected;
self.connected_address = ip.clone();
let _ = self.network_cmd_tx.send(NetworkCommand::FetchPeerList(
self.connected_address.clone(),
));
}
NetworkEvent::ConnectedHandshake() => {
self.server_status = ServerStatus::ConnectedHandshake;
}
NetworkEvent::Disconnected() => todo!(),
NetworkEvent::Error() => todo!(),
NetworkEvent::Disconnected() => {
self.connected_address = "".to_string();
self.known_peers.clear();
self.server_status = ServerStatus::NotConnected;
}
NetworkEvent::Error(err) => {
self.show_error(err);
}
NetworkEvent::DataReceived(_, merkle_node) => todo!(),
}
}
@@ -154,34 +175,60 @@ impl eframe::App for P2PClientApp {
});
ui.menu_button("Network", |ui| {
ui.vertical(|ui| {
ui.horizontal(|ui| {
ui.label("Server IP:");
ui.text_edit_singleline(&mut self.connect_address_input);
});
match self.server_status {
ServerStatus::Connected | ServerStatus::ConnectedHandshake => {
let desired = egui::vec2(300.0, 0.0); // width 300, auto-height if 0
ui.set_min_size(desired);
ui.vertical(|ui| {
if ui.button("Disconnect").clicked() {
println!("Disconnecting...");
let _ = self.network_cmd_tx.send(NetworkCommand::Disconnect());
self.server_status = ServerStatus::NotConnected;
self.remaining = std::time::Duration::from_secs(0);
self.timer_started = false;
ui.close();
}
});
}
ServerStatus::NotConnected => {
let desired = egui::vec2(0.0, 0.0); // width 300, auto-height if 0
ui.set_min_size(desired);
ui.vertical(|ui| {
ui.horizontal(|ui| {
ui.label("Server IP:");
ui.text_edit_singleline(&mut self.connect_address_input);
});
ui.horizontal(|ui| {
ui.label("Name:");
ui.text_edit_singleline(&mut self.connect_name_input);
});
if ui.button("Connect").clicked() {
let addr = self.connect_address_input.clone();
let name = self.connect_name_input.clone();
let _ = self
.network_cmd_tx
.send(NetworkCommand::ConnectToServerPut(addr, name));
self.server_status = ServerStatus::Loading;
ui.close();
}
});
}
_ => {}
}
/* ui.horizontal(|ui| {
ui.label("Server peer name:");
ui.text_edit_singleline(&mut self.connect_server_name_input);
if ui.button("Connect").clicked() {
let addr = self.connect_address_input.clone();
let serv_name = self.connect_server_name_input.clone();
let _ = self
.network_cmd_tx
.send(NetworkCommand::ConnectToServerPut(addr));
.send(NetworkCommand::ConnectToServer(addr, serv_name));
self.server_status = ServerStatus::Loading;
ui.close();
}
/* ui.horizontal(|ui| {
ui.label("Server peer name:");
ui.text_edit_singleline(&mut self.connect_server_name_input);
if ui.button("Connect").clicked() {
let addr = self.connect_address_input.clone();
let serv_name = self.connect_server_name_input.clone();
let _ = self
.network_cmd_tx
.send(NetworkCommand::ConnectToServer(addr, serv_name));
self.server_status = ServerStatus::Loading;
ui.close();
}
});*/
});
});*/
});
// état
@@ -262,8 +309,9 @@ impl eframe::App for P2PClientApp {
ui.heading("🌐 Known Peers");
ui.add_space(20.0);
if ui.button("🔄").clicked() {
println!("addr:{}", self.connected_address.clone());
let res = self.network_cmd_tx.send(NetworkCommand::FetchPeerList(
self.connect_address_input.clone(),
self.connected_address.clone(),
));
if let Some(error) = res.err() {
println!(
@@ -350,6 +398,21 @@ impl eframe::App for P2PClientApp {
// ui.label(format!("Status: {}", self.status_message));
});
if let Some(msg) = &self.error_message {
let msg = msg.clone();
egui::Window::new("Error")
.collapsible(false)
.resizable(false)
.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0])
.show(ctx, |ui| {
ui.label(&msg);
if ui.button("OK").clicked() {
self.clear_error();
}
});
ctx.request_repaint();
}
ctx.request_repaint_after(std::time::Duration::from_millis(10));
}
}