Re-enable RCON
This commit is contained in:
parent
8cff0b4b76
commit
268fc19b7b
@ -1,4 +1,5 @@
|
|||||||
#![allow(clippy::await_holding_refcell_ref)]
|
#![allow(clippy::await_holding_refcell_ref)]
|
||||||
|
#![allow(clippy::await_holding_lock)]
|
||||||
|
|
||||||
use mio::net::TcpListener;
|
use mio::net::TcpListener;
|
||||||
use mio::{Events, Interest, Poll, Token};
|
use mio::{Events, Interest, Poll, Token};
|
||||||
@ -8,7 +9,7 @@ use client::Client;
|
|||||||
use commands::handle_command;
|
use commands::handle_command;
|
||||||
use config::AdvancedConfiguration;
|
use config::AdvancedConfiguration;
|
||||||
|
|
||||||
use std::{collections::HashMap, thread};
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use client::interrupted;
|
use client::interrupted;
|
||||||
use config::BasicConfiguration;
|
use config::BasicConfiguration;
|
||||||
@ -35,6 +36,7 @@ fn main() -> io::Result<()> {
|
|||||||
|
|
||||||
use entity::player::Player;
|
use entity::player::Player;
|
||||||
use pumpkin_core::text::{color::NamedColor, TextComponent};
|
use pumpkin_core::text::{color::NamedColor, TextComponent};
|
||||||
|
use rcon::RCONServer;
|
||||||
|
|
||||||
#[cfg(feature = "dhat-heap")]
|
#[cfg(feature = "dhat-heap")]
|
||||||
let _profiler = dhat::Profiler::new_heap();
|
let _profiler = dhat::Profiler::new_heap();
|
||||||
@ -61,8 +63,6 @@ fn main() -> io::Result<()> {
|
|||||||
const SERVER: Token = Token(0);
|
const SERVER: Token = Token(0);
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let time = Instant::now();
|
let time = Instant::now();
|
||||||
let basic_config = BasicConfiguration::load("configuration.toml");
|
let basic_config = BasicConfiguration::load("configuration.toml");
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ fn main() -> io::Result<()> {
|
|||||||
let mut clients: HashMap<Token, Client> = HashMap::new();
|
let mut clients: HashMap<Token, Client> = HashMap::new();
|
||||||
let mut players: HashMap<Arc<Token>, Arc<Mutex<Player>>> = HashMap::new();
|
let mut players: HashMap<Arc<Token>, Arc<Mutex<Player>>> = HashMap::new();
|
||||||
|
|
||||||
let server = Arc::new(Mutex::new(Server::new((
|
let server = Arc::new(tokio::sync::Mutex::new(Server::new((
|
||||||
basic_config,
|
basic_config,
|
||||||
advanced_configuration,
|
advanced_configuration,
|
||||||
))));
|
))));
|
||||||
@ -108,7 +108,7 @@ fn main() -> io::Result<()> {
|
|||||||
|
|
||||||
let server1 = server.clone();
|
let server1 = server.clone();
|
||||||
if use_console {
|
if use_console {
|
||||||
thread::spawn(move || {
|
tokio::spawn(async move {
|
||||||
let stdin = std::io::stdin();
|
let stdin = std::io::stdin();
|
||||||
loop {
|
loop {
|
||||||
let mut out = String::new();
|
let mut out = String::new();
|
||||||
@ -117,7 +117,7 @@ fn main() -> io::Result<()> {
|
|||||||
.expect("Failed to read console line");
|
.expect("Failed to read console line");
|
||||||
|
|
||||||
if !out.is_empty() {
|
if !out.is_empty() {
|
||||||
let mut server = server1.lock().unwrap();
|
let mut server = server1.lock().await;
|
||||||
handle_command(&mut commands::CommandSender::Console, &mut server, &out);
|
handle_command(&mut commands::CommandSender::Console, &mut server, &out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -125,9 +125,9 @@ fn main() -> io::Result<()> {
|
|||||||
}
|
}
|
||||||
if rcon.enabled {
|
if rcon.enabled {
|
||||||
let server = server.clone();
|
let server = server.clone();
|
||||||
// tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
// RCONServer::new(&rcon, &server).await.unwrap();
|
RCONServer::new(&rcon, server).await.unwrap();
|
||||||
// });
|
});
|
||||||
}
|
}
|
||||||
loop {
|
loop {
|
||||||
if let Err(err) = poll.poll(&mut events, None) {
|
if let Err(err) = poll.poll(&mut events, None) {
|
||||||
@ -179,7 +179,7 @@ fn main() -> io::Result<()> {
|
|||||||
let done = if let Some(player) = players.get_mut(&token) {
|
let done = if let Some(player) = players.get_mut(&token) {
|
||||||
let mut player = player.lock().unwrap();
|
let mut player = player.lock().unwrap();
|
||||||
player.client.poll(event).await;
|
player.client.poll(event).await;
|
||||||
let mut server = server.lock().unwrap();
|
let mut server = server.lock().await;
|
||||||
player.process_packets(&mut server);
|
player.process_packets(&mut server);
|
||||||
player.client.closed
|
player.client.closed
|
||||||
} else {
|
} else {
|
||||||
@ -188,7 +188,7 @@ fn main() -> io::Result<()> {
|
|||||||
|
|
||||||
if done {
|
if done {
|
||||||
if let Some(player) = players.remove(&token) {
|
if let Some(player) = players.remove(&token) {
|
||||||
let mut server = server.lock().unwrap();
|
let mut server = server.lock().await;
|
||||||
server.remove_player(&token);
|
server.remove_player(&token);
|
||||||
let mut player = player.lock().unwrap();
|
let mut player = player.lock().unwrap();
|
||||||
poll.registry().deregister(&mut player.client.connection)?;
|
poll.registry().deregister(&mut player.client.connection)?;
|
||||||
@ -199,7 +199,7 @@ fn main() -> io::Result<()> {
|
|||||||
// Maybe received an event for a TCP connection.
|
// Maybe received an event for a TCP connection.
|
||||||
let (done, make_player) = if let Some(client) = clients.get_mut(&token) {
|
let (done, make_player) = if let Some(client) = clients.get_mut(&token) {
|
||||||
client.poll(event).await;
|
client.poll(event).await;
|
||||||
let mut server = server.lock().unwrap();
|
let mut server = server.lock().await;
|
||||||
client.process_packets(&mut server).await;
|
client.process_packets(&mut server).await;
|
||||||
(client.closed, client.make_player)
|
(client.closed, client.make_player)
|
||||||
} else {
|
} else {
|
||||||
@ -212,7 +212,7 @@ fn main() -> io::Result<()> {
|
|||||||
poll.registry().deregister(&mut client.connection)?;
|
poll.registry().deregister(&mut client.connection)?;
|
||||||
} else if make_player {
|
} else if make_player {
|
||||||
let token = client.token.clone();
|
let token = client.token.clone();
|
||||||
let mut server = server.lock().unwrap();
|
let mut server = server.lock().await;
|
||||||
let player = server.add_player(token.clone(), client);
|
let player = server.add_player(token.clone(), client);
|
||||||
players.insert(token, player.clone());
|
players.insert(token, player.clone());
|
||||||
let mut player = player.lock().unwrap();
|
let mut player = player.lock().unwrap();
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
io::{self, Read},
|
io::{self, Read},
|
||||||
sync::{Arc, Mutex},
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
use mio::{
|
use mio::{
|
||||||
@ -30,7 +30,10 @@ const SERVER: Token = Token(0);
|
|||||||
pub struct RCONServer {}
|
pub struct RCONServer {}
|
||||||
|
|
||||||
impl RCONServer {
|
impl RCONServer {
|
||||||
pub async fn new(config: &RCONConfig, server: &Arc<Mutex<Server>>) -> Result<Self, io::Error> {
|
pub async fn new(
|
||||||
|
config: &RCONConfig,
|
||||||
|
server: Arc<tokio::sync::Mutex<Server>>,
|
||||||
|
) -> Result<Self, io::Error> {
|
||||||
assert!(config.enabled, "RCON is not enabled");
|
assert!(config.enabled, "RCON is not enabled");
|
||||||
let addr = format!("{}:{}", config.ip, config.port)
|
let addr = format!("{}:{}", config.ip, config.port)
|
||||||
.parse()
|
.parse()
|
||||||
@ -44,7 +47,7 @@ impl RCONServer {
|
|||||||
|
|
||||||
let mut unique_token = Token(SERVER.0 + 1);
|
let mut unique_token = Token(SERVER.0 + 1);
|
||||||
|
|
||||||
let mut events = Events::with_capacity(128);
|
let mut events = Events::with_capacity(20);
|
||||||
|
|
||||||
let mut connections: HashMap<Token, RCONClient> = HashMap::new();
|
let mut connections: HashMap<Token, RCONClient> = HashMap::new();
|
||||||
|
|
||||||
@ -88,7 +91,7 @@ impl RCONServer {
|
|||||||
|
|
||||||
token => {
|
token => {
|
||||||
let done = if let Some(client) = connections.get_mut(&token) {
|
let done = if let Some(client) = connections.get_mut(&token) {
|
||||||
client.handle(server, &password).await
|
client.handle(&server, &password).await
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
@ -127,7 +130,11 @@ impl RCONClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn handle(&mut self, server: &Arc<Mutex<Server>>, password: &str) -> bool {
|
pub async fn handle(
|
||||||
|
&mut self,
|
||||||
|
server: &Arc<tokio::sync::Mutex<Server>>,
|
||||||
|
password: &str,
|
||||||
|
) -> bool {
|
||||||
if !self.closed {
|
if !self.closed {
|
||||||
loop {
|
loop {
|
||||||
match self.read_bytes() {
|
match self.read_bytes() {
|
||||||
@ -155,7 +162,7 @@ impl RCONClient {
|
|||||||
|
|
||||||
async fn poll(
|
async fn poll(
|
||||||
&mut self,
|
&mut self,
|
||||||
server: &Arc<Mutex<Server>>,
|
server: &Arc<tokio::sync::Mutex<Server>>,
|
||||||
password: &str,
|
password: &str,
|
||||||
) -> Result<(), PacketError> {
|
) -> Result<(), PacketError> {
|
||||||
loop {
|
loop {
|
||||||
@ -188,7 +195,7 @@ impl RCONClient {
|
|||||||
PacketType::ExecCommand => {
|
PacketType::ExecCommand => {
|
||||||
if self.logged_in {
|
if self.logged_in {
|
||||||
let mut output = Vec::new();
|
let mut output = Vec::new();
|
||||||
let mut server = server.lock().unwrap();
|
let mut server = server.lock().await;
|
||||||
handle_command(
|
handle_command(
|
||||||
&mut crate::commands::CommandSender::Rcon(&mut output),
|
&mut crate::commands::CommandSender::Rcon(&mut output),
|
||||||
&mut server,
|
&mut server,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user