aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/Cargo.toml4
-rw-r--r--client/src/main.rs3
-rw-r--r--client/src/plugin_client.rs121
3 files changed, 65 insertions, 63 deletions
diff --git a/client/Cargo.toml b/client/Cargo.toml
index 182f647..ba6cb01 100644
--- a/client/Cargo.toml
+++ b/client/Cargo.toml
@@ -4,8 +4,10 @@ edition = "2024"
version.workspace = true
[dependencies]
+nogamepads = { path = "../../NoGamepads" }
nogamepads-core = { path = "../core" }
bevy-tokio-tasks = "0.16.0"
tokio = { version = "1.45.0", features = ["full"] }
-bevy = "0.16.0" \ No newline at end of file
+bevy = "0.16.0"
+
diff --git a/client/src/main.rs b/client/src/main.rs
index 39d3dba..31fb406 100644
--- a/client/src/main.rs
+++ b/client/src/main.rs
@@ -9,7 +9,6 @@ use tokio::runtime::Builder;
fn main() {
let mut app = App::new();
- // 插件
app.add_plugins(DefaultPlugins);
app.add_plugins(TokioTasksPlugin {
make_runtime: Box::new(|| {
@@ -18,9 +17,7 @@ fn main() {
..TokioTasksPlugin::default()
});
- // 自定义插件
app.add_plugins(PadClientPlugin);
- // 启动
app.run();
}
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<PadClient>,
-// }
-
-use bevy::prelude::{App, Plugin};
+#[derive(Component)]
+struct ClientComponent {
+ pad_client: Arc<Mutex<ControllerRuntime>>,
+}
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<TokioTasksRuntime>
-// ) {
-// 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<TokioTasksRuntime>
+) {
+ 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