aboutsummaryrefslogtreecommitdiff
path: root/src/_if.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/_if.rs')
-rw-r--r--src/_if.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/_if.rs b/src/_if.rs
new file mode 100644
index 000000000000..91cb3a2daf18
--- /dev/null
+++ b/src/_if.rs
@@ -0,0 +1,43 @@
+//! A common trait interface between the server and the client
+
+use crate::wire::{
+ Action, AuthErr, Lobby, LobbyId, MatchErr, MatchId, RegErr, RoomErr, RoomUpdate, UpdateState,
+ User, UserId,
+};
+use async_trait::async_trait;
+use async_std::sync::Arc;
+use chrono::{DateTime, Utc};
+
+/// The main game interface implemented by the server and client
+#[async_trait]
+pub trait GameIf {
+ /// Register a new user on a game server
+ async fn register(self: Arc<Self>, name: String, pw: String) -> Result<UserId, RegErr>;
+
+ /// Login for an existing user
+ async fn login(self: Arc<Self>, name: String, pw: String) -> Result<User, AuthErr>;
+
+ /// End a user session (go offline)
+ async fn logout(self: Arc<Self>, user: User) -> Result<(), AuthErr>;
+
+ /// Register as an anonymous player
+ async fn anonymous(self: Arc<Self>, name: String) -> Result<User, AuthErr>;
+
+ /// Join a match-making lobby
+ async fn join(self: Arc<Self>, user: User, lobby: LobbyId) -> Result<Lobby, RoomErr>;
+
+ /// Leave a match-making lobby
+ async fn leave(self: Arc<Self>, user: User, lobby: LobbyId) -> Result<(), RoomErr>;
+
+ /// Set the player's ready state
+ async fn ready(self: Arc<Self>, user: User, lobby: LobbyId, ready: bool) -> RoomUpdate;
+
+ /// Send a start request (as lobby admin)
+ async fn start_req(self: Arc<Self>, user: User, lobby: LobbyId) -> DateTime<Utc>;
+
+ /// Perform a game action as a user
+ async fn perform_action(self: Arc<Self>, user: User, mtch: MatchId, act: Action) -> UpdateState;
+
+ /// Leave a match
+ async fn leave_match(self: Arc<Self>, user: User, mtch: MatchId) -> Result<(), MatchErr>;
+}