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