From a75ee4f12e78b880f6d008a5e72d70b0c7f997b4 Mon Sep 17 00:00:00 2001 From: "1992414357@qq.com" <1992414357@qq.com> Date: Mon, 9 Jun 2025 10:27:37 +0800 Subject: 重写客户端代码 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/plugin_client.rs | 121 +++++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 59 deletions(-) (limited to 'client/src/plugin_client.rs') diff --git a/client/src/plugin_client.rs b/client/src/plugin_client.rs index 2449f3a..481f52a 100644 --- a/client/src/plugin_client.rs +++ b/client/src/plugin_client.rs @@ -1,66 +1,69 @@ +use std::sync::{Arc, Mutex}; +use bevy::input::common_conditions::input_just_pressed; +use bevy::log::info; +use bevy::prelude::{App, Commands, Component, IntoScheduleConfigs, KeyCode, Plugin, PreStartup, Query, ResMut, Startup, Update}; +use bevy_tokio_tasks::TokioTasksRuntime; +use nogamepads::entry_mutex; +use nogamepads_core::data::controller::runtime::structs::ControllerRuntime; +use nogamepads_core::data::controller::structs::ControllerData; +use nogamepads_core::data::player::structs::Player; +use nogamepads_core::service::tcp_network::pad_client::structs::PadClientNetwork; - -// #[derive(Component)] -// struct ClientComponent { -// pad_client: Arc, -// } - -use bevy::prelude::{App, Plugin}; +#[derive(Component)] +struct ClientComponent { + pad_client: Arc>, +} pub struct PadClientPlugin; impl Plugin for PadClientPlugin { fn build(&self, app: &mut App) { - // app.add_systems(PreStartup, client_init); - // app.add_systems(Startup, client_start); - // app.add_systems(Update, client_exit.run_if(input_just_pressed(KeyCode::Escape))); + app.add_systems(PreStartup, client_init); + app.add_systems(Startup, client_start); + app.add_systems(Update, client_exit.run_if(input_just_pressed(KeyCode::Escape))); } } -// -// fn client_init( -// mut commands: Commands -// ) { -// // 构建玩家信息 -// let mut player_info = PlayerInfo::new(); -// player_info.setup_account_info( -// env!("TEST_PLAYER_ACCOUNT"), -// env!("TEST_PLAYER_PASSWORD")); -// player_info.set_nickname(env!("TEST_PLAYER_NICKNAME")); -// player_info.set_customize_color_hsv(320, 0.5, 1.0); // PINK -// -// // 构建客户端 -// let mut pad_client = PadClient::default(); -// pad_client.bind_player(player_info); -// pad_client.quiet(); -// -// // 将客户端放入实体 -// commands.spawn( -// ClientComponent { -// pad_client: pad_client.build(), -// } -// ); -// } -// -// fn client_start( -// client_components: Query<&mut ClientComponent>, -// runtime: ResMut -// ) { -// for client_component in client_components.iter() { -// let pad_client = Arc::clone(&client_component.pad_client); -// -// // 启动服务器 -// runtime.spawn_background_task(|_ctx|async move { -// let entry = pad_client.get_connect_entry(); -// block_on(entry); -// info!("Finished"); -// }); -// } -// } -// -// fn client_exit( -// client_components: Query<&mut ClientComponent> -// ){ -// for client_component in client_components.iter() { -// let pad_client = Arc::clone(&client_component.pad_client); -// pad_client.request_disconnect(); -// } -// } \ No newline at end of file + +fn client_init( + mut commands: Commands +) { + let mut controller_data = ControllerData::default(); + controller_data.bind_player( + Player::register( + env!("TEST_PLAYER_ACCOUNT").to_string(), + env!("TEST_PLAYER_PASSWORD").to_string()) + ); + + let runtime = controller_data.runtime(); + + commands.spawn( + ClientComponent { + pad_client: Arc::clone(&runtime), + } + ); +} + +fn client_start( + client_components: Query<&mut ClientComponent>, + runtime: ResMut +) { + for client_component in client_components.iter() { + let client_runtime = Arc::clone(&client_component.pad_client); + let network = PadClientNetwork::build(client_runtime); + let entry = network.build_entry(); + + runtime.spawn_background_task(|_ctx| async move { + entry.await; + info!("Client finished.") + }); + } +} + +fn client_exit( + client_components: Query<&mut ClientComponent> +){ + for client_component in client_components.iter() { + entry_mutex!(client_component.pad_client, |guard| { + guard.close(); + }) + } +} \ No newline at end of file -- cgit