Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            }
        }