Example #1
0
        private void sendMembersSnapshot(ILobbyMember excludedMember = null)
        {
            var LobbyMembersSnapshot = new LobbyMembersSnapshot
            {
                LobbyMembers = connectedPlayers.Select(player => player.User).ToArray()
            };

            sendMessage(player => player.SendLobbyMembersSnapshot(LobbyMembersSnapshot), excludedMember);
        }
Example #2
0
 private void sendMessage(Action <ILobbyMember> send, ILobbyMember excludedMember)
 {
     foreach (var connectedPlayer in connectedPlayers)
     {
         if (connectedPlayer != excludedMember)
         {
             send(connectedPlayer);
         }
     }
 }
Example #3
0
        /// <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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
 public void DisconnectPlayer(ILobbyMember member)
 {
     lock (syncObject)
     {
         if (member != owner)
         {
             connectedPlayers.Remove(member);
             sendMembersSnapshot();
         }
         else
         {
             sendMessage(player => player.SendLobbyClosed(), member);
             LobbyManagerRepository.Instance.RemoveLobbyManager(this);
         }
     }
 }