From 84a12f69dd678575404c728ebe8cf91a9f6c1188 Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Mon, 1 Apr 2024 14:43:38 -0700 Subject: [PATCH 1/2] new: cleanup templates --- .../rust/no-ui/chat/{package_name}/src/lib.rs | 6 ++--- .../rust/no-ui/echo/{package_name}/src/lib.rs | 6 ++--- .../no-ui/fibonacci/{package_name}/src/lib.rs | 8 +++--- .../no-ui/file_transfer/worker/src/lib.rs | 8 +++--- .../file_transfer/{package_name}/src/lib.rs | 6 ++--- .../rust/ui/chat/{package_name}/src/lib.rs | 27 +++++++------------ 6 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/new/templates/rust/no-ui/chat/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/chat/{package_name}/src/lib.rs index 454a414e..6b3f9dec 100644 --- a/src/new/templates/rust/no-ui/chat/{package_name}/src/lib.rs +++ b/src/new/templates/rust/no-ui/chat/{package_name}/src/lib.rs @@ -40,7 +40,7 @@ fn handle_message(our: &Address, message_archive: &mut MessageArchive) -> anyhow ref message, } => { if target == &our.node { - println!("{package_name}|{}: {}", source.node, message); + println!("{}: {}", source.node, message); message_archive.push((source.node.clone(), message.clone())); } else { let _ = Request::new() @@ -76,7 +76,7 @@ fn handle_message(our: &Address, message_archive: &mut MessageArchive) -> anyhow call_init!(init); fn init(our: Address) { - println!("{package_name}: begin"); + println!("begin"); let mut message_archive: MessageArchive = Vec::new(); @@ -84,7 +84,7 @@ fn init(our: Address) { match handle_message(&our, &mut message_archive) { Ok(()) => {} Err(e) => { - println!("{package_name}: error: {:?}", e); + println!("error: {:?}", e); } }; } diff --git a/src/new/templates/rust/no-ui/echo/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/echo/{package_name}/src/lib.rs index 670f1c3e..f12d8e4b 100644 --- a/src/new/templates/rust/no-ui/echo/{package_name}/src/lib.rs +++ b/src/new/templates/rust/no-ui/echo/{package_name}/src/lib.rs @@ -16,7 +16,7 @@ fn handle_message(_our: &Address) -> anyhow::Result<()> { } let body: serde_json::Value = serde_json::from_slice(message.body())?; - println!("{package_name}: got {body:?}"); + println!("got {body:?}"); Response::new() .body(serde_json::to_vec(&serde_json::json!("Ack")).unwrap()) .send() @@ -26,13 +26,13 @@ fn handle_message(_our: &Address) -> anyhow::Result<()> { call_init!(init); fn init(our: Address) { - println!("{package_name}: begin"); + println!("begin"); loop { match handle_message(&our) { Ok(()) => {} Err(e) => { - println!("{package_name}: error: {:?}", e); + println!("error: {:?}", e); } }; } diff --git a/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs index 65bdf743..e79d5096 100644 --- a/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs +++ b/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs @@ -52,7 +52,7 @@ fn handle_message() -> anyhow::Result<()> { let result = fibonacci(number); let duration = start.elapsed(); println!( - "{package_name}: fibonacci({}) = {}; {}ns", + "fibonacci({}) = {}; {}ns", number, result, duration.as_nanos(), @@ -82,7 +82,7 @@ fn handle_message() -> anyhow::Result<()> { } }) / number_trials as u128; println!( - "{package_name}: fibonacci({}) = {}; {}±{}ns averaged over {} trials", + "fibonacci({}) = {}; {}±{}ns averaged over {} trials", number, result, mean, absolute_deviation, number_trials, ); Response::new() @@ -100,13 +100,13 @@ fn handle_message() -> anyhow::Result<()> { call_init!(init); fn init(_our: Address) { - println!("{package_name}: begin"); + println!("begin"); loop { match handle_message() { Ok(()) => {} Err(e) => { - println!("{package_name}: error: {:?}", e); + println!("error: {:?}", e); } }; } diff --git a/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs b/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs index 7822557e..31289bdc 100644 --- a/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs +++ b/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs @@ -162,7 +162,7 @@ fn handle_message( } } _ => { - println!("{package_name} worker: got something else than request..."); + println!("worker: got something else than request..."); } } Ok(false) @@ -171,7 +171,7 @@ fn handle_message( call_init!(init); fn init(our: Address) { - println!("{package_name} worker: begin"); + println!("worker: begin"); let start = std::time::Instant::now(); let drive_path = format!("{}/files", our.package_id()); @@ -185,14 +185,14 @@ fn init(our: Address) { Ok(exit) => { if exit { println!( - "{package_name} worker done: exiting, took {:?}", + "worker: done: exiting, took {:?}", start.elapsed() ); break; } } Err(e) => { - println!("{package_name}: worker error: {:?}", e); + println!("worker: error: {:?}", e); } }; } diff --git a/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs index 26ca32f2..0a3734c5 100644 --- a/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs +++ b/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs @@ -126,7 +126,7 @@ fn handle_transfer_request( } } TransferRequest::Progress { name, progress } => { - println!("file: {} progress: {}%", name, progress); + println!("{} progress: {}%", name, progress); } } @@ -170,7 +170,7 @@ fn handle_message(our: &Address, files_dir: &Directory) -> anyhow::Result<()> { call_init!(init); fn init(our: Address) { - println!("{package_name}: begin"); + println!("begin"); let drive_path = create_drive(our.package_id(), "files").unwrap(); let files_dir = open_dir(&drive_path, false).unwrap(); @@ -179,7 +179,7 @@ fn init(our: Address) { match handle_message(&our, &files_dir) { Ok(()) => {} Err(e) => { - println!("{package_name}: error: {:?}", e); + println!("error: {:?}", e); } }; } diff --git a/src/new/templates/rust/ui/chat/{package_name}/src/lib.rs b/src/new/templates/rust/ui/chat/{package_name}/src/lib.rs index dd8ec241..2a1b23bf 100644 --- a/src/new/templates/rust/ui/chat/{package_name}/src/lib.rs +++ b/src/new/templates/rust/ui/chat/{package_name}/src/lib.rs @@ -5,7 +5,7 @@ use kinode_process_lib::{ await_message, call_init, get_blob, http::{ bind_http_path, bind_ws_path, send_response, send_ws_push, serve_ui, HttpServerRequest, - IncomingHttpRequest, StatusCode, WsMessageType, + StatusCode, WsMessageType, }, println, Address, LazyLoadBlob, Message, ProcessId, Request, Response, }; @@ -149,24 +149,16 @@ fn handle_chat_request( }; // If the target is not us, send a request to the target - - if target != &our.node { - println!("new message from {}: {}", source.node, message); - - match Request::new() + if target == &our.node { + println!("{}: {}", source.node, message); + } else { + Request::new() .target(Address { node: target.clone(), process: ProcessId::from_str("{package_name}:{package_name}:{publisher}")?, }) .body(body) - .send_and_await_response(5) - { - Ok(_) => {} - Err(e) => { - println!("testing: send request error: {:?}", e); - return Ok(()); - } - }; + .send_and_await_response(5)??; } // Retreive the message archive for the counterparty, or create a new one if it doesn't exist @@ -248,7 +240,7 @@ fn handle_message( match message { Message::Response { .. } => { - println!("{package_name}: got response - {:?}", message); + println!("got response - {:?}", message); return Ok(()); } Message::Request { @@ -267,9 +259,8 @@ fn handle_message( } call_init!(init); - fn init(our: Address) { - println!("{package_name}: begin"); + println!("begin"); let mut message_archive: MessageArchive = HashMap::new(); let mut channel_id = 0; @@ -287,7 +278,7 @@ fn init(our: Address) { match handle_message(&our, &mut message_archive, &mut channel_id) { Ok(()) => {} Err(e) => { - println!("{package_name}: error: {:?}", e); + println!("error: {:?}", e); } }; } From bee245db5b28c68c9cec74b71856d73d69dac118 Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Tue, 2 Apr 2024 09:01:02 -0700 Subject: [PATCH 2/2] new: add scripts for fibonacci and file_transfer; fix bugs --- .../rust/no-ui/fibonacci/Cargo.toml_ | 1 + .../rust/no-ui/fibonacci/number/Cargo.toml_ | 17 ++++ .../rust/no-ui/fibonacci/number/src/lib.rs | 54 ++++++++++ .../rust/no-ui/fibonacci/pkg/scripts.json | 13 +++ .../no-ui/fibonacci/{package_name}/src/lib.rs | 1 - .../rust/no-ui/file_transfer/Cargo.toml_ | 2 + .../no-ui/file_transfer/download/Cargo.toml_ | 17 ++++ .../no-ui/file_transfer/download/src/lib.rs | 67 +++++++++++++ .../file_transfer/list_files/Cargo.toml_ | 17 ++++ .../no-ui/file_transfer/list_files/src/lib.rs | 78 +++++++++++++++ .../rust/no-ui/file_transfer/pkg/scripts.json | 24 +++++ .../no-ui/file_transfer/worker/Cargo.toml_ | 2 +- .../no-ui/file_transfer/worker/src/lib.rs | 6 +- .../file_transfer/{package_name}/Cargo.toml_ | 2 +- .../file_transfer/{package_name}/src/lib.rs | 98 +++++++------------ 15 files changed, 329 insertions(+), 70 deletions(-) create mode 100644 src/new/templates/rust/no-ui/fibonacci/number/Cargo.toml_ create mode 100644 src/new/templates/rust/no-ui/fibonacci/number/src/lib.rs create mode 100644 src/new/templates/rust/no-ui/fibonacci/pkg/scripts.json create mode 100644 src/new/templates/rust/no-ui/file_transfer/download/Cargo.toml_ create mode 100644 src/new/templates/rust/no-ui/file_transfer/download/src/lib.rs create mode 100644 src/new/templates/rust/no-ui/file_transfer/list_files/Cargo.toml_ create mode 100644 src/new/templates/rust/no-ui/file_transfer/list_files/src/lib.rs create mode 100644 src/new/templates/rust/no-ui/file_transfer/pkg/scripts.json diff --git a/src/new/templates/rust/no-ui/fibonacci/Cargo.toml_ b/src/new/templates/rust/no-ui/fibonacci/Cargo.toml_ index 31d65e6d..ff34e3e1 100644 --- a/src/new/templates/rust/no-ui/fibonacci/Cargo.toml_ +++ b/src/new/templates/rust/no-ui/fibonacci/Cargo.toml_ @@ -2,6 +2,7 @@ resolver = "2" members = [ "{package_name}", + "number", ] [profile.release] diff --git a/src/new/templates/rust/no-ui/fibonacci/number/Cargo.toml_ b/src/new/templates/rust/no-ui/fibonacci/number/Cargo.toml_ new file mode 100644 index 00000000..fe081b31 --- /dev/null +++ b/src/new/templates/rust/no-ui/fibonacci/number/Cargo.toml_ @@ -0,0 +1,17 @@ +[package] +name = "number" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0" +kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib", tag = "v0.6.0" } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "21a46c7" } + +[lib] +crate-type = ["cdylib"] + +[package.metadata.component] +package = "kinode:process" diff --git a/src/new/templates/rust/no-ui/fibonacci/number/src/lib.rs b/src/new/templates/rust/no-ui/fibonacci/number/src/lib.rs new file mode 100644 index 00000000..1dd7758e --- /dev/null +++ b/src/new/templates/rust/no-ui/fibonacci/number/src/lib.rs @@ -0,0 +1,54 @@ +use serde::{Deserialize, Serialize}; + +use kinode_process_lib::{ + await_next_request_body, call_init, println, Address, Message, Request, +}; + +wit_bindgen::generate!({ + path: "wit", + world: "process", + exports: { + world: Component, + }, +}); + +#[derive(Debug, Serialize, Deserialize)] +enum FibonacciRequest { + Number(u32), + Numbers((u32, u32)), +} + +#[derive(Debug, Serialize, Deserialize)] +enum FibonacciResponse { + Number(u128), + Numbers((u128, u32)), +} + +call_init!(init); +fn init(our: Address) { + let Ok(body) = await_next_request_body() else { + println!("failed to get args!"); + return; + }; + + let number: u32 = String::from_utf8(body) + .unwrap_or_default() + .parse() + .unwrap_or_default(); + + let Ok(Ok(Message::Response { body, .. })) = + Request::to((our.node(), ("{package_name}", "{package_name}", "{publisher}"))) + .body(serde_json::to_vec(&FibonacciRequest::Number(number)).unwrap()) + .send_and_await_response(5) + else { + println!("did not receive expected Response from {package_name}:{package_name}:{publisher}"); + return; + }; + + let Ok(FibonacciResponse::Number(_number)) = serde_json::from_slice(&body) else { + println!("did not receive expected Ack from {package_name}:{package_name}:{publisher}"); + return; + }; + + // don't need to print the number here since the main process prints it +} diff --git a/src/new/templates/rust/no-ui/fibonacci/pkg/scripts.json b/src/new/templates/rust/no-ui/fibonacci/pkg/scripts.json new file mode 100644 index 00000000..7ecc1275 --- /dev/null +++ b/src/new/templates/rust/no-ui/fibonacci/pkg/scripts.json @@ -0,0 +1,13 @@ +{ + "number.wasm": { + "root": false, + "public": false, + "request_networking": false, + "request_capabilities": [ + "{package_name}:{package_name}:{publisher}" + ], + "grant_capabilities": [ + "{package_name}:{package_name}:{publisher}" + ] + } +} diff --git a/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs index e79d5096..cc211931 100644 --- a/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs +++ b/src/new/templates/rust/no-ui/fibonacci/{package_name}/src/lib.rs @@ -98,7 +98,6 @@ fn handle_message() -> anyhow::Result<()> { } call_init!(init); - fn init(_our: Address) { println!("begin"); diff --git a/src/new/templates/rust/no-ui/file_transfer/Cargo.toml_ b/src/new/templates/rust/no-ui/file_transfer/Cargo.toml_ index 512c1251..02d3f899 100644 --- a/src/new/templates/rust/no-ui/file_transfer/Cargo.toml_ +++ b/src/new/templates/rust/no-ui/file_transfer/Cargo.toml_ @@ -3,6 +3,8 @@ resolver = "2" members = [ "{package_name}", "worker", + "download", + "list_files" ] [profile.release] diff --git a/src/new/templates/rust/no-ui/file_transfer/download/Cargo.toml_ b/src/new/templates/rust/no-ui/file_transfer/download/Cargo.toml_ new file mode 100644 index 00000000..7b61352e --- /dev/null +++ b/src/new/templates/rust/no-ui/file_transfer/download/Cargo.toml_ @@ -0,0 +1,17 @@ +[package] +name = "download" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0" +kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib", tag = "v0.6.0" } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "21a46c7" } + +[lib] +crate-type = ["cdylib"] + +[package.metadata.component] +package = "kinode:process" diff --git a/src/new/templates/rust/no-ui/file_transfer/download/src/lib.rs b/src/new/templates/rust/no-ui/file_transfer/download/src/lib.rs new file mode 100644 index 00000000..e27490ff --- /dev/null +++ b/src/new/templates/rust/no-ui/file_transfer/download/src/lib.rs @@ -0,0 +1,67 @@ +use serde::{Deserialize, Serialize}; + +use kinode_process_lib::{ + await_next_request_body, call_init, println, Address, Message, Request, +}; + +wit_bindgen::generate!({ + path: "wit", + world: "process", + exports: { + world: Component, + }, +}); + +#[derive(Serialize, Deserialize, Debug)] +pub enum TransferRequest { + ListFiles, + Download { name: String, target: Address }, + Progress { name: String, progress: u64 }, +} + +#[derive(Serialize, Deserialize, Debug)] +pub enum TransferResponse { + ListFiles(Vec), + Download { name: String, worker: Address }, + Done, + Started, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct FileInfo { + pub name: String, + pub size: u64, +} + +call_init!(init); +fn init(our: Address) { + let Ok(body) = await_next_request_body() else { + println!("failed to get args!"); + return; + }; + + let args = String::from_utf8(body).unwrap_or_default(); + let Some((name, who)) = args.split_once(" ") else { + println!("usage: {}@download:{package_name}:{publisher} file_name who", our.node()); + return + }; + let our: Address = format!("{}@{package_name}:{package_name}:{publisher}", our.node()) + .parse() + .unwrap(); + + let target: Address = format!("{}@{package_name}:{package_name}:{publisher}", who) + .parse() + .unwrap(); + + let Ok(Ok(Message::Response { .. })) = + Request::to(our) + .body(serde_json::to_vec(&TransferRequest::Download { + name: name.into(), + target: target.clone(), + }).unwrap()) + .send_and_await_response(5) + else { + println!("did not receive expected Response from {target}"); + return; + }; +} diff --git a/src/new/templates/rust/no-ui/file_transfer/list_files/Cargo.toml_ b/src/new/templates/rust/no-ui/file_transfer/list_files/Cargo.toml_ new file mode 100644 index 00000000..cf00a30c --- /dev/null +++ b/src/new/templates/rust/no-ui/file_transfer/list_files/Cargo.toml_ @@ -0,0 +1,17 @@ +[package] +name = "list_files" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0" +kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib", tag = "v0.6.0" } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "21a46c7" } + +[lib] +crate-type = ["cdylib"] + +[package.metadata.component] +package = "kinode:process" diff --git a/src/new/templates/rust/no-ui/file_transfer/list_files/src/lib.rs b/src/new/templates/rust/no-ui/file_transfer/list_files/src/lib.rs new file mode 100644 index 00000000..2f0be98b --- /dev/null +++ b/src/new/templates/rust/no-ui/file_transfer/list_files/src/lib.rs @@ -0,0 +1,78 @@ +use serde::{Deserialize, Serialize}; + +use kinode_process_lib::{ + await_next_request_body, call_init, println, Address, Message, Request, +}; + +wit_bindgen::generate!({ + path: "wit", + world: "process", + exports: { + world: Component, + }, +}); + +#[derive(Serialize, Deserialize, Debug)] +pub enum TransferRequest { + ListFiles, + Download { name: String, target: Address }, + Progress { name: String, progress: u64 }, +} + +#[derive(Serialize, Deserialize, Debug)] +pub enum TransferResponse { + ListFiles(Vec), + Download { name: String, worker: Address }, + Done, + Started, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct FileInfo { + pub name: String, + pub size: u64, +} + +call_init!(init); +fn init(our: Address) { + let Ok(body) = await_next_request_body() else { + println!("failed to get args!"); + return; + }; + + let who = String::from_utf8(body).unwrap_or_default(); + if who.is_empty() { + println!("usage: {}@list_files:{package_name}:{publisher} who", our); + return; + } + + let target: Address = format!("{}@{package_name}:{package_name}:{publisher}", who) + .parse() + .unwrap(); + + let Ok(Ok(Message::Response { body, .. })) = + Request::to(target) + .body(serde_json::to_vec(&TransferRequest::ListFiles).unwrap()) + .send_and_await_response(5) + else { + println!("did not receive expected Response from {who}"); + return; + }; + + let Ok(TransferResponse::ListFiles(files)) = serde_json::from_slice(&body) else { + println!("did not receive expected ListFiles from {who}"); + return; + }; + + println!( + "{}", + files.iter(). + fold(format!("{who} available files:\nFile\t\tSize (bytes)\n"), |mut msg, file| { + msg.push_str(&format!( + "{}\t\t{}", file.name.split('/').last().unwrap(), + file.size, + )); + msg + }) + ); +} diff --git a/src/new/templates/rust/no-ui/file_transfer/pkg/scripts.json b/src/new/templates/rust/no-ui/file_transfer/pkg/scripts.json new file mode 100644 index 00000000..4f667499 --- /dev/null +++ b/src/new/templates/rust/no-ui/file_transfer/pkg/scripts.json @@ -0,0 +1,24 @@ +{ + "download.wasm": { + "root": false, + "public": false, + "request_networking": false, + "request_capabilities": [ + "{package_name}:{package_name}:{publisher}" + ], + "grant_capabilities": [ + "{package_name}:{package_name}:{publisher}" + ] + }, + "list_files.wasm": { + "root": false, + "public": false, + "request_networking": true, + "request_capabilities": [ + "{package_name}:{package_name}:{publisher}" + ], + "grant_capabilities": [ + "{package_name}:{package_name}:{publisher}" + ] + } +} diff --git a/src/new/templates/rust/no-ui/file_transfer/worker/Cargo.toml_ b/src/new/templates/rust/no-ui/file_transfer/worker/Cargo.toml_ index d0ee8e53..83665a69 100644 --- a/src/new/templates/rust/no-ui/file_transfer/worker/Cargo.toml_ +++ b/src/new/templates/rust/no-ui/file_transfer/worker/Cargo.toml_ @@ -9,7 +9,7 @@ bincode = "1.3.3" kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib.git", tag = "v0.6.0" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "efcc759" } +wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "21a46c7" } [lib] crate-type = ["cdylib"] diff --git a/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs b/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs index 31289bdc..741849d7 100644 --- a/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs +++ b/src/new/templates/rust/no-ui/file_transfer/worker/src/lib.rs @@ -33,6 +33,8 @@ pub enum WorkerRequest { #[derive(Serialize, Deserialize, Debug)] pub enum TransferRequest { + ListFiles, + Download { name: String, target: Address }, Progress { name: String, progress: u64 }, } @@ -62,7 +64,7 @@ fn handle_message( // open/create empty file in both cases. let mut active_file = - open_file(&format!("{}/{}", files_dir.path, &name), true)?; + open_file(&format!("{}/{}", files_dir.path, &name), true, None)?; match target_worker { Some(target_worker) => { @@ -175,7 +177,7 @@ fn init(our: Address) { let start = std::time::Instant::now(); let drive_path = format!("{}/files", our.package_id()); - let files_dir = open_dir(&drive_path, false).unwrap(); + let files_dir = open_dir(&drive_path, false, None).unwrap(); let mut file: Option = None; let mut size: Option = None; diff --git a/src/new/templates/rust/no-ui/file_transfer/{package_name}/Cargo.toml_ b/src/new/templates/rust/no-ui/file_transfer/{package_name}/Cargo.toml_ index fea84232..42fd2654 100644 --- a/src/new/templates/rust/no-ui/file_transfer/{package_name}/Cargo.toml_ +++ b/src/new/templates/rust/no-ui/file_transfer/{package_name}/Cargo.toml_ @@ -10,7 +10,7 @@ kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib.git", ta multipart = "0.18.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "efcc759" } +wit-bindgen = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "21a46c7" } [lib] crate-type = ["cdylib"] diff --git a/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs index 0a3734c5..8bcbefba 100644 --- a/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs +++ b/src/new/templates/rust/no-ui/file_transfer/{package_name}/src/lib.rs @@ -1,7 +1,7 @@ use kinode_process_lib::{ await_message, call_init, our_capabilities, println, spawn, vfs::{create_drive, metadata, open_dir, Directory, FileType}, - Address, Message, OnExit, Request, Response, + Address, OnExit, Request, Response, }; use serde::{Deserialize, Serialize}; @@ -47,7 +47,7 @@ fn ls_files(files_dir: &Directory) -> anyhow::Result> { let files: Vec = entries .iter() .filter_map(|file| match file.file_type { - FileType::File => match metadata(&file.path) { + FileType::File => match metadata(&file.path, None) { Ok(metadata) => Some(FileInfo { name: file.path.clone(), size: metadata.len, @@ -64,7 +64,7 @@ fn ls_files(files_dir: &Directory) -> anyhow::Result> { fn handle_transfer_request( our: &Address, source: &Address, - body: &Vec, + body: &[u8], files_dir: &Directory, ) -> anyhow::Result<()> { let transfer_request = serde_json::from_slice::(body)?; @@ -93,36 +93,33 @@ fn handle_transfer_request( process: our_worker, }; - match source.node == our.node { - true => { - // we want to download a file - let _resp = Request::new() - .body(serde_json::to_vec(&WorkerRequest::Initialize { - name: name.clone(), - target_worker: None, - })?) - .target(&our_worker_address) - .send_and_await_response(5)??; - - // send our initialized worker address to the other node - Request::new() - .body(serde_json::to_vec(&TransferRequest::Download { - name: name.clone(), - target: our_worker_address, - })?) - .target(&target) - .send()?; - } - false => { - // they want to download a file - Request::new() - .body(serde_json::to_vec(&WorkerRequest::Initialize { - name: name.clone(), - target_worker: Some(target), - })?) - .target(&our_worker_address) - .send()?; - } + if source.node == our.node { + // we want to download a file + let _resp = Request::new() + .body(serde_json::to_vec(&WorkerRequest::Initialize { + name: name.clone(), + target_worker: None, + })?) + .target(&our_worker_address) + .send_and_await_response(5)??; + + // send our initialized worker address to the other node + Request::new() + .body(serde_json::to_vec(&TransferRequest::Download { + name: name.clone(), + target: our_worker_address, + })?) + .target(&target) + .send()?; + } else { + // they want to download a file + Request::new() + .body(serde_json::to_vec(&WorkerRequest::Initialize { + name: name.clone(), + target_worker: Some(target), + })?) + .target(&our_worker_address) + .send()?; } } TransferRequest::Progress { name, progress } => { @@ -133,38 +130,9 @@ fn handle_transfer_request( Ok(()) } -fn handle_transfer_response( - source: &Address, - body: &Vec, - _is_http: bool, -) -> anyhow::Result<()> { - let transfer_response = serde_json::from_slice::(body)?; - - match transfer_response { - TransferResponse::ListFiles(files) => { - println!("got files from node: {:?} ,files: {:?}", source, files); - } - _ => {} - } - - Ok(()) -} - fn handle_message(our: &Address, files_dir: &Directory) -> anyhow::Result<()> { let message = await_message()?; - - match message { - Message::Response { - ref source, - ref body, - .. - } => handle_transfer_response(source, body, false), - Message::Request { - ref source, - ref body, - .. - } => handle_transfer_request(&our, source, body, files_dir), - } + handle_transfer_request(our, message.source(), message.body(), files_dir) } call_init!(init); @@ -172,8 +140,8 @@ call_init!(init); fn init(our: Address) { println!("begin"); - let drive_path = create_drive(our.package_id(), "files").unwrap(); - let files_dir = open_dir(&drive_path, false).unwrap(); + let drive_path = create_drive(our.package_id(), "files", None).unwrap(); + let files_dir = open_dir(&drive_path, false, None).unwrap(); loop { match handle_message(&our, &files_dir) {