/// <summary> /// Dispatches a request. /// </summary> public void DispatchRequest(LoRaRequest request) { if (request is null) { throw new ArgumentNullException(nameof(request)); } if (request.Payload is null) { throw new LoRaProcessingException(nameof(request.Payload), LoRaProcessingErrorCode.PayloadNotSet); } if (request.Region is null) { throw new LoRaProcessingException(nameof(request.Region), LoRaProcessingErrorCode.RegionNotSet); } var loggingRequest = new LoggingLoRaRequest(request, this.loggerFactory.CreateLogger <LoggingLoRaRequest>(), this.d2cMessageDeliveryLatencyHistogram); if (request.Payload.MessageType == MacMessageType.JoinRequest) { DispatchLoRaJoinRequest(loggingRequest); } else if (request.Payload.MessageType is MacMessageType.UnconfirmedDataUp or MacMessageType.ConfirmedDataUp) { DispatchLoRaDataMessage(loggingRequest); }
/// <summary> /// Dispatches a request /// </summary> public void DispatchRequest(LoRaRequest request) { if (!LoRaPayload.TryCreateLoRaPayload(request.Rxpk, out LoRaPayload loRaPayload)) { Logger.Log("There was a problem in decoding the Rxpk", LogLevel.Error); request.NotifyFailed(LoRaDeviceRequestFailedReason.InvalidRxpk); return; } if (this.loraRegion == null) { if (!RegionManager.TryResolveRegion(request.Rxpk, out var currentRegion)) { // log is generated in Region factory // move here once V2 goes GA request.NotifyFailed(LoRaDeviceRequestFailedReason.InvalidRegion); return; } this.loraRegion = currentRegion; } request.SetPayload(loRaPayload); request.SetRegion(this.loraRegion); var loggingRequest = new LoggingLoRaRequest(request); if (loRaPayload.LoRaMessageType == LoRaMessageType.JoinRequest) { this.DispatchLoRaJoinRequest(loggingRequest); } else if (loRaPayload.LoRaMessageType == LoRaMessageType.UnconfirmedDataUp || loRaPayload.LoRaMessageType == LoRaMessageType.ConfirmedDataUp) { this.DispatchLoRaDataMessage(loggingRequest); } else { Logger.Log("Unknwon message type in rxpk, message ignored", LogLevel.Error); } }
private void DispatchLoRaJoinRequest(LoggingLoRaRequest request) => this.joinRequestHandler.DispatchRequest(request);