aboutsummaryrefslogtreecommitdiff
path: root/server/src/state.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-09-18 15:42:19 +0200
committermetamuffin <metamuffin@disroot.org>2024-09-18 15:42:19 +0200
commitfb6ca2a4b9d78dd80dbdf37b2926d9ede4108e8b (patch)
tree76b1a77dcd3ae29595caaa6423a18b5ce29e32db /server/src/state.rs
parente5fdbaadbf01f14290e70c49482e1dce3c9816d8 (diff)
downloadhurrycurry-fb6ca2a4b9d78dd80dbdf37b2926d9ede4108e8b.tar
hurrycurry-fb6ca2a4b9d78dd80dbdf37b2926d9ede4108e8b.tar.bz2
hurrycurry-fb6ca2a4b9d78dd80dbdf37b2926d9ede4108e8b.tar.zst
translate server messages
Diffstat (limited to 'server/src/state.rs')
-rw-r--r--server/src/state.rs24
1 files changed, 16 insertions, 8 deletions
diff --git a/server/src/state.rs b/server/src/state.rs
index 09e7031e..9086248a 100644
--- a/server/src/state.rs
+++ b/server/src/state.rs
@@ -15,8 +15,8 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-use crate::{server::Server, ConnectionID};
-use anyhow::{bail, Result};
+use crate::{server::Server, tre, trm, ConnectionID, TrError};
+use anyhow::Result;
use hurrycurry_protocol::{Message, PacketC, PacketS, PlayerID};
use log::{debug, trace};
@@ -41,10 +41,10 @@ impl Server {
&mut self,
conn: ConnectionID,
packet: PacketS,
- ) -> Result<Vec<PacketC>> {
+ ) -> Result<Vec<PacketC>, TrError> {
if let Some(p) = get_packet_player(&packet) {
if !self.connections.entry(conn).or_default().contains(&p) {
- bail!("Packet sent to a player that is not owned by this connection.");
+ return Err(tre!("s.state.packet_sender_invalid"));
}
}
let mut replies = Vec::new();
@@ -58,7 +58,8 @@ impl Server {
Ok(packets) => return Ok(packets),
Err(e) => {
return Ok(vec![PacketC::ServerMessage {
- text: format!("{e}"),
+ message: Message::Text(format!("{e}")), // TODO localize
+ error: true,
}]);
}
}
@@ -68,7 +69,7 @@ impl Server {
}
PacketS::Join { .. } => {
if self.connections.entry(conn).or_default().len() > 8 {
- bail!("Players-per-connection limit exceeded.")
+ return Err(tre!("s.state.conn_too_many_players"));
}
}
_ => (),
@@ -84,10 +85,17 @@ impl Server {
if self.count_chefs() == 0 && !self.game.lobby {
self.tx
.send(PacketC::ServerMessage {
- text: "Game was aborted due to a lack of players".to_string(),
+ message: trm!("s.state.abort_no_players"),
+ error: false,
})
.ok();
- self.load(self.index.generate("lobby").await?, None);
+ self.load(
+ self.index
+ .generate("lobby")
+ .await
+ .map_err(|m| tre!("s.error.map_load", s = format!("{m}")))?,
+ None,
+ );
}
Ok(replies)
}