private void sendMembersSnapshot(ILobbyMember excludedMember = null) { var LobbyMembersSnapshot = new LobbyMembersSnapshot { LobbyMembers = connectedPlayers.Select(player => player.User).ToArray() }; sendMessage(player => player.SendLobbyMembersSnapshot(LobbyMembersSnapshot), excludedMember); }
private void sendMessage(Action <ILobbyMember> send, ILobbyMember excludedMember) { foreach (var connectedPlayer in connectedPlayers) { if (connectedPlayer != excludedMember) { send(connectedPlayer); } } }
/// <summary> /// Do NOT use, only for tests. /// </summary> public LobbyManager(HanksiteSession ownerSession, LobbySettings settings, ILobbyMemberFactory lobbyMemberFactory, ILobbyManagerRepositoryDependencies repositoryDependencies) { this.lobbyMemberFactory = lobbyMemberFactory; this.repositoryDependencies = repositoryDependencies; this.owner = lobbyMemberFactory.CreateLobbyMember(ownerSession, this); this.settings = settings; this.numberOfPlayers = settings.NumberOfPlayers - settings.BotNumbers.Sum(botNumber => botNumber.Number); this.connectedPlayers = new List <ILobbyMember>(); this.connectedPlayers.Add(owner); }
public bool ConnectPlayer(HanksiteSession playerSession) { lock (syncObject) { if (connectedPlayers.Count == numberOfPlayers) { return(false); } ILobbyMember newMember = lobbyMemberFactory.CreateLobbyMember(playerSession, this); connectedPlayers.Add(newMember); sendMembersSnapshot(newMember); return(true); } }
public void DisconnectPlayer(ILobbyMember member) { lock (syncObject) { if (member != owner) { connectedPlayers.Remove(member); sendMembersSnapshot(); } else { sendMessage(player => player.SendLobbyClosed(), member); LobbyManagerRepository.Instance.RemoveLobbyManager(this); } } }