diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-09 19:53:10 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-09 19:53:10 +0200 |
commit | c101726425a492e195eafb27ca261b0145ffbab1 (patch) | |
tree | dc93b2c26c1df4931d16e33625586d9b7a1b2fa3 /server/replaytool/src/main.rs | |
parent | 5d2cef94937dd4f43d7831640aede5d38fa91506 (diff) | |
download | hurrycurry-c101726425a492e195eafb27ca261b0145ffbab1.tar hurrycurry-c101726425a492e195eafb27ca261b0145ffbab1.tar.bz2 hurrycurry-c101726425a492e195eafb27ca261b0145ffbab1.tar.zst |
contignous recording
Diffstat (limited to 'server/replaytool/src/main.rs')
-rw-r--r-- | server/replaytool/src/main.rs | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/server/replaytool/src/main.rs b/server/replaytool/src/main.rs index ee6a8def..a41aaa1f 100644 --- a/server/replaytool/src/main.rs +++ b/server/replaytool/src/main.rs @@ -22,7 +22,10 @@ use futures_util::{SinkExt, StreamExt}; use hurrycurry_protocol::{PacketC, PacketS}; use log::{debug, info, warn, LevelFilter}; use serde::{Deserialize, Serialize}; -use std::{path::PathBuf, time::Instant}; +use std::{ + path::PathBuf, + time::{Instant, SystemTime}, +}; use tokio::{ fs::File, io::{AsyncBufReadExt, AsyncWriteExt, BufReader, BufWriter}, @@ -32,8 +35,15 @@ use tokio_tungstenite::tungstenite::Message; #[derive(Parser)] enum Args { - Record { url: String, output: PathBuf }, - Replay { input: PathBuf }, + Record { + #[arg(short, long)] + r#loop: bool, + url: String, + output: PathBuf, + }, + Replay { + input: PathBuf, + }, } #[derive(Serialize, Deserialize)] @@ -52,10 +62,27 @@ async fn main() -> anyhow::Result<()> { let args = Args::parse(); match args { - Args::Record { url, output } => { - let mut file = BufWriter::new(ZstdEncoder::new(File::create(&output).await?)); + Args::Record { + url, + output, + r#loop, + } => loop { + let mut file = BufWriter::new(ZstdEncoder::new( + File::create(&if r#loop { + output.join(format!( + "replay-{}", + SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs() + )) + } else { + output.clone() + }) + .await?, + )); info!("connecting to {url:?}..."); - let (mut sock, _) = tokio_tungstenite::connect_async(url).await?; + let (mut sock, _) = tokio_tungstenite::connect_async(&url).await?; info!("starting recording."); let start = Instant::now(); @@ -96,8 +123,13 @@ async fn main() -> anyhow::Result<()> { } } drop(file); - info!("done") - } + info!("done"); + if r#loop { + info!("restarting..."); + } else { + break; + } + }, Args::Replay { input } => { let ws_listener = TcpListener::bind("0.0.0.0:27032").await?; info!("listening for websockets on {}", ws_listener.local_addr()?); |