mirror of
https://github.com/hinto-janai/gupax.git
synced 2025-01-10 20:14:30 +00:00
helper: add functions for p2pool/xmrig UI -> command arguments
This commit is contained in:
parent
f33207b503
commit
0a8deee359
8 changed files with 151 additions and 32 deletions
22
Cargo.lock
generated
22
Cargo.lock
generated
|
@ -491,7 +491,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5bcf530afb40e45e14440701e5e996d7fd139e84a912a4d83a8d6a0fb3e58663"
|
checksum = "5bcf530afb40e45e14440701e5e996d7fd139e84a912a4d83a8d6a0fb3e58663"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"nix 0.25.0",
|
"nix 0.25.1",
|
||||||
"slotmap",
|
"slotmap",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"vec_map",
|
"vec_map",
|
||||||
|
@ -2143,9 +2143,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.137"
|
version = "0.2.138"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libloading"
|
name = "libloading"
|
||||||
|
@ -2431,9 +2431,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nix"
|
name = "nix"
|
||||||
version = "0.24.2"
|
version = "0.24.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
|
checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
@ -2443,9 +2443,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nix"
|
name = "nix"
|
||||||
version = "0.25.0"
|
version = "0.25.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb"
|
checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
@ -3584,7 +3584,7 @@ dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
"memmap2",
|
"memmap2",
|
||||||
"nix 0.24.2",
|
"nix 0.24.3",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
"wayland-client",
|
"wayland-client",
|
||||||
"wayland-cursor",
|
"wayland-cursor",
|
||||||
|
@ -4781,7 +4781,7 @@ dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"downcast-rs",
|
"downcast-rs",
|
||||||
"libc",
|
"libc",
|
||||||
"nix 0.24.2",
|
"nix 0.24.3",
|
||||||
"scoped-tls",
|
"scoped-tls",
|
||||||
"wayland-commons",
|
"wayland-commons",
|
||||||
"wayland-scanner",
|
"wayland-scanner",
|
||||||
|
@ -4794,7 +4794,7 @@ version = "0.29.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
|
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nix 0.24.2",
|
"nix 0.24.3",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"wayland-sys",
|
"wayland-sys",
|
||||||
|
@ -4806,7 +4806,7 @@ version = "0.29.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
|
checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nix 0.24.2",
|
"nix 0.24.3",
|
||||||
"wayland-client",
|
"wayland-client",
|
||||||
"xcursor",
|
"xcursor",
|
||||||
]
|
]
|
||||||
|
|
|
@ -113,6 +113,7 @@ https://user-images.githubusercontent.com/101352116/194763334-d8e936c9-a71e-474e
|
||||||
* A Monero node/wallet
|
* A Monero node/wallet
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
Windows/Linux:
|
||||||
```
|
```
|
||||||
cargo build --release
|
cargo build --release
|
||||||
```
|
```
|
||||||
|
@ -120,5 +121,8 @@ On macOS, if you want the binary to have an icon in `Finder`, you must install [
|
||||||
```
|
```
|
||||||
cargo bundle --release
|
cargo bundle --release
|
||||||
```
|
```
|
||||||
|
This bundles Gupax into a `Gupax.app`, the way it comes in the pre-built tars for macOS.
|
||||||
|
|
||||||
The `build.rs` file in the repo root sets the icon in `File Explorer` for Windows. The taskbar icon & App frame icon (for all OS's) get set at runtime using pre-compiled bytes in [`src/constants.rs`](https://github.com/hinto-janaiyo/gupax/blob/main/src/constants.rs) from [`images`](https://github.com/hinto-janaiyo/gupax/blob/main/images).
|
The `build.rs` file in the repo root sets the icon in `File Explorer` for Windows. The taskbar icon & App frame icon (for all OS's) get set at runtime using pre-compiled bytes in [`src/constants.rs`](https://github.com/hinto-janaiyo/gupax/blob/main/src/constants.rs) from [`images`](https://github.com/hinto-janaiyo/gupax/blob/main/images).
|
||||||
|
|
||||||
|
The `--release` profile is set to prefer code performance & small binary sizes over compilation speed (see [`Cargo.toml`](https://github.com/hinto-janaiyo/gupax/blob/main/Cargo.toml)). Gupax itself (with all dependencies already built) takes around 1m30s to build (vs 10s on a normal `--release`) with a Ryzen 5950x.
|
||||||
|
|
|
@ -113,7 +113,7 @@ pub const P2POOL_AUTO_SELECT: &str = "Automatically select the fastest community
|
||||||
pub const P2POOL_SELECT_FASTEST: &str = "Select the fastest community Monero node";
|
pub const P2POOL_SELECT_FASTEST: &str = "Select the fastest community Monero node";
|
||||||
pub const P2POOL_PING: &str = "Ping the built-in community Monero nodes";
|
pub const P2POOL_PING: &str = "Ping the built-in community Monero nodes";
|
||||||
pub const P2POOL_ADDRESS: &str = "You must use a primary Monero address to mine on P2Pool (starts with a 4). It is highly recommended to create a new wallet for P2Pool mining; wallet addresses are public on P2Pool!";
|
pub const P2POOL_ADDRESS: &str = "You must use a primary Monero address to mine on P2Pool (starts with a 4). It is highly recommended to create a new wallet for P2Pool mining; wallet addresses are public on P2Pool!";
|
||||||
pub const P2POOL_COMMAND: &str = "Start P2Pool with these arguments and override all below settings; If the [--data-api] flag is not given, Gupax will append it to the arguments automatically so that the [Status] tab can work";
|
pub const P2POOL_ARGUMENTS: &str = "Start P2Pool with these arguments and override all below settings; If the [--data-api] & [--local-api] flag is not given, Gupax will append it to the arguments automatically so that the [Status] tab can work";
|
||||||
pub const P2POOL_SIMPLE: &str =
|
pub const P2POOL_SIMPLE: &str =
|
||||||
r#"Use simple P2Pool settings:
|
r#"Use simple P2Pool settings:
|
||||||
- Remote community Monero node
|
- Remote community Monero node
|
||||||
|
@ -151,7 +151,7 @@ r#"Use advanced XMRig settings:
|
||||||
- TLS setting
|
- TLS setting
|
||||||
- Keepalive setting
|
- Keepalive setting
|
||||||
- Custom HTTP API IP/Port"#;
|
- Custom HTTP API IP/Port"#;
|
||||||
pub const XMRIG_CONFIG: &str = "Start XMRig with this config file and override all below settings; If the [http-api] options are not set, the [Status] tab will not properly show XMRig stats. If they are set, Gupax will detect which automatically IP/Port you are using";
|
pub const XMRIG_ARGUMENTS: &str = "Start XMRig with these arguments and override all below settings; If the [http-api] options are not set, Gupax will append it to the arguments automatically so that the [Status] tab can work";
|
||||||
pub const XMRIG_ADDRESS: &str = "Specify which Monero address to send payouts to; Must be a valid primary address (starts with 4)";
|
pub const XMRIG_ADDRESS: &str = "Specify which Monero address to send payouts to; Must be a valid primary address (starts with 4)";
|
||||||
pub const XMRIG_NAME: &str = "Add a unique name to identify this pool; Only [A-Za-z0-9-_] and spaces allowed; Max length = 30 characters";
|
pub const XMRIG_NAME: &str = "Add a unique name to identify this pool; Only [A-Za-z0-9-_] and spaces allowed; Max length = 30 characters";
|
||||||
pub const XMRIG_IP: &str = "Specify the pool IP to connect to with XMRig; It must be a valid IPv4 address or a valid domain name; Max length = 255 characters";
|
pub const XMRIG_IP: &str = "Specify the pool IP to connect to with XMRig; It must be a valid IPv4 address or a valid domain name; Max length = 255 characters";
|
||||||
|
|
16
src/disk.rs
16
src/disk.rs
|
@ -112,7 +112,7 @@ pub fn read_to_string(file: File, path: &PathBuf) -> Result<String, TomlError> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write str to console with [info!] surrounded by "---"
|
// Write str to console with [info!] surrounded by "---"
|
||||||
pub fn print_toml(toml: &str) {
|
pub fn print_dash(toml: &str) {
|
||||||
info!("{}", HORIZONTAL);
|
info!("{}", HORIZONTAL);
|
||||||
for i in toml.lines() { info!("{}", i); }
|
for i in toml.lines() { info!("{}", i); }
|
||||||
info!("{}", HORIZONTAL);
|
info!("{}", HORIZONTAL);
|
||||||
|
@ -165,7 +165,7 @@ impl State {
|
||||||
log_level: 3,
|
log_level: 3,
|
||||||
node: crate::NodeEnum::C3pool,
|
node: crate::NodeEnum::C3pool,
|
||||||
arguments: String::new(),
|
arguments: String::new(),
|
||||||
address: String::with_capacity(95),
|
address: String::with_capacity(96),
|
||||||
name: "Local Monero Node".to_string(),
|
name: "Local Monero Node".to_string(),
|
||||||
ip: "localhost".to_string(),
|
ip: "localhost".to_string(),
|
||||||
rpc: "18081".to_string(),
|
rpc: "18081".to_string(),
|
||||||
|
@ -179,8 +179,9 @@ impl State {
|
||||||
xmrig: Xmrig {
|
xmrig: Xmrig {
|
||||||
simple: true,
|
simple: true,
|
||||||
pause: 0,
|
pause: 0,
|
||||||
config: String::with_capacity(100),
|
simple_rig: String::with_capacity(30),
|
||||||
address: String::with_capacity(95),
|
arguments: String::with_capacity(300),
|
||||||
|
address: String::with_capacity(96),
|
||||||
name: "Local P2Pool".to_string(),
|
name: "Local P2Pool".to_string(),
|
||||||
rig: "Gupax".to_string(),
|
rig: "Gupax".to_string(),
|
||||||
ip: "localhost".to_string(),
|
ip: "localhost".to_string(),
|
||||||
|
@ -210,7 +211,7 @@ impl State {
|
||||||
match toml::de::from_str(string) {
|
match toml::de::from_str(string) {
|
||||||
Ok(state) => {
|
Ok(state) => {
|
||||||
info!("State | Parse ... OK");
|
info!("State | Parse ... OK");
|
||||||
print_toml(string);
|
print_dash(string);
|
||||||
Ok(state)
|
Ok(state)
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
@ -272,7 +273,7 @@ impl State {
|
||||||
let string = match toml::ser::to_string(&self) {
|
let string = match toml::ser::to_string(&self) {
|
||||||
Ok(string) => {
|
Ok(string) => {
|
||||||
info!("State | Parse ... OK");
|
info!("State | Parse ... OK");
|
||||||
print_toml(&string);
|
print_dash(&string);
|
||||||
string
|
string
|
||||||
},
|
},
|
||||||
Err(err) => { error!("State | Couldn't parse TOML into string ... FAIL"); return Err(TomlError::Serialize(err)) },
|
Err(err) => { error!("State | Couldn't parse TOML into string ... FAIL"); return Err(TomlError::Serialize(err)) },
|
||||||
|
@ -615,7 +616,8 @@ pub struct P2pool {
|
||||||
pub struct Xmrig {
|
pub struct Xmrig {
|
||||||
pub simple: bool,
|
pub simple: bool,
|
||||||
pub pause: u8,
|
pub pause: u8,
|
||||||
pub config: String,
|
pub simple_rig: String,
|
||||||
|
pub arguments: String,
|
||||||
pub tls: bool,
|
pub tls: bool,
|
||||||
pub keepalive: bool,
|
pub keepalive: bool,
|
||||||
pub max_threads: usize,
|
pub max_threads: usize,
|
||||||
|
|
115
src/helper.rs
115
src/helper.rs
|
@ -323,6 +323,7 @@ impl Hashrate {
|
||||||
use tokio::io::{BufReader,AsyncBufReadExt};
|
use tokio::io::{BufReader,AsyncBufReadExt};
|
||||||
|
|
||||||
impl Helper {
|
impl Helper {
|
||||||
|
//---------------------------------------------------------------------------------------------------- General Functions
|
||||||
pub fn new(instant: std::time::Instant) -> Self {
|
pub fn new(instant: std::time::Instant) -> Self {
|
||||||
Self {
|
Self {
|
||||||
instant,
|
instant,
|
||||||
|
@ -336,12 +337,6 @@ impl Helper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Intermediate function that spawns the helper thread.
|
|
||||||
pub fn spawn_helper(helper: &Arc<Mutex<Self>>) {
|
|
||||||
let helper = Arc::clone(helper);
|
|
||||||
thread::spawn(move || { Self::helper(helper); });
|
|
||||||
}
|
|
||||||
|
|
||||||
// The tokio runtime that blocks while async reading both STDOUT/STDERR
|
// The tokio runtime that blocks while async reading both STDOUT/STDERR
|
||||||
// Cheaper than spawning 2 OS threads just to read 2 pipes (...right? :D)
|
// Cheaper than spawning 2 OS threads just to read 2 pipes (...right? :D)
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
@ -364,7 +359,113 @@ impl Helper {
|
||||||
tokio::join![stdout_job, stderr_job];
|
tokio::join![stdout_job, stderr_job];
|
||||||
}
|
}
|
||||||
|
|
||||||
// The "helper" loop
|
//---------------------------------------------------------------------------------------------------- P2Pool specific
|
||||||
|
// Intermediate function that parses the arguments, and spawns the P2Pool watchdog thread.
|
||||||
|
pub fn spawn_p2pool(state: &crate::disk::P2pool, api_path: &std::path::Path) {
|
||||||
|
let mut args = Vec::with_capacity(500);
|
||||||
|
// [Simple]
|
||||||
|
if state.simple {
|
||||||
|
// Build the p2pool argument
|
||||||
|
let (ip, rpc, zmq) = crate::node::enum_to_ip_rpc_zmq_tuple(state.node); // Get: (IP, RPC, ZMQ)
|
||||||
|
args.push(format!("--wallet {}", state.address)); // Wallet Address
|
||||||
|
args.push(format!("--host {}", ip)); // IP Address
|
||||||
|
args.push(format!("--rpc-port {}", rpc)); // RPC Port
|
||||||
|
args.push(format!("--zmq-port {}", zmq)); // ZMQ Port
|
||||||
|
args.push(format!("--data-api {}", api_path.display())); // API Path
|
||||||
|
args.push("--local-api".to_string()); // Enable API
|
||||||
|
args.push("--no-color".to_string()); // Remove color escape sequences, Gupax terminal can't parse it :(
|
||||||
|
args.push("--mini".to_string()); // P2Pool Mini
|
||||||
|
|
||||||
|
// [Advanced]
|
||||||
|
} else {
|
||||||
|
// Overriding command arguments
|
||||||
|
if !state.arguments.is_empty() {
|
||||||
|
for arg in state.arguments.split_whitespace() {
|
||||||
|
args.push(arg.to_string());
|
||||||
|
}
|
||||||
|
// Else, build the argument
|
||||||
|
} else {
|
||||||
|
args.push(state.address.clone()); // Wallet
|
||||||
|
args.push(state.selected_ip.clone()); // IP
|
||||||
|
args.push(state.selected_rpc.clone()); // RPC
|
||||||
|
args.push(state.selected_zmq.clone()); // ZMQ
|
||||||
|
args.push("--local-api".to_string()); // Enable API
|
||||||
|
args.push("--no-color".to_string()); // Remove color escape sequences
|
||||||
|
if state.mini { args.push("--mini".to_string()); }; // Mini
|
||||||
|
args.push(format!("--loglevel {}", state.log_level)); // Log Level
|
||||||
|
args.push(format!("--out-peers {}", state.out_peers)); // Out Peers
|
||||||
|
args.push(format!("--in-peers {}", state.in_peers)); // In Peers
|
||||||
|
args.push(format!("--data-api {}", api_path.display())); // API Path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print arguments to console
|
||||||
|
crate::disk::print_dash(&format!("P2Pool | Launch arguments ... {:#?}", args));
|
||||||
|
|
||||||
|
// Spawn watchdog thread
|
||||||
|
thread::spawn(move || {
|
||||||
|
Self::spawn_p2pool_watchdog(args);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// The actual P2Pool watchdog tokio runtime.
|
||||||
|
#[tokio::main]
|
||||||
|
pub async fn spawn_p2pool_watchdog(args: Vec<String>) {
|
||||||
|
// 1. Create command
|
||||||
|
// 2. Spawn STDOUT/STDERR thread
|
||||||
|
// 3. Loop forever as watchdog until process dies
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- XMRig specific
|
||||||
|
// Intermediate function that parses the arguments, and spawns the XMRig watchdog thread.
|
||||||
|
pub fn spawn_xmrig(state: &crate::disk::Xmrig, api_path: &std::path::Path) {
|
||||||
|
let mut args = Vec::with_capacity(500);
|
||||||
|
if state.simple {
|
||||||
|
let rig_name = if state.simple_rig.is_empty() { GUPAX_VERSION.to_string() } else { state.simple_rig.clone() }; // Rig name
|
||||||
|
args.push(format!("--threads {}", state.current_threads)); // Threads
|
||||||
|
args.push(format!("--user {}", state.simple_rig)); // Rig name
|
||||||
|
args.push(format!("--url 127.0.0.1:3333")); // Local P2Pool (the default)
|
||||||
|
args.push("--no-color".to_string()); // No color escape codes
|
||||||
|
if state.pause != 0 { args.push(format!("--pause-on-active {}", state.pause)); } // Pause on active
|
||||||
|
} else {
|
||||||
|
if !state.arguments.is_empty() {
|
||||||
|
for arg in state.arguments.split_whitespace() {
|
||||||
|
args.push(arg.to_string());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
args.push(format!("--user {}", state.address.clone())); // Wallet
|
||||||
|
args.push(format!("--threads {}", state.current_threads)); // Threads
|
||||||
|
args.push(format!("--rig-id {}", state.selected_rig)); // Rig ID
|
||||||
|
args.push(format!("--url {}:{}", state.selected_ip.clone(), state.selected_port.clone())); // IP/Port
|
||||||
|
args.push(format!("--http-host {}", state.api_ip).to_string()); // HTTP API IP
|
||||||
|
args.push(format!("--http-port {}", state.api_port).to_string()); // HTTP API Port
|
||||||
|
args.push("--no-color".to_string()); // No color escape codes
|
||||||
|
if state.tls { args.push("--tls".to_string()); } // TLS
|
||||||
|
if state.keepalive { args.push("--keepalive".to_string()); } // Keepalive
|
||||||
|
if state.pause != 0 { args.push(format!("--pause-on-active {}", state.pause)); } // Pause on active
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Print arguments to console
|
||||||
|
crate::disk::print_dash(&format!("XMRig | Launch arguments ... {:#?}", args));
|
||||||
|
|
||||||
|
// Spawn watchdog thread
|
||||||
|
thread::spawn(move || {
|
||||||
|
Self::spawn_xmrig_watchdog(args);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// The actual XMRig watchdog tokio runtime.
|
||||||
|
#[tokio::main]
|
||||||
|
pub async fn spawn_xmrig_watchdog(args: Vec<String>) {
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- The "helper"
|
||||||
|
// Intermediate function that spawns the helper thread.
|
||||||
|
pub fn spawn_helper(helper: &Arc<Mutex<Self>>) {
|
||||||
|
let helper = Arc::clone(helper);
|
||||||
|
thread::spawn(move || { Self::helper(helper); });
|
||||||
|
}
|
||||||
|
|
||||||
// [helper] = Actual Arc
|
// [helper] = Actual Arc
|
||||||
// [h] = Temporary lock that gets dropped
|
// [h] = Temporary lock that gets dropped
|
||||||
// [jobs] = Vector of async jobs ready to go
|
// [jobs] = Vector of async jobs ready to go
|
||||||
|
|
12
src/node.rs
12
src/node.rs
|
@ -143,6 +143,18 @@ pub fn enum_to_ip(node: NodeEnum) -> &'static str {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns a tuple of (IP, RPC_PORT, ZMQ_PORT)
|
||||||
|
pub fn enum_to_ip_rpc_zmq_tuple(node: NodeEnum) -> (&'static str, &'static str, &'static str) {
|
||||||
|
// [.unwrap()] should be safe, IP:PORTs are constants after all.
|
||||||
|
let (ip, rpc) = enum_to_ip(node).rsplit_once(':').unwrap();
|
||||||
|
// Get ZMQ, grr... plowsof is the only 18084 zmq person.
|
||||||
|
let zmq = match node {
|
||||||
|
Plowsof1|Plowsof2 => "18084",
|
||||||
|
_ => "18083",
|
||||||
|
};
|
||||||
|
(ip, rpc, zmq)
|
||||||
|
}
|
||||||
|
|
||||||
// 5000 = 4 max length
|
// 5000 = 4 max length
|
||||||
pub fn format_ms(ms: u128) -> String {
|
pub fn format_ms(ms: u128) -> String {
|
||||||
match ms.to_string().len() {
|
match ms.to_string().len() {
|
||||||
|
|
|
@ -66,7 +66,7 @@ egui::Frame::none()
|
||||||
let width = (width/10.0) - SPACE;
|
let width = (width/10.0) - SPACE;
|
||||||
ui.style_mut().override_text_style = Some(Monospace);
|
ui.style_mut().override_text_style = Some(Monospace);
|
||||||
ui.add_sized([width, text_edit], Label::new("Command arguments:"));
|
ui.add_sized([width, text_edit], Label::new("Command arguments:"));
|
||||||
ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--wallet <...> --host <...>"#)).on_hover_text(P2POOL_COMMAND);
|
ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--wallet <...> --host <...>"#)).on_hover_text(P2POOL_ARGUMENTS);
|
||||||
self.arguments.truncate(1024);
|
self.arguments.truncate(1024);
|
||||||
})});
|
})});
|
||||||
ui.set_enabled(self.arguments.is_empty());
|
ui.set_enabled(self.arguments.is_empty());
|
||||||
|
|
|
@ -45,11 +45,11 @@ impl Xmrig {
|
||||||
ui.group(|ui| { ui.horizontal(|ui| {
|
ui.group(|ui| { ui.horizontal(|ui| {
|
||||||
let width = (width/10.0) - SPACE;
|
let width = (width/10.0) - SPACE;
|
||||||
ui.style_mut().override_text_style = Some(Monospace);
|
ui.style_mut().override_text_style = Some(Monospace);
|
||||||
ui.add_sized([width, text_edit], Label::new("Config file:"));
|
ui.add_sized([width, text_edit], Label::new("Command arguments:"));
|
||||||
ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.config), r#"...config.json"#)).on_hover_text(XMRIG_CONFIG);
|
ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--url <...> --user <...> --config <...>"#)).on_hover_text(XMRIG_ARGUMENTS);
|
||||||
self.config.truncate(1024);
|
self.arguments.truncate(1024);
|
||||||
})});
|
})});
|
||||||
ui.set_enabled(self.config.is_empty());
|
ui.set_enabled(self.arguments.is_empty());
|
||||||
//---------------------------------------------------------------------------------------------------- Address
|
//---------------------------------------------------------------------------------------------------- Address
|
||||||
ui.group(|ui| {
|
ui.group(|ui| {
|
||||||
let width = width - SPACE;
|
let width = width - SPACE;
|
||||||
|
|
Loading…
Reference in a new issue