예제 #1
0
        public void Spectate(Password password, CreateSpectatorData data, ISpectatorSessionEventListener listener)
        {
            if(state == SessionState.Ended)
                throw new BadSessionStateException();
            lock(Lock)
            {
                if(!this.data.SpectatorPassword.CheckPassword(password))
                    throw new BadSessionPasswordException();
                if(spectators.Count >= this.data.MaxSpectators)
                    throw new TooManySpectatorsException();

                int id = spectators.GenerateID();
                SessionSpectator spectator = new SessionSpectator(id, this, data);
                spectators.Add(id, spectator);
                spectatorList.Add(spectator);
                spectator.RegisterListener(listener);
                eventMgr.SendController(spectator);
                if(state == SessionState.Playing)
                    game.RegisterSpectator(spectator);
                eventMgr.OnSpectatorJoinedSession(spectator);
                server.SaveState();
            }
        }
예제 #2
0
 public void RegisterListener(ISpectatorSessionEventListener listener)
 {
     this.listener = listener;
 }
예제 #3
0
 public void UnregisterListener()
 {
     listener = null;
 }
 /// <summary>
 /// Adds the listener to the list of member listeners.
 /// </summary>
 /// <param name="listener">
 /// The listener to add.
 /// </param>
 public void AddListener(ISpectatorSessionEventListener listener)
 {
     if(!mainListeners.Contains(listener))
         mainListeners.Add(listener);
     if(!spectatorListeners.Contains(listener))
         spectatorListeners.Add(listener);
 }