diff options
Diffstat (limited to 'src/services/ping.rs')
-rw-r--r-- | src/services/ping.rs | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/services/ping.rs b/src/services/ping.rs index 6e710ec..ff328a5 100644 --- a/src/services/ping.rs +++ b/src/services/ping.rs | |||
@@ -1,8 +1,9 @@ | |||
1 | use std::borrow::Cow; | ||
1 | use std::sync::Arc; | 2 | use std::sync::Arc; |
2 | 3 | ||
3 | use axum::{extract::{WebSocketUpgrade, ws::WebSocket, State}, response::Response}; | 4 | use axum::{extract::{WebSocketUpgrade, ws::WebSocket, State}, response::Response}; |
4 | use tokio::sync::mpsc::Sender; | 5 | use tokio::sync::broadcast::{Sender}; |
5 | use tracing::{debug, error}; | 6 | use tracing::{debug, error, trace}; |
6 | 7 | ||
7 | use crate::{error::WebolError, AppState}; | 8 | use crate::{error::WebolError, AppState}; |
8 | 9 | ||
@@ -12,7 +13,7 @@ pub async fn spawn(tx: Sender<String>) -> Result<(), WebolError> { | |||
12 | let mut cont = true; | 13 | let mut cont = true; |
13 | while cont { | 14 | while cont { |
14 | let ping = surge_ping::ping( | 15 | let ping = surge_ping::ping( |
15 | "192.168.178.28".parse().map_err(WebolError::IpParse)?, | 16 | "127.0.0.1".parse().map_err(WebolError::IpParse)?, |
16 | &payload | 17 | &payload |
17 | ).await; | 18 | ).await; |
18 | 19 | ||
@@ -30,24 +31,29 @@ pub async fn spawn(tx: Sender<String>) -> Result<(), WebolError> { | |||
30 | debug!("Ping took {:?}", duration); | 31 | debug!("Ping took {:?}", duration); |
31 | cont = false; | 32 | cont = false; |
32 | // FIXME: remove unwrap | 33 | // FIXME: remove unwrap |
33 | tx.send("Got ping".to_string()).await.unwrap(); | 34 | tx.send("Got ping".to_string()).unwrap(); |
34 | }; | 35 | }; |
35 | } | 36 | } |
36 | 37 | ||
37 | Ok(()) | 38 | Ok(()) |
38 | } | 39 | } |
39 | 40 | ||
40 | pub async fn ws_ping(ws: WebSocketUpgrade, State(_state): State<Arc<AppState>>) -> Response { | 41 | // TODO: Status to routes, websocket here |
41 | ws.on_upgrade(handle_socket) | 42 | pub async fn ws_ping(State(state): State<Arc<AppState>>, ws: WebSocketUpgrade) -> Response { |
43 | ws.on_upgrade(move |socket| handle_socket(socket, state.ping_send.clone())) | ||
42 | } | 44 | } |
43 | 45 | ||
44 | // FIXME: Handle commands through enum | 46 | // FIXME: Handle commands through enum |
45 | async fn handle_socket(mut socket: WebSocket) { | 47 | async fn handle_socket(mut socket: WebSocket, tx: Sender<String>) { |
46 | // TODO: Understand Cow | 48 | // TODO: Understand Cow |
47 | 49 | while let message = tx.subscribe().recv().await.unwrap() { | |
48 | // match socket.send(axum::extract::ws::Message::Close(Some(CloseFrame { code: 4000, reason: Cow::Owned("started".to_owned()) }))).await.map_err(WebolError::Axum) { | 50 | trace!("GOT = {}", message); |
49 | match socket.send(axum::extract::ws::Message::Text("started".to_string())).await.map_err(WebolError::Axum) { | 51 | if &message == "Got ping" { |
52 | break; | ||
53 | } | ||
54 | }; | ||
55 | match socket.send(axum::extract::ws::Message::Close(Some(axum::extract::ws::CloseFrame { code: 4000, reason: Cow::Owned("started".to_owned()) }))).await.map_err(WebolError::Axum) { | ||
50 | Ok(..) => (), | 56 | Ok(..) => (), |
51 | Err(err) => { error!("Server Error: {:?}", err) } | 57 | Err(err) => { error!("Server Error: {:?}", err) } |
52 | }; | 58 | }; |
53 | } | 59 | } \ No newline at end of file |