/// <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()); } }
/// <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; }