protected Actor GetActorByPeer(PlayerPeer peer) { var actor = Actors.GetActorByPeer(peer); if (actor == null) { if (Log.IsDebugEnabled) { Log.DebugFormat("Actor not found for peer: {0}", peer.ConnectionId); } } return(actor); }
protected virtual bool TryAddPeerToGame(PlayerPeer peer, int actorNr, out Actor actor) { // check if the peer already exists in this game actor = Actors.GetActorByPeer(peer); if (actor != null) { return(false); } if (actorNr != 0) { actor = Actors.GetActorByNumber(actorNr); if (actor != null) { return(false); } } // create new actor instance actor = new Actor(peer); if (actorNr != 0) { actor.ActorNr = actorNr; } else { _actorNumberCounter++; actor.ActorNr = _actorNumberCounter; } Actors.Add(actor); if (Log.IsDebugEnabled) { Log.DebugFormat("Actor added: {0} to game: {1}", actor.ActorNr, Name); } return(true); }
protected virtual void HandleSetPropertiesOperation( PlayerPeer peer, SetPropertiesRequest setPropertiesRequest, SendParameters sendParameters) { // check if peer has joined this room instance var sender = GetActorByPeer(peer); if (sender == null) { var response = new OperationResponse { OperationCode = setPropertiesRequest.OperationRequest.OperationCode, ReturnCode = -1, DebugMessage = "Room not joined" }; peer.SendOperationResponse(response, sendParameters); return; } if (setPropertiesRequest.ActorNumber > 0) { var actor = Actors.GetActorByNumber(setPropertiesRequest.ActorNumber); if (actor == null) { peer.SendOperationResponse( new OperationResponse { OperationCode = setPropertiesRequest.OperationRequest.OperationCode, ReturnCode = -1, DebugMessage = string.Format( "Actor with number {0} not found.", setPropertiesRequest.ActorNumber) }, sendParameters); return; } actor.Properties.SetProperties(setPropertiesRequest.Properties); } else { Properties.SetProperties(setPropertiesRequest.Properties); } peer.SendOperationResponse( new OperationResponse { OperationCode = setPropertiesRequest.OperationRequest.OperationCode }, sendParameters); // if the optional paramter Broadcast is set a EvPropertiesChanged // event will be send to room actors if (setPropertiesRequest.Broadcast) { var actor = Actors.GetActorByPeer(peer); var recipients = Actors.GetExcludedList(actor); var propertiesChangedEvent = new PropertiesChangedEvent(actor.ActorNr) { TargetActorNumber = setPropertiesRequest.ActorNumber, Properties = setPropertiesRequest.Properties }; PublishEvent(propertiesChangedEvent, recipients, sendParameters); } }