use log::{debug, info}; use spacetimedb::{ReducerContext, Table, ViewContext, reducer, view}; use crate::tables::{player::player, *}; mod reducers { mod game; } mod tables; #[reducer] pub fn clear_all(ctx: &ReducerContext) { for row in ctx.db.player().iter() { ctx.db.player().delete(row); } } #[reducer(client_connected)] pub fn login_or_add_player(ctx: &ReducerContext) { let identity = ctx.sender; // TODO remove player on disconnect if let Ok(player) = ctx.db.player().try_insert(Player { identity, id: 0, name: None, lobby_id: 0, ready: false, sort: true, hand: vec![], pond: vec![], drawn_tile: None, }) { debug!("added player: {:?}", player); } else { let player = ctx.db.player().identity().find(identity).unwrap(); debug!("player {:?} has reconnected", player) } } // #[reducer(init)] // pub fn init(_ctx: &ReducerContext) { // // Called when the module is initially published // } // #[reducer(client_connected)] // pub fn identity_connected(_ctx: &ReducerContext) { // // Called everytime a new client connects // } // #[reducer(client_disconnected)] // pub fn identity_disconnected(_ctx: &ReducerContext) { // // Called everytime a client disconnects // } // #[reducer] // pub fn add(ctx: &ReducerContext, name: String) { // ctx.db.player().insert(Player { name }); // } // #[reducer] // pub fn say_hello(ctx: &ReducerContext) { // for person in ctx.db.person().iter() { // log::info!("Hello, {}!", person.name); // } // log::info!("Hello, World!"); // } // #[reducer] // pub fn set_name(ctx: &ReducerContext, name: String) -> Result<(), String> { // if name.is_empty() { // return Err("names must not be empty".into()); // } // if let Some(player) = ctx.db.player().identity().find(ctx.sender) { // ctx.db.player().identity().update(Player { // name: Some(name), // ..player // }); // Ok(()) // } else { // Err("cannot set name for unknown user".into()) // } // }