protected virtual void HandleGetPropertiesOperation( PlayerPeer peer, GetPropertiesRequest getPropertiesRequest, SendParameters sendParameters) { var response = new GetPropertiesResponse(); // check if game properties should be returned if ((getPropertiesRequest.PropertyType & (byte)PropertyType.Game) == (byte)PropertyType.Game) { response.GameProperties = Properties.GetProperties(getPropertiesRequest.GamePropertyKeys); } // check if actor properties should be returned if ((getPropertiesRequest.PropertyType & (byte)PropertyType.Actor) == (byte)PropertyType.Actor) { response.ActorProperties = new Hashtable(); if (getPropertiesRequest.ActorNumbers == null) { foreach (var actor in Actors) { var actorProperties = actor.Properties.GetProperties(getPropertiesRequest.ActorPropertyKeys); response.ActorProperties.Add(actor.ActorNr, actorProperties); } } else { foreach (var actorNumber in getPropertiesRequest.ActorNumbers) { var actor = Actors.GetActorByNumber(actorNumber); if (actor != null) { var actorProperties = actor.Properties.GetProperties(getPropertiesRequest.ActorPropertyKeys); response.ActorProperties.Add(actorNumber, actorProperties); } } } } peer.SendOperationResponse( new OperationResponse(getPropertiesRequest.OperationRequest.OperationCode, response), sendParameters); }
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); } }