public override Task <RoutingResponse> EnqueueControlMessage(ControlMessage request, ServerCallContext context) { RoutingResponse response; using (this.m_duration.NewTimer()) { this.m_logger.LogDebug("Received egress routing request for sensor {sensorId}.", request.SensorID); try { var dto = ControlMessageProtobufConverter.Convert(request); this.m_requests.Inc(); this.m_queue.Add(dto); response = new RoutingResponse { Count = 1, Message = "Messages queued.", ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray()) }; } catch (FormatException ex) { this.m_logger.LogWarning("Received messages from an invalid sensor. Exception: {exception}", ex); response = new RoutingResponse { Count = 0, Message = "Messages not queued. Invalid sensor ID.", ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray()) }; } } return(Task.FromResult(response)); }
public void EnqueueControlMessageToTarget(IPlatformMessage message, RoutingTarget target) { this.m_liveDataLock.Lock(); try { this.m_controlMessageQueues[target.Target].Messages.Add(ControlMessageProtobufConverter.Convert(message as ControlMessage)); this.m_gaugeLiveDataService.Inc(); } finally { this.m_liveDataLock.Unlock(); } }
public async Task <IActionResult> EnqueueControlMessageAsync([FromBody] ActuatorMessage message) { var response = new Response <GatewayResponse>(); if (!ObjectId.TryParse(message.SensorId, out var id)) { response.AddError("Invalid sensor ID."); return(this.BadRequest(response)); } var sensor = await this.m_sensors.GetAsync(id).ConfigureAwait(false); var auth = await this.AuthenticateUserForSensor(sensor, false).ConfigureAwait(false); if (!auth) { response.AddError($"Sensor {message.SensorId} is not authorized for user {this.m_currentUserId}"); return(this.Unauthorized(response)); } var controlMessage = new Data.DTO.ControlMessage { Data = message.Data, Destination = ControlMessageType.Mqtt, PlatformTimestamp = DateTime.UtcNow, Timestamp = DateTime.UtcNow, Secret = sensor.Secret, SensorId = id }; var json = JsonConvert.SerializeObject(controlMessage); this.m_auth.SignControlMessage(controlMessage, json); await this.m_client.RouteAsync(ControlMessageProtobufConverter.Convert(controlMessage), CancellationToken.None) .ConfigureAwait(false); response.Data = new GatewayResponse { Message = "Control message received and queued.", Queued = 1 }; return(this.Ok(response)); }