// CreateGame handles the case where a player sends a CreateGame message func CreateGame(conn *connection.Conn, allGames map[string]*games.Game, message messages.CreateGameMessage) { serverlog.General("Received CreateGame message from", conn.Identification()) if !conn.Registered { serverlog.General("Unregistered", conn.Identification(), "called createGame") denied := messages.NewCreateGameDeniedMessage(message.GameName, "You are not registered") conn.Write(denied.Bytes()) return } if conn.InGame { serverlog.General(conn.Identification(), "tried to create a new game but is already in game:", allGames[conn.GameID].Name) denied := messages.NewCreateGameDeniedMessage(message.GameName, "You are already in a game") conn.Write(denied.Bytes()) return } serverlog.General("Creating game:", message.GameName, "by", conn.Identification()) game := games.NewGame(conn, message.GameName) serverlog.General(conn.Identification(), "setting InGame to true and Game to the game:", game.Name) conn.InGame = true conn.GameID = game.ID serverlog.General("Attatching", game.Identification(), "to games list") allGames[game.ID] = game approved := messages.NewCreateGameApprovedMessage(game.ID, game.Name) conn.Write(approved.Bytes()) }
// JoinGame handles the case where a player sends a JoinGame message func JoinGame(conn *connection.Conn, allGames map[string]*games.Game, message messages.JoinGameMessage) { serverlog.General("Received JoinGame message from conn:", conn.Alias) if !conn.Registered { serverlog.General("Unregistered", conn.Identification, "called JoinGame") denied := messages.NewJoinGameDeniedMessage("You have not registered an Alias") conn.Write(denied.Bytes()) return } if conn.InGame { serverlog.General(conn.Identification(), "attempted to join a game but is already in game:", allGames[conn.GameID].Name) denied := messages.NewJoinGameDeniedMessage("You re already in a game") conn.Write(denied.Bytes()) return } if _, ok := allGames[message.GameID]; !ok { serverlog.General(conn.Identification(), "attempted to join a non existing game:", message.GameID) denied := messages.NewJoinGameDeniedMessage("No games with that ID") conn.Write(denied.Bytes()) return } game := allGames[message.GameID] serverlog.General(conn.Identification(), "Successfully joined", game.Identification()) conn.InGame = true conn.GameID = game.ID game.Start(conn) go listenFinished(game, allGames) }
// LeaveGame handles the case where a player sends a LeaveGame message func LeaveGame(conn *connection.Conn, allGames map[string]*games.Game, message messages.LeaveGameMessage) { serverlog.General("Received LeaveGame message from", conn.Identification()) if !conn.Registered { serverlog.General("Unregistered", conn.Identification(), "called LeaveGame") return } if !conn.InGame { serverlog.General(conn.Identification(), "attempted to leave a game but isn't in a game:", allGames[conn.GameID].Name) return } if allGames[conn.GameID].Ready { // will be dealt with by game object return } conn.InGame = false delete(allGames, conn.GameID) }