예제 #1
0
 /// <summary>
 ///   Sends a <see cref = "LeaveEvent" /> to all <see cref = "Actor" />s.
 /// </summary>
 /// <param name = "peer">
 ///   The peer.
 /// </param>
 /// <param name = "leaveRequest">
 /// The <see cref="LeaveRequest"/> sent by the peer or null if the peer have been disconnected without sending a leave request.
 /// </param>
 protected virtual void PublishLeaveEvent(Actor actor, LeaveRequest leaveRequest)
 {
     if (this.Actors.Count > 0 && actor != null)
     {
         IEnumerable<int> actorNumbers = this.Actors.GetActorNumbers();
         var leaveEvent = new LeaveEvent(actor.ActorNr, actorNumbers.ToArray());
         this.PublishEvent(leaveEvent, this.Actors, new SendParameters());
     }
 }
예제 #2
0
파일: LiteGame.cs 프로젝트: gdlprj/duscusys
        /// <summary>
        ///   Removes a peer from the game. 
        ///   This method is called if a client sends a <see cref = "LeaveRequest" /> or disconnects.
        /// </summary>
        /// <param name = "peer">
        ///   The <see cref = "LitePeer" /> to remove.
        /// </param>
        /// <returns>
        ///   The actor number of the removed actor. 
        ///   If the specified peer does not exists -1 will be returned.
        /// </returns>
        protected virtual int RemovePeerFromGame(LitePeer peer)
        {
            Actor actor = this.Actors.RemoveActorByPeer(peer);
            if (actor == null)
            {
                if (Log.IsWarnEnabled)
                {
                    Log.WarnFormat("RemovePeerFromGame - Actor to remove not found for peer: {0}", peer.ConnectionId);
                }

                return -1;
            }

            this.cachedEvents.Remove(actor.ActorNr);

            // raise leave event
            if (this.Actors.Count > 0)
            {
                IEnumerable<int> actorNumbers = this.Actors.GetActorNumbers();
                var leaveEvent = new LeaveEvent(actor.ActorNr, actorNumbers.ToArray());
                this.PublishEvent(leaveEvent, this.Actors, new SendParameters());
            }

            return actor.ActorNr;
        }