public void SetDeviceState(SetDeviceStateData setDeviceStateData) { var device = UserDeviceService.GetBySecretKey(setDeviceStateData.SecretKey); if (device != null) { DeviceHistoricalState deviceHistoricalState = new DeviceHistoricalState() { State = device.ActualState, StateTransitionDateTime = DateTime.Now, DeviceId = device.Id }; UserDeviceService.SetupFreshLastPing(device); if (UserDeviceService.UpdateDeviceState(device, setDeviceStateData.DeviceState)) { var historialStateES = new EntityService <DeviceHistoricalState>(); historialStateES.Create(deviceHistoricalState); } IKernel kernel = new StandardKernel(new ConnectYourselfNinjectModule()); var deviceEventsContainer = kernel.Get <IDevicesEventsContainer>(); deviceEventsContainer.RegisterDeviceStateChangeEvent(new DeviceStateChangedEvent { DeviceId = device.Id, DateTime = deviceHistoricalState.StateTransitionDateTime, State = setDeviceStateData.DeviceState, AppUserId = device.AppUserId }); } }
public IHttpActionResult SetDeviceState(SetDeviceStateData setDeviceStateData) { var userId = User.Identity.GetUserId(); UserDeviceService userDeviceService = new UserDeviceService(); if (setDeviceStateData == null) { return(BadRequest("Input is null")); } var device = userDeviceService.GetBySecretKey(setDeviceStateData.SecretKey); if (device != null) { DeviceHistoricalState deviceHistoricalState = new DeviceHistoricalState() { State = device.ActualState, StateTransitionDateTime = DateTime.Now, DeviceId = device.Id }; if (userDeviceService.UpdateDeviceState(device, setDeviceStateData.DeviceState)) { var historialStateES = new EntityService <DeviceHistoricalState>(); historialStateES.Create(deviceHistoricalState); IKernel kernel = new StandardKernel(new ConnectYourselfNinjectModule()); var deviceEventsContainer = kernel.Get <IDevicesEventsContainer>(); deviceEventsContainer.RegisterDeviceStateChangeEvent(new DeviceStateChangedEvent { DeviceId = device.Id, DateTime = deviceHistoricalState.StateTransitionDateTime, State = setDeviceStateData.DeviceState, AppUserId = device.AppUserId }); //send state change message to device if (device.ConnectionState == DeviveConnectionState.FullDuplex && !String.IsNullOrEmpty(device.ConnectionId)) { var devicesHub = GlobalHost.ConnectionManager.GetHubContext <DevicesHub>(); devicesHub.Clients.Client(device.ConnectionId).RemoteSetState(setDeviceStateData.DeviceState); } return(Ok()); } else { return(BadRequest("Failed to update state device")); } } else { return(BadRequest("Device does not exists")); } }