Skip to content

Commit 55f3f52

Browse files
committed
Retry connecting to websocket
1 parent b861543 commit 55f3f52

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

crates/hulk_mujoco/src/hardware_interface.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::sync::atomic::{AtomicBool, Ordering};
22
use std::sync::Arc;
3-
use std::time::SystemTime;
3+
use std::time::{Duration, SystemTime};
44

55
use booster::{ButtonEventMsg, FallDownState, LowCommand, LowState, RemoteControllerState};
66
use color_eyre::eyre::{Context, OptionExt};
@@ -21,6 +21,7 @@ use parking_lot::Mutex;
2121
use ros2::geometry_msgs::transform_stamped::TransformStamped;
2222
use serde::Deserialize;
2323
use tokio::sync::mpsc::{channel, Receiver, Sender};
24+
use tokio::time::sleep;
2425
use tokio_tungstenite::tungstenite::Message;
2526
use tokio_util::sync::CancellationToken;
2627
use types::audio::SpeakerRequest;
@@ -85,12 +86,12 @@ impl MujocoHardwareInterface {
8586
};
8687

8788
let time = Arc::new(Mutex::new(SystemTime::UNIX_EPOCH));
88-
tokio::spawn(worker(
89+
tokio::spawn(keep_running.clone().run_until_cancelled_owned(worker(
8990
time.clone(),
9091
parameters.mujoco_websocket_address,
9192
keep_running.clone(),
9293
worker_channels,
93-
));
94+
)));
9495

9596
Ok(Self {
9697
paths: parameters.paths,
@@ -114,13 +115,15 @@ async fn worker(
114115
keep_running: CancellationToken,
115116
mut worker_channels: WorkerChannels,
116117
) -> Result<()> {
117-
let websocket = tokio_tungstenite::connect_async(address).await;
118-
119-
let Ok((mut websocket, _)) = websocket else {
120-
log::warn!("connecting to websocket failed");
121-
keep_running.cancel();
122-
return Ok(());
118+
let mut websocket = loop {
119+
let websocket = tokio_tungstenite::connect_async(&address).await;
120+
if let Ok((websocket, _)) = websocket {
121+
break websocket;
122+
};
123+
log::info!("connecting to websocket failed, retrying...");
124+
sleep(Duration::from_secs_f32(1.0)).await;
123125
};
126+
124127
loop {
125128
tokio::select! {
126129
maybe_websocket_event = websocket.next() => {

0 commit comments

Comments
 (0)