diff options
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.rs | 5 | ||||
-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.rs | 11 | ||||
-rw-r--r-- | games/rstnode/rst-core/src/wire/proto/mod.rs | 25 | ||||
-rw-r--r-- | games/rstnode/rst-core/src/wire/proto/request.rs | 41 | ||||
-rw-r--r-- | games/rstnode/rst-core/src/wire/proto/response.rs | 0 | ||||
-rw-r--r-- | games/rstnode/rst-core/src/wire/req.rs | 2 | ||||
-rw-r--r-- | games/rstnode/rst-core/src/wire/resp.rs | 10 |
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, |