bless
This commit is contained in:
parent
79bc2958ef
commit
e5ffe31ca7
196
native_client/Cargo.lock
generated
196
native_client/Cargo.lock
generated
@ -28,6 +28,15 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler2"
|
||||
version = "2.0.1"
|
||||
@ -238,6 +247,21 @@ version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.75"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base16ct"
|
||||
version = "0.2.0"
|
||||
@ -1361,6 +1385,12 @@ dependencies = [
|
||||
"wasi 0.14.5+wasi-0.2.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.31.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
||||
|
||||
[[package]]
|
||||
name = "gl_generator"
|
||||
version = "0.14.0"
|
||||
@ -1774,6 +1804,17 @@ dependencies = [
|
||||
"unic-langid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "io-uring"
|
||||
version = "0.7.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
|
||||
dependencies = [
|
||||
"bitflags 2.9.4",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "io_tee"
|
||||
version = "0.1.1"
|
||||
@ -1993,6 +2034,17 @@ dependencies = [
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi 0.11.1+wasi-snapshot-preview1",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "moxcms"
|
||||
version = "0.7.5"
|
||||
@ -2034,10 +2086,13 @@ dependencies = [
|
||||
"bincode",
|
||||
"eframe",
|
||||
"egui",
|
||||
"futures-util",
|
||||
"hex",
|
||||
"serde",
|
||||
"shared",
|
||||
"tungstenite",
|
||||
"thiserror 2.0.16",
|
||||
"tokio",
|
||||
"tokio-tungstenite",
|
||||
"vlogger",
|
||||
"watchlet",
|
||||
]
|
||||
@ -2391,6 +2446,15 @@ dependencies = [
|
||||
"objc2-foundation 0.2.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.36.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
@ -2774,20 +2838,6 @@ dependencies = [
|
||||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ring"
|
||||
version = "0.17.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"getrandom 0.2.16",
|
||||
"libc",
|
||||
"untrusted",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ron"
|
||||
version = "0.10.1"
|
||||
@ -2856,6 +2906,12 @@ dependencies = [
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "1.1.0"
|
||||
@ -2903,36 +2959,6 @@ dependencies = [
|
||||
"windows-sys 0.61.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.23.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"rustls-pki-types",
|
||||
"rustls-webpki",
|
||||
"subtle",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls-pki-types"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
|
||||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.103.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.22"
|
||||
@ -3115,6 +3141,15 @@ version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signature"
|
||||
version = "2.2.0"
|
||||
@ -3197,6 +3232,16 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spki"
|
||||
version = "0.7.3"
|
||||
@ -3348,6 +3393,49 @@ dependencies = [
|
||||
"zerovec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.47.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
"io-uring",
|
||||
"libc",
|
||||
"mio",
|
||||
"parking_lot",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"slab",
|
||||
"socket2",
|
||||
"tokio-macros",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-tungstenite"
|
||||
version = "0.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1"
|
||||
dependencies = [
|
||||
"futures-util",
|
||||
"log",
|
||||
"tokio",
|
||||
"tungstenite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.11"
|
||||
@ -3408,12 +3496,9 @@ dependencies = [
|
||||
"httparse",
|
||||
"log",
|
||||
"rand 0.9.2",
|
||||
"rustls",
|
||||
"rustls-pki-types",
|
||||
"sha1",
|
||||
"thiserror 2.0.16",
|
||||
"utf-8",
|
||||
"webpki-roots",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3478,12 +3563,6 @@ dependencies = [
|
||||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "untrusted"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
||||
|
||||
[[package]]
|
||||
name = "unty"
|
||||
version = "0.0.4"
|
||||
@ -3810,15 +3889,6 @@ dependencies = [
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webpki-roots"
|
||||
version = "0.26.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e"
|
||||
dependencies = [
|
||||
"rustls-pki-types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "weezl"
|
||||
version = "0.1.10"
|
||||
|
||||
@ -17,6 +17,9 @@ serde = { version = "1.0.219", features = ["derive"] }
|
||||
watchlet = { path = "../watchlet" }
|
||||
hex = "0.4.3"
|
||||
vlogger = { path = "../vlogger" }
|
||||
tungstenite = { version = "0.27.0", features = ["rustls-tls-webpki-roots"] }
|
||||
bincode = { version = "2.0.1", features = ["serde"] }
|
||||
shared = { path = "../shared" }
|
||||
tokio = { version = "1.47.1", features = ["full", "rt-multi-thread"] }
|
||||
tokio-tungstenite = "0.27.0"
|
||||
thiserror = "2.0.16"
|
||||
futures-util = "0.3.31"
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
use std::sync::mpsc::{Receiver, RecvTimeoutError, Sender};
|
||||
use std::time::Duration;
|
||||
use shared::WsClientRequest;
|
||||
use tokio::sync::mpsc::{Receiver, Sender};
|
||||
|
||||
use vlogger::*;
|
||||
use watchlet::{FileStorage, Wallet, WalletManager};
|
||||
|
||||
use crate::messages::client::ClientMessage;
|
||||
use crate::messages::error::SystemError;
|
||||
use crate::messages::frontend::FrontendMessage;
|
||||
use crate::messages::backend::BackendMessage;
|
||||
@ -20,14 +21,16 @@ pub struct WalletState {
|
||||
pub struct WalletService {
|
||||
exit: bool,
|
||||
receiver: Receiver<BackendMessage>,
|
||||
sender: Sender<FrontendMessage>,
|
||||
fr_sender: Sender<FrontendMessage>,
|
||||
ws_sender: Sender<ClientMessage>,
|
||||
wallet_manager: WalletManager<FileStorage>,
|
||||
}
|
||||
|
||||
impl WalletService {
|
||||
pub fn new(
|
||||
receiver: Receiver<BackendMessage>,
|
||||
sender: Sender<FrontendMessage>,
|
||||
fr_sender: Sender<FrontendMessage>,
|
||||
ws_sender: Sender<ClientMessage>,
|
||||
) -> Self {
|
||||
let wallet_path = path::PathBuf::from(format!("{}/wallet/wallet.age", DATA_DIR_PATH));
|
||||
let storage = FileStorage::new(wallet_path.into());
|
||||
@ -36,7 +39,8 @@ impl WalletService {
|
||||
Self {
|
||||
exit: false,
|
||||
receiver,
|
||||
sender,
|
||||
fr_sender,
|
||||
ws_sender,
|
||||
wallet_manager
|
||||
}
|
||||
}
|
||||
@ -59,7 +63,7 @@ impl WalletService {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_cmd(&mut self, cmd: BackendMessage) {
|
||||
pub async fn handle_cmd(&mut self, cmd: BackendMessage) {
|
||||
log!(DEBUG, "Received Command: {:#?}", cmd);
|
||||
match cmd {
|
||||
BackendMessage::StateRequest => {
|
||||
@ -67,7 +71,7 @@ impl WalletService {
|
||||
Some(state) => FrontendMessage::StateResponse(state),
|
||||
None => FrontendMessage::Error(SystemError::WalletNotLoaded),
|
||||
};
|
||||
if let Err(e) = self.sender.send(msg) {
|
||||
if let Err(e) = self.sender.send(msg).await {
|
||||
log!(ERROR, "Failed to send FrontendMessage: {e}");
|
||||
}
|
||||
},
|
||||
@ -77,16 +81,10 @@ impl WalletService {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run(&mut self) {
|
||||
pub async fn run(&mut self) {
|
||||
while !self.exit {
|
||||
match self.receiver.recv_timeout(Duration::from_secs(30)) {
|
||||
Ok(cmd) => self.handle_cmd(cmd),
|
||||
Err(e) => match e {
|
||||
RecvTimeoutError::Timeout => {
|
||||
self.update()
|
||||
},
|
||||
RecvTimeoutError::Disconnected => {},
|
||||
}
|
||||
if let Some(cmd) = self.receiver.recv().await {
|
||||
self.handle_cmd(cmd).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,12 +1,47 @@
|
||||
use shared::WsClientRequest;
|
||||
use tokio::sync::mpsc::{Receiver, Sender};
|
||||
use futures_util::{SinkExt, StreamExt};
|
||||
use tokio_tungstenite::tungstenite::Message;
|
||||
|
||||
pub fn run_client() {
|
||||
let (mut stream, _response) = tungstenite::connect("ws://localhost:9001").unwrap();
|
||||
use shared::{ WsClientRequest, WsClientResponse };
|
||||
|
||||
use crate::messages::{backend::BackendMessage, client::ClientMessage };
|
||||
use crate::messages::error::WsClientError;
|
||||
|
||||
pub async fn run_client(tx: Sender<BackendMessage>, mut rx: Receiver<ClientMessage>) -> Result<(), WsClientError> {
|
||||
let (mut socket, _response) = tokio_tungstenite::connect_async("ws://localhost:9001").await?;
|
||||
|
||||
let msg = bincode::encode_to_vec(WsClientRequest::Ping, bincode::config::standard()).unwrap();
|
||||
stream.send(msg.into()).unwrap();
|
||||
socket.send(msg.into());
|
||||
|
||||
let bincode_config = bincode::config::standard();
|
||||
|
||||
loop {
|
||||
println!("{:#?}", stream.read())
|
||||
tokio::select! {
|
||||
cl_msg_res = rx.recv() => {
|
||||
if let Some(cmd) = cl_msg_res {
|
||||
}
|
||||
}
|
||||
ws_msg_res = socket.next() => {
|
||||
if let Some(cmd) = ws_msg_res {
|
||||
match cmd {
|
||||
Ok(msg) => {
|
||||
match msg {
|
||||
Message::Text(b) => {
|
||||
|
||||
}
|
||||
Message::Binary(mes_bytes) => {
|
||||
let (msg, _) = bincode::decode_from_slice::<WsClientResponse, _>(&mes_bytes, bincode_config)?;
|
||||
match msg {
|
||||
WsClientResponse::Pong => {}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
},
|
||||
Err(e) => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,7 +22,6 @@ const TX_FIELDS: &[&str] = &[
|
||||
"Amount:",
|
||||
];
|
||||
|
||||
|
||||
impl DisplayPage for TransactionPage {
|
||||
fn show(&mut self, tx: &Sender<BackendMessage>, ctx: &egui::Context) {
|
||||
ctx.input(|input| {
|
||||
|
||||
@ -24,6 +24,7 @@ pub mod messages {
|
||||
pub mod frontend;
|
||||
pub mod backend;
|
||||
pub mod error;
|
||||
pub mod client;
|
||||
}
|
||||
|
||||
pub mod backend {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
#![warn(clippy::all, rust_2018_idioms)]
|
||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||
|
||||
use native_client::{backend::{wallet::WalletService, ws_client::run_client}, frontend, messages::{backend::BackendMessage, frontend::FrontendMessage}};
|
||||
use std::sync::mpsc::{self, Receiver, Sender};
|
||||
use native_client::{backend::{wallet::WalletService, ws_client}, frontend, messages::{backend::BackendMessage, client::ClientMessage, frontend::FrontendMessage}};
|
||||
use tokio::sync::mpsc::{self, Receiver, Sender};
|
||||
|
||||
fn dispatch_frontend(
|
||||
receiver: Receiver<FrontendMessage>,
|
||||
@ -14,6 +14,7 @@ fn dispatch_frontend(
|
||||
.with_min_inner_size([300.0, 220.0]),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
eframe::run_native(
|
||||
"eframe template",
|
||||
native_options,
|
||||
@ -21,17 +22,23 @@ fn dispatch_frontend(
|
||||
)
|
||||
}
|
||||
|
||||
fn main() -> Result<(), std::io::Error> {
|
||||
let (front_tx, front_rx) = mpsc::channel::<FrontendMessage>();
|
||||
let (back_tx, back_rx) = mpsc::channel::<BackendMessage>();
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), std::io::Error> {
|
||||
let (front_tx, front_rx) = mpsc::channel::<FrontendMessage>(100);
|
||||
let (back_tx, back_rx) = mpsc::channel::<BackendMessage>(100);
|
||||
let (client_tx, client_rx) = mpsc::channel::<ClientMessage>(100);
|
||||
|
||||
|
||||
let backend_handle = std::thread::spawn( || {
|
||||
let backend_handle = std::thread::spawn(|| {
|
||||
let mut wallet_service = WalletService::new(back_rx, front_tx);
|
||||
wallet_service.run();
|
||||
});
|
||||
|
||||
let _ = dispatch_frontend(front_rx, back_tx);
|
||||
let ws_client_handle = std::thread::spawn({
|
||||
let tx = back_tx.clone();
|
||||
|| ws_client::run_client(tx, client_rx)
|
||||
});
|
||||
|
||||
let _res = dispatch_frontend(front_rx, back_tx);
|
||||
|
||||
backend_handle.join().unwrap();
|
||||
Ok(())
|
||||
|
||||
3
native_client/src/messages/client.rs
Normal file
3
native_client/src/messages/client.rs
Normal file
@ -0,0 +1,3 @@
|
||||
pub enum ClientMessage {
|
||||
Shutdown,
|
||||
}
|
||||
@ -1,4 +1,16 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SystemError {
|
||||
WalletNotLoaded
|
||||
}
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum WsClientError {
|
||||
#[error("WS Error: {0}")]
|
||||
WsError(#[from] tokio_tungstenite::tungstenite::Error),
|
||||
#[error("Decode Error: {0}")]
|
||||
DecodeError(#[from] bincode::error::DecodeError),
|
||||
#[error("Encode Error: {0}")]
|
||||
EncodeError(#[from] bincode::error::EncodeError),
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user