Esempio n. 1
0
        /// <summary>
        ///   Handles the <see cref = "SetPropertiesRequest" /> and sends event <see cref = "PropertiesChangedEvent" /> to all <see cref = "Actor" />s in the room.
        /// </summary>
        /// <param name = "peer">
        ///   The peer.
        /// </param>
        /// <param name = "setPropertiesRequest">
        ///   The <see cref = "SetPropertiesRequest" /> operation to handle.
        /// </param>
        /// <param name = "sendParameters">
        ///   The send Parameters.
        /// </param>
        protected virtual void HandleSetPropertiesOperation(LitePeer peer, SetPropertiesRequest setPropertiesRequest, SendParameters sendParameters)
        {
            // check if peer has joined this room instance
            var sender = this.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)
            {
                Actor actor = this.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
            {
                this.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)
            {
                Actor actor = this.Actors.GetActorByPeer(peer);
                IEnumerable <Actor> recipients = this.Actors.GetExcludedList(actor);
                var propertiesChangedEvent     = new PropertiesChangedEvent(actor.ActorNr)
                {
                    TargetActorNumber = setPropertiesRequest.ActorNumber, Properties = setPropertiesRequest.Properties
                };

                this.PublishEvent(propertiesChangedEvent, recipients, sendParameters);
            }
        }
        private async Task HandleProperiesChangedEvent(PropertiesChangedEvent propertiesChangedEvent)
        {
            var device = new DeviceDescriptor(propertiesChangedEvent.DeviceId, propertiesChangedEvent.Properties);
            await _deviceRepository.InsertOrUpdate(device);

            var channelEvent = new ChannelEvent(propertiesChangedEvent.DeviceId, Events.DeviceUpdated, propertiesChangedEvent);

            _hubContext.Clients.Group(device.DeviceId).EventArrived(channelEvent);
        }