mirror of
https://github.com/valmojr/armatak.git
synced 2026-06-14 05:23:30 +00:00
[WIP] Working on QR Code generation, already got the local address to be displayed
This commit is contained in:
33
Cargo.lock
generated
33
Cargo.lock
generated
@@ -93,6 +93,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"log4rs",
|
"log4rs",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
|
"qrcode",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -190,12 +191,24 @@ version = "0.3.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytemuck"
|
||||||
|
version = "1.20.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "byteorder-lite"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytes"
|
name = "bytes"
|
||||||
version = "0.4.12"
|
version = "0.4.12"
|
||||||
@@ -751,6 +764,17 @@ dependencies = [
|
|||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "image"
|
||||||
|
version = "0.25.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b"
|
||||||
|
dependencies = [
|
||||||
|
"bytemuck",
|
||||||
|
"byteorder-lite",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "2.6.0"
|
version = "2.6.0"
|
||||||
@@ -1176,6 +1200,15 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "qrcode"
|
||||||
|
version = "0.14.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d68782463e408eb1e668cf6152704bd856c78c5b6417adaee3203d8f4c1fc9ec"
|
||||||
|
dependencies = [
|
||||||
|
"image",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.37"
|
version = "1.0.37"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ lazy_static = "1.5.0"
|
|||||||
log = "0.4.22"
|
log = "0.4.22"
|
||||||
log4rs = "1.3.0"
|
log4rs = "1.3.0"
|
||||||
once_cell = "1.19.0"
|
once_cell = "1.19.0"
|
||||||
|
qrcode = "0.14.1"
|
||||||
regex = "1.10.6"
|
regex = "1.10.6"
|
||||||
reqwest = { version = "0.12.7", features = ["blocking"] }
|
reqwest = { version = "0.12.7", features = ["blocking"] }
|
||||||
serde = { version = "1.0.210", features = ["derive"] }
|
serde = { version = "1.0.210", features = ["derive"] }
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
use std::sync::{Arc, Mutex};
|
|
||||||
use std::sync::mpsc::{self, Sender, Receiver};
|
|
||||||
use std::thread;
|
|
||||||
use log::info;
|
|
||||||
use ws::{listen, Message, Result as WsResult};
|
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
use log::info;
|
||||||
|
use std::net::{IpAddr, UdpSocket};
|
||||||
|
use std::sync::mpsc::{self, Receiver, Sender};
|
||||||
|
use std::sync::{Arc, Mutex};
|
||||||
|
use std::thread;
|
||||||
|
use ws::{listen, Message, Result as WsResult};
|
||||||
|
use qrcode::{render::unicode::{self}, QrCode};
|
||||||
|
|
||||||
use crate::structs::{IntoMessage, LocationPayload};
|
use crate::structs::{IntoMessage, LocationPayload};
|
||||||
|
|
||||||
@@ -25,7 +27,7 @@ impl WsServer {
|
|||||||
let mut running = true;
|
let mut running = true;
|
||||||
|
|
||||||
let ws_thread = thread::spawn(move || {
|
let ws_thread = thread::spawn(move || {
|
||||||
listen("127.0.0.1:3012", |out| {
|
listen("0.0.0.0:4152", |out| {
|
||||||
let clients_inner = Arc::clone(&clients_clone);
|
let clients_inner = Arc::clone(&clients_clone);
|
||||||
{
|
{
|
||||||
let mut clients_guard = clients_inner.lock().unwrap();
|
let mut clients_guard = clients_inner.lock().unwrap();
|
||||||
@@ -36,7 +38,8 @@ impl WsServer {
|
|||||||
info!("Received: {}", msg);
|
info!("Received: {}", msg);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}).unwrap();
|
})
|
||||||
|
.unwrap();
|
||||||
});
|
});
|
||||||
|
|
||||||
while running {
|
while running {
|
||||||
@@ -51,8 +54,8 @@ impl WsServer {
|
|||||||
running = false;
|
running = false;
|
||||||
info!("Stopping WebSocket server.");
|
info!("Stopping WebSocket server.");
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(error) => {
|
||||||
info!("Error receiving command.");
|
info!("Error receiving command: {}", error.to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,3 +121,39 @@ pub fn stop() -> &'static str {
|
|||||||
|
|
||||||
"Stopping WebSocket server"
|
"Stopping WebSocket server"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn local_qrcode() -> Vec<String> {
|
||||||
|
let mut result = Vec::<String>::new();
|
||||||
|
|
||||||
|
fn get_local_ip() -> Result<IpAddr, String> {
|
||||||
|
let socket = UdpSocket::bind("0.0.0.0:0").map_err(|e| e.to_string())?;
|
||||||
|
socket
|
||||||
|
.connect("8.8.8.8:80")
|
||||||
|
.map_err(|e| e.to_string())?;
|
||||||
|
socket
|
||||||
|
.local_addr()
|
||||||
|
.map(|addr| addr.ip())
|
||||||
|
.map_err(|e| e.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn draw_qrcode(data: String) -> String {
|
||||||
|
let code = QrCode::new(data).expect("Failed to generate QR Code");
|
||||||
|
let ascii_qr = code.render::<unicode::Dense1x2>().quiet_zone(false).build();
|
||||||
|
return ascii_qr.replace("\n", ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
let parsed_data = get_local_ip();
|
||||||
|
|
||||||
|
match parsed_data {
|
||||||
|
Ok(ip) => {
|
||||||
|
result.push(draw_qrcode(ip.to_string()));
|
||||||
|
result.push(ip.to_string())
|
||||||
|
},
|
||||||
|
Err(_) => {
|
||||||
|
result.push("not provided".to_string());
|
||||||
|
result.push("not provided".to_string());
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ pub fn init() -> Extension {
|
|||||||
Extension::build()
|
Extension::build()
|
||||||
.command("start", commands::start)
|
.command("start", commands::start)
|
||||||
.command("stop", commands::stop)
|
.command("stop", commands::stop)
|
||||||
|
.command("local_ip", commands::local_qrcode)
|
||||||
.command("message", commands::message)
|
.command("message", commands::message)
|
||||||
.command("location", commands::location)
|
.command("location", commands::location)
|
||||||
.finish()
|
.finish()
|
||||||
|
|||||||
Reference in New Issue
Block a user