feat: xtasks
This commit is contained in:
parent
b2427a333b
commit
6bc4fbd446
6 changed files with 125 additions and 11 deletions
2
.cargo/config.toml
Normal file
2
.cargo/config.toml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[alias]
|
||||||
|
xtask = "run --package xtask --"
|
|
@ -1,5 +1,5 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [ "gameserver", "proto", "sdkserver"]
|
members = ["gameserver", "proto", "sdkserver", "xtask"]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
|
|
26
README.md
26
README.md
|
@ -11,16 +11,10 @@ A Server emulator for the game [`Honkai: Star Rail`](https://hsr.hoyoverse.com/e
|
||||||
|
|
||||||
- [Rust](https://www.rust-lang.org/tools/install)
|
- [Rust](https://www.rust-lang.org/tools/install)
|
||||||
|
|
||||||
**NOTE**: Nightly Rust is required to build the project. To install it, first install
|
|
||||||
Rust itself, then run the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rustup toolchain install nightly
|
|
||||||
rustup default nightly
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Building
|
#### Building
|
||||||
|
|
||||||
|
##### Manually
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://git.xeondev.com/reversedrooms/RobinSR.git
|
git clone https://git.xeondev.com/reversedrooms/RobinSR.git
|
||||||
cd RobinSR
|
cd RobinSR
|
||||||
|
@ -28,6 +22,18 @@ cargo install --path gameserver
|
||||||
cargo install --path sdkserver
|
cargo install --path sdkserver
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Using xtasks (use this if stupid)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo xtask run
|
||||||
|
```
|
||||||
|
|
||||||
|
##### To run it with automatic recompilation when any Rust files are changed
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo xtask watch
|
||||||
|
```
|
||||||
|
|
||||||
### From Pre-built Binaries
|
### From Pre-built Binaries
|
||||||
|
|
||||||
Navigate to the [Releases](https://git.xeondev.com/reversedrooms/RobinSR/releases)
|
Navigate to the [Releases](https://git.xeondev.com/reversedrooms/RobinSR/releases)
|
||||||
|
@ -55,8 +61,10 @@ run the following in a terminal:
|
||||||
```
|
```
|
||||||
|
|
||||||
## Connecting
|
## Connecting
|
||||||
|
|
||||||
[Get 2.2 beta client](https://bhrpg-prod.oss-accelerate.aliyuncs.com/client/beta/20240322124944_scfGE0xJXlWtoJ1r/StarRail_2.1.51.zip),
|
[Get 2.2 beta client](https://bhrpg-prod.oss-accelerate.aliyuncs.com/client/beta/20240322124944_scfGE0xJXlWtoJ1r/StarRail_2.1.51.zip),
|
||||||
replace [mhypbase.dll](https://git.xeondev.com/reversedrooms/RobinSR/raw/branch/master/mhypbase.dll) file in your game folder, it will redirect game traffic (and also disable in-game censorship)
|
replace [mhypbase.dll](https://git.xeondev.com/reversedrooms/RobinSR/raw/branch/master/mhypbase.dll)
|
||||||
|
file in your game folder, it will redirect game traffic (and disable in-game censorship)
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|
|
@ -137,7 +137,8 @@ pub async fn on_quit_lineup_cs_req(session: &PlayerSession, body: &QuitLineupCsR
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lineup_avatar(id: u32, slot: u32) -> LineupAvatar {
|
#[must_use]
|
||||||
|
const fn lineup_avatar(id: u32, slot: u32) -> LineupAvatar {
|
||||||
LineupAvatar {
|
LineupAvatar {
|
||||||
id,
|
id,
|
||||||
slot,
|
slot,
|
||||||
|
|
7
xtask/Cargo.toml
Normal file
7
xtask/Cargo.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[package]
|
||||||
|
name = "xtask"
|
||||||
|
edition = "2021"
|
||||||
|
version.workspace = true
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
notify = "6.1.1"
|
96
xtask/src/main.rs
Normal file
96
xtask/src/main.rs
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
use std::{io, process::Command, sync::mpsc, thread};
|
||||||
|
|
||||||
|
fn print_help() {
|
||||||
|
println!(
|
||||||
|
"
|
||||||
|
xtask must specify a task to run.
|
||||||
|
|
||||||
|
Usage: `cargo xtask <task>`
|
||||||
|
|
||||||
|
Tasks:
|
||||||
|
run
|
||||||
|
Run the gameserver and sdkserver.
|
||||||
|
watch
|
||||||
|
Watch for changes in the project and restart the servers if any file changes.
|
||||||
|
"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// run gameserver and sdkserver, wait till any of them exit
|
||||||
|
fn spawn_servers(release: bool) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let (tx, rx) = mpsc::channel();
|
||||||
|
|
||||||
|
let tx1 = tx.clone();
|
||||||
|
let handle1 = thread::spawn(move || {
|
||||||
|
let mut gameserver = Command::new("cargo")
|
||||||
|
.arg("run")
|
||||||
|
.arg("--bin")
|
||||||
|
.arg("gameserver")
|
||||||
|
.args(if release { vec!["--release"] } else { vec![] })
|
||||||
|
.spawn()
|
||||||
|
.expect("failed to start gameserver");
|
||||||
|
|
||||||
|
gameserver.wait()?;
|
||||||
|
tx1.send(()).expect("failed to send completion signal");
|
||||||
|
|
||||||
|
Ok::<(), io::Error>(())
|
||||||
|
});
|
||||||
|
|
||||||
|
let handle2 = thread::spawn(move || {
|
||||||
|
let mut sdkserver = Command::new("cargo")
|
||||||
|
.arg("run")
|
||||||
|
.arg("--bin")
|
||||||
|
.arg("sdkserver")
|
||||||
|
.arg("--release")
|
||||||
|
.args(if release { vec!["--release"] } else { vec![] })
|
||||||
|
.spawn()
|
||||||
|
.expect("failed to start sdkserver");
|
||||||
|
|
||||||
|
let _ = sdkserver.wait()?;
|
||||||
|
tx.send(()).expect("failed to send completion signal");
|
||||||
|
|
||||||
|
Ok::<(), io::Error>(())
|
||||||
|
});
|
||||||
|
|
||||||
|
rx.recv().expect("failed to receive from channel");
|
||||||
|
|
||||||
|
handle1.join().expect("failed to join gameserver thread")?;
|
||||||
|
handle2.join().expect("failed to join sdkserver thread")?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
// watch for changes in the project and restart the servers if any file changes
|
||||||
|
fn watch(release: bool) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let mut cmd = std::process::Command::new("cargo");
|
||||||
|
cmd.arg("watch").arg("-x").arg(format!(
|
||||||
|
"xtask run {}",
|
||||||
|
if release { "--release" } else { "" }
|
||||||
|
));
|
||||||
|
|
||||||
|
let mut child = cmd.spawn()?;
|
||||||
|
|
||||||
|
child.wait()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let Some(task) = std::env::args().nth(1) else {
|
||||||
|
print_help();
|
||||||
|
std::process::exit(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
let release = std::env::args().any(|arg| arg == "--release");
|
||||||
|
|
||||||
|
match task.as_str() {
|
||||||
|
"run" => spawn_servers(release)?,
|
||||||
|
"watch" => watch(release)?,
|
||||||
|
_ => {
|
||||||
|
println!("invalid task: `{task}`, run `cargo xtask` for a list of tasks");
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Reference in a new issue