From 3410d444ae4f47b0b9ebcce646fbddd1c8f96b11 Mon Sep 17 00:00:00 2001 From: Hendrik Brummermann Date: Tue, 12 Mar 2024 21:52:25 +0100 Subject: [PATCH] ported nativehelper to neutralino 5.0 --- app/nativehelper/Cargo.toml | 3 ++- app/nativehelper/src/main.rs | 42 ++++++++++++++++-------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/app/nativehelper/Cargo.toml b/app/nativehelper/Cargo.toml index 06645617a9..bdf01b24a2 100644 --- a/app/nativehelper/Cargo.toml +++ b/app/nativehelper/Cargo.toml @@ -18,6 +18,7 @@ panic = 'abort' strip = true [dependencies] -clap = {version = "4.4.11", features = ["derive"]} +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" steamworks = "0.10.0" websocket = "0.27.0" diff --git a/app/nativehelper/src/main.rs b/app/nativehelper/src/main.rs index 41c090127e..7f3ae7912e 100644 --- a/app/nativehelper/src/main.rs +++ b/app/nativehelper/src/main.rs @@ -1,5 +1,6 @@ -use clap::Parser; - +use serde_json::Value; +use std::io; +use std::io::Read; use std::sync::Arc; use std::sync::atomic::AtomicBool; use std::sync::atomic::Ordering; @@ -14,24 +15,19 @@ use steamworks::Client; use websocket::client::ClientBuilder; use websocket::{Message, OwnedMessage}; -#[derive(Parser)] -struct Cli { - /// The websocket port - #[arg(long = "nl-port")] - nl_port: String, - /// The authentication token to use the native API - #[arg(long = "nl-token")] - nl_token: String, - // The extension id - #[arg(long = "nl-extension-id")] - nl_extension_id: String -} +fn connect() -> (Sender, JoinHandle<()>) { + println!("Read connection parameters"); + let mut json = String::new(); + io::stdin().read_to_string(&mut json).expect("Read from stdin"); + let connection_params: Value = serde_json::from_str(&json).expect("Parse json from stdin"); + let nl_token = connection_params["nlToken"].as_str().expect("nlToken").to_string(); + let nl_port = connection_params["nlPort"].as_str().expect("nlPort").to_string(); + let nl_connect_token = connection_params["nlConnectToken"].as_str().expect("nlConnectToken").to_string(); -fn connect(nl_port: String) -> (Sender, JoinHandle<()>) { - let connection = "ws://127.0.0.1:".to_owned() + &nl_port+ "?extensionId=nativehelper"; - println!("Connecting to {}", connection); + let connection = "ws://127.0.0.1:".to_owned() + &nl_port + "?extensionId=nativehelper&connectToken=" + &nl_connect_token; + println!("Connecting"); let client = ClientBuilder::new(&connection) .unwrap() @@ -110,7 +106,7 @@ fn connect(nl_port: String) -> (Sender, JoinHandle<()>) { OwnedMessage::Text(data) => { println!("Receive Loop Text: {:?}", data); let tx_2 = tx_1.clone(); - handle_message(tx_2, data); + handle_message(&nl_token, tx_2, data); } _ => println!("Receive Loop: {:?}", message) } @@ -120,10 +116,9 @@ fn connect(nl_port: String) -> (Sender, JoinHandle<()>) { return (tx, receive_loop); } -fn handle_message(tx: Sender, message: String) { +fn handle_message(nl_token: &String, tx: Sender, message: String) { if message.contains("event\":\"request_authentication\"") { - let args = Cli::parse(); - authenticate(tx, args.nl_token); + authenticate(tx, nl_token.clone()); } } @@ -151,7 +146,7 @@ fn authenticate(tx: Sender, nl_token: String) { \"event\": \"steamAuthToken\",\ \"data\": {:?}\ }}\ - }}", &nl_token, &session_ticket)); + }}", nl_token, &session_ticket)); match tx.send(message) { Ok(()) => (), Err(e) => { @@ -190,7 +185,6 @@ fn authenticate(tx: Sender, nl_token: String) { } fn main() { - let args = Cli::parse(); - let (_tx, receive_loop) = connect(args.nl_port); + let (_tx, receive_loop) = connect(); let _ = receive_loop.join(); }