server bindings and eula util
This commit is contained in:
@@ -91,6 +91,11 @@ pub enum ServerError {
|
|||||||
|
|
||||||
#[error("Failed to write to stdin")]
|
#[error("Failed to write to stdin")]
|
||||||
StdinWriteFailed,
|
StdinWriteFailed,
|
||||||
|
|
||||||
|
#[error("Failed to open eula.txt")]
|
||||||
|
NoEULA,
|
||||||
|
#[error("Failed to write eula.txt")]
|
||||||
|
WriteEULAFailed,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "events")]
|
#[cfg(feature = "events")]
|
||||||
|
|||||||
@@ -3,13 +3,14 @@ use std::{ops::RangeInclusive, path::PathBuf, str::FromStr};
|
|||||||
use tokio::{
|
use tokio::{
|
||||||
fs::{File, create_dir},
|
fs::{File, create_dir},
|
||||||
io::{self, AsyncWriteExt},
|
io::{self, AsyncWriteExt},
|
||||||
sync::RwLock,
|
sync::{RwLock, watch},
|
||||||
};
|
};
|
||||||
|
use tokio_stream::wrappers::BroadcastStream;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
config::{MinecraftType, MinecraftVersion, Version},
|
config::{MinecraftType, MinecraftVersion, StreamSource, Version, stream::InstanceEvent},
|
||||||
error::CreationError,
|
error::{CreationError, ServerError, SubscribeError},
|
||||||
instance::InstanceHandle,
|
instance::InstanceHandle,
|
||||||
manifests::vanilla::{VanillaManifestV2, VanillaManifestV2Version, VanillaReleaseManifest},
|
manifests::vanilla::{VanillaManifestV2, VanillaManifestV2Version, VanillaReleaseManifest},
|
||||||
server,
|
server,
|
||||||
@@ -120,4 +121,45 @@ impl MineGuardServer {
|
|||||||
|
|
||||||
Ok(server)
|
Ok(server)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn start(&self) -> Result<(), ServerError> {
|
||||||
|
let mut handle_w = self.handle.write().await;
|
||||||
|
let res = handle_w.start().await;
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn kill(&self) -> Result<(), ServerError> {
|
||||||
|
let mut handle_w = self.handle.write().await;
|
||||||
|
let res = handle_w.kill().await;
|
||||||
|
res
|
||||||
|
}
|
||||||
|
pub async fn stop(&self) -> Result<(), ServerError> {
|
||||||
|
let mut handle_w = self.handle.write().await;
|
||||||
|
let res = handle_w.stop().await;
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn subscribe(
|
||||||
|
&self,
|
||||||
|
stream: StreamSource,
|
||||||
|
) -> Result<BroadcastStream<InstanceEvent>, SubscribeError> {
|
||||||
|
let handle_r = self.handle.read().await;
|
||||||
|
let res = handle_r.subscribe(stream);
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn accept_eula(&self) -> Result<(), ServerError> {
|
||||||
|
let config_r = self.config.read().await;
|
||||||
|
let eula_path = config_r.server_dir.join("eula.txt");
|
||||||
|
|
||||||
|
let mut out = File::create(eula_path)
|
||||||
|
.await
|
||||||
|
.map_err(|_| ServerError::NoEULA)?;
|
||||||
|
|
||||||
|
out.write_all(b"#Generated by MineGuard\neula=true\n")
|
||||||
|
.await
|
||||||
|
.map_err(|_| ServerError::WriteEULAFailed)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user