aboutsummaryrefslogtreecommitdiff
path: root/games/rstnode/rst-core/src/wire
diff options
context:
space:
mode:
Diffstat (limited to 'games/rstnode/rst-core/src/wire')
-rw-r--r--games/rstnode/rst-core/src/wire/game/action.rs (renamed from games/rstnode/rst-core/src/wire/action.rs)0
-rw-r--r--games/rstnode/rst-core/src/wire/game/mod.rs5
-rw-r--r--games/rstnode/rst-core/src/wire/game/update.rs (renamed from games/rstnode/rst-core/src/wire/update.rs)19
-rw-r--r--games/rstnode/rst-core/src/wire/mod.rs11
-rw-r--r--games/rstnode/rst-core/src/wire/proto/mod.rs25
-rw-r--r--games/rstnode/rst-core/src/wire/proto/request.rs41
-rw-r--r--games/rstnode/rst-core/src/wire/proto/response.rs0
-rw-r--r--games/rstnode/rst-core/src/wire/req.rs2
-rw-r--r--games/rstnode/rst-core/src/wire/resp.rs10
9 files changed, 94 insertions, 19 deletions
diff --git a/games/rstnode/rst-core/src/wire/action.rs b/games/rstnode/rst-core/src/wire/game/action.rs
index 22ab7ce6868e..22ab7ce6868e 100644
--- a/games/rstnode/rst-core/src/wire/action.rs
+++ b/games/rstnode/rst-core/src/wire/game/action.rs
diff --git a/games/rstnode/rst-core/src/wire/game/mod.rs b/games/rstnode/rst-core/src/wire/game/mod.rs
new file mode 100644
index 000000000000..2cb32cbaa79c
--- /dev/null
+++ b/games/rstnode/rst-core/src/wire/game/mod.rs
@@ -0,0 +1,5 @@
+mod action;
+pub use action::*;
+
+mod update;
+pub use update::*;
diff --git a/games/rstnode/rst-core/src/wire/update.rs b/games/rstnode/rst-core/src/wire/game/update.rs
index a1b47ff07e50..44a2e646bd34 100644
--- a/games/rstnode/rst-core/src/wire/update.rs
+++ b/games/rstnode/rst-core/src/wire/game/update.rs
@@ -1,11 +1,13 @@
//! Update to the game state
-use super::UserId;
-use crate::data::{NodeId, PacketId, Player, Upgrade};
+use crate::{
+ data::{NodeId, PacketId, Player, Upgrade},
+ wire::UserId,
+};
use serde::{Deserialize, Serialize};
/// An update provided by the game server
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum Update {
/// Update made to a node
Node(NodeUpdate),
@@ -20,7 +22,7 @@ pub enum Update {
}
/// Update made to a node
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum NodeUpdate {
/// The node owner changed
Owner(Player),
@@ -35,7 +37,7 @@ pub enum NodeUpdate {
}
/// Update made to a link
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum LinkUpdate {
/// Take a packet from a node's buffer
TakePacket(PacketId),
@@ -44,20 +46,21 @@ pub enum LinkUpdate {
}
/// Update made to a packet
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum PacketUpdate {
/// Advance a packet along one step along the link
Increment(PacketId),
}
/// Update made to the user set
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum UserUpdate {
UserLeft(UserId),
+ UserPaused(UserId),
}
/// An error occured, can be non-fatal
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum UpdateError {
/// You are the last user in the match
LastUser,
diff --git a/games/rstnode/rst-core/src/wire/mod.rs b/games/rstnode/rst-core/src/wire/mod.rs
index 493f0bcb6885..1f15bca79028 100644
--- a/games/rstnode/rst-core/src/wire/mod.rs
+++ b/games/rstnode/rst-core/src/wire/mod.rs
@@ -1,20 +1,19 @@
//! Network formats and container messages
-mod action;
-pub use action::*;
-
mod env;
pub use env::*;
+pub mod game;
+
+mod proto;
+pub use proto::*;
+
mod resp;
pub use resp::*;
mod req;
pub use req::*;
-mod update;
-pub use update::*;
-
use crate::{data::Color, Id};
use serde::{Deserialize, Serialize};
diff --git a/games/rstnode/rst-core/src/wire/proto/mod.rs b/games/rstnode/rst-core/src/wire/proto/mod.rs
new file mode 100644
index 000000000000..07598bc85540
--- /dev/null
+++ b/games/rstnode/rst-core/src/wire/proto/mod.rs
@@ -0,0 +1,25 @@
+//! This module implements the client-server game protocol
+
+use super::{Request, Response};
+
+pub enum NetErr {
+ Refused,
+ Dropped,
+ Timeout,
+ BadData,
+}
+
+/// Use this function to send a request to a partical remote
+///
+/// The function makes sure that you get a valid response back, but
+/// does not yet ensure that this response is correct for the request
+/// in question.
+pub fn request_to(r: Request, remote: String) -> Result<Response, NetErr> {
+ todo!()
+}
+
+/// Use this function to send a response to a client
+pub fn response_to(r: Response, client: String) -> Result<(), NetErr> {
+ todo!()
+}
+
diff --git a/games/rstnode/rst-core/src/wire/proto/request.rs b/games/rstnode/rst-core/src/wire/proto/request.rs
new file mode 100644
index 000000000000..a95c240c4a14
--- /dev/null
+++ b/games/rstnode/rst-core/src/wire/proto/request.rs
@@ -0,0 +1,41 @@
+use crate::wire::{Action, LobbyId, MatchId, Request, User};
+
+pub fn register(name: String, pw: String) -> Request {
+ Request::Register(name, pw)
+}
+c
+pub fn login(name: String, pw: String) -> Request {
+ Request::Login(name, pw)
+}
+
+pub fn logout(user: User) -> Request {
+ Request::Logout(user)
+}
+
+pub fn anonymous(name: String) -> Request {
+ Request::Anonymous(name)
+}
+
+pub fn join(user: User, lid: LobbyId) -> Request {
+ Request::Join(user, lid)
+}
+
+pub fn leave(user: User, lid: LobbyId) -> Request {
+ Request::Leave(user, lid)
+}
+
+pub fn ready(user: User, lid: LobbyId, ready: bool) -> Request {
+ Request::Ready(user, lid, ready)
+}
+
+pub fn start_req(user: User, lid: LobbyId) -> Request {
+ Request::StartReq(user, lid)
+}
+
+pub fn game_action(user: User, mid: MatchId, act: Action) -> Request {
+ Request::GameAction(user, mid, act)
+}
+
+pub fn leave_game(user: User, mid: MatchId) -> Request {
+ Request::LeaveGame(user, mid)
+}
diff --git a/games/rstnode/rst-core/src/wire/proto/response.rs b/games/rstnode/rst-core/src/wire/proto/response.rs
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/games/rstnode/rst-core/src/wire/proto/response.rs
diff --git a/games/rstnode/rst-core/src/wire/req.rs b/games/rstnode/rst-core/src/wire/req.rs
index ffefcbdb6ac7..be5c905795a9 100644
--- a/games/rstnode/rst-core/src/wire/req.rs
+++ b/games/rstnode/rst-core/src/wire/req.rs
@@ -1,4 +1,4 @@
-use super::{action::Action, LobbyId, MatchId, User};
+use super::{game::Action, LobbyId, MatchId, User};
use serde::{Deserialize, Serialize};
/// A message sent from the game client to the server
diff --git a/games/rstnode/rst-core/src/wire/resp.rs b/games/rstnode/rst-core/src/wire/resp.rs
index ef2e192a6044..99598cceb9e6 100644
--- a/games/rstnode/rst-core/src/wire/resp.rs
+++ b/games/rstnode/rst-core/src/wire/resp.rs
@@ -27,9 +27,11 @@ pub enum Response {
GameUpdate(UpdateState),
/// Leave the match (forfeit)
LeaveGame(Result<(), MatchErr>),
+ /// The given request was entirely invalid
+ Invalid,
}
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RegErr {
/// The password is way too bad
BadPassword,
@@ -39,7 +41,7 @@ pub enum RegErr {
OtherError,
}
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AuthErr {
/// Wrong password for the user
WrongPassword,
@@ -51,7 +53,7 @@ pub enum AuthErr {
OtherError,
}
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum LobbyErr {
/// The requested room is already full
RoomFull,
@@ -85,7 +87,7 @@ pub enum UpdateState {
}
/// An error that can occur in a match
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MatchErr {
/// The provided player wasn't in the match (anymore?)
NotInMatch,