aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/replaytool/src/main.rs48
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()?);