//Not really broadcast, since it sends each client a different LobbyStart JSON func BroadcastLobbyStart(lob *lobby.Lobby) { for _, slot := range lob.GetAllSlots() { player, _ := player.GetPlayerByID(slot.PlayerID) connectInfo := lobby.DecorateLobbyConnect(lob, player, slot.Slot) broadcaster.SendMessage(player.SteamID, "lobbyStart", connectInfo) } }
//get list of unready players, remove them from lobby (and add them as spectators) //plus, call the after lobby leave hook for each player removed func removeUnreadyPlayers(lobby *lobby.Lobby) { players := lobby.GetUnreadyPlayers() lobby.RemoveUnreadyPlayers(true) for _, player := range players { hooks.AfterLobbyLeave(lobby, player, false, true) } }
func AfterLobbyJoin(so *wsevent.Client, lob *lobby.Lobby, player *player.Player) { room := fmt.Sprintf("%s_private", GetLobbyRoom(lob.ID)) //make all sockets join the private room, given the one the player joined the lobby on //might close, so lobbyStart and lobbyReadyUp can be sent to other tabs sockets, _ := sessions.GetSockets(player.SteamID) for _, so := range sockets { socket.AuthServer.Join(so, room) } if lob.State == lobby.InProgress { // player is a substitute lob.AfterPlayerNotInGameFunc(player, 5*time.Minute, func() { // if player doesn't join game server in 5 minutes, // substitute them message := player.Alias() + " has been reported for not joining the game within 5 minutes" chat.SendNotification(message, int(lob.ID)) lob.Substitute(player) }) } broadcaster.SendMessage(player.SteamID, "lobbyJoined", lobby.DecorateLobbyData(lob, false)) }