public FunctionBundler CreateIfRequired( string gatewayId, LoRaPayloadData loRaPayload, LoRaDevice loRaDevice, IDeduplicationStrategyFactory deduplicationFactory, LoRaRequest request) { if (!string.IsNullOrEmpty(loRaDevice.GatewayID)) { // single gateway mode return(null); } var context = new FunctionBundlerExecutionContext { DeduplicationFactory = deduplicationFactory, FCntDown = loRaDevice.FCntDown, FCntUp = loRaPayload.GetFcnt(), GatewayId = gatewayId, LoRaDevice = loRaDevice, LoRaPayload = loRaPayload, Request = request }; var qualifyingExecutionItems = new List <IFunctionBundlerExecutionItem>(functionItems.Count); for (var i = 0; i < functionItems.Count; i++) { var itm = functionItems[i]; if (itm.RequiresExecution(context)) { qualifyingExecutionItems.Add(itm); } } if (qualifyingExecutionItems.Count == 0) { return(null); } var bundlerRequest = new FunctionBundlerRequest { ClientFCntDown = context.FCntDown, ClientFCntUp = context.FCntUp, GatewayId = gatewayId, Rssi = context.Request.Rxpk.Rssi, }; for (var i = 0; i < qualifyingExecutionItems.Count; i++) { qualifyingExecutionItems[i].Prepare(context, bundlerRequest); } Logger.Log(loRaDevice.DevEUI, "FunctionBundler request: ", bundlerRequest, LogLevel.Debug); return(new FunctionBundler(loRaDevice.DevEUI, this.deviceApi, bundlerRequest, qualifyingExecutionItems, context)); }
public FunctionBundlerExecutionContext(string gatewayId, uint fCntUp, uint fCntDown, LoRaPayloadData loRaPayload, LoRaDevice loRaDevice, IDeduplicationStrategyFactory deduplicationFactory, LoRaRequest request) { GatewayId = gatewayId; FCntUp = fCntUp; FCntDown = fCntDown; LoRaPayload = loRaPayload; LoRaDevice = loRaDevice; DeduplicationFactory = deduplicationFactory; Request = request; }
public DefaultLoRaDataRequestHandler( NetworkServerConfiguration configuration, ILoRaDeviceFrameCounterUpdateStrategyProvider frameCounterUpdateStrategyProvider, ILoRaPayloadDecoder payloadDecoder, IDeduplicationStrategyFactory deduplicationFactory, ILoRaADRStrategyProvider loRaADRStrategyProvider, ILoRAADRManagerFactory loRaADRManagerFactory, IFunctionBundlerProvider functionBundlerProvider, IClassCDeviceMessageSender classCDeviceMessageSender = null) { this.configuration = configuration; this.frameCounterUpdateStrategyProvider = frameCounterUpdateStrategyProvider; this.payloadDecoder = payloadDecoder; this.deduplicationFactory = deduplicationFactory; this.classCDeviceMessageSender = classCDeviceMessageSender; this.loRaADRStrategyProvider = loRaADRStrategyProvider; this.loRaADRManagerFactory = loRaADRManagerFactory; this.functionBundlerProvider = functionBundlerProvider; }
public TestLoRaDeviceFactory( NetworkServerConfiguration configuration, ILoRaDeviceFrameCounterUpdateStrategyProvider frameCounterUpdateStrategyProvider, ILoRaDeviceClient loRaDeviceClient, IDeduplicationStrategyFactory deduplicationFactory, ILoRaADRStrategyProvider adrStrategyProvider, ILoRAADRManagerFactory adrManagerFactory, IFunctionBundlerProvider functionBundlerProvider, ILoRaDeviceClientConnectionManager connectionManager) : this(loRaDeviceClient) { this.configuration = configuration; this.frameCounterUpdateStrategyProvider = frameCounterUpdateStrategyProvider; this.deduplicationFactory = deduplicationFactory; this.adrStrategyProvider = adrStrategyProvider; this.adrManagerFactory = adrManagerFactory; this.functionBundlerProvider = functionBundlerProvider; this.connectionManager = connectionManager; }
public TestDefaultLoRaRequestHandler( NetworkServerConfiguration configuration, ILoRaDeviceFrameCounterUpdateStrategyProvider frameCounterUpdateStrategyProvider, IConcentratorDeduplication concentratorDeduplication, ILoRaPayloadDecoder payloadDecoder, IDeduplicationStrategyFactory deduplicationFactory, ILoRaADRStrategyProvider loRaADRStrategyProvider, ILoRAADRManagerFactory loRaADRManagerFactory, IFunctionBundlerProvider functionBundlerProvider, ITestOutputHelper testOutputHelper) : base( configuration, frameCounterUpdateStrategyProvider, concentratorDeduplication, payloadDecoder, deduplicationFactory, loRaADRStrategyProvider, loRaADRManagerFactory, functionBundlerProvider, new TestOutputLogger <DefaultLoRaDataRequestHandler>(testOutputHelper), TestMeter.Instance) { this.configuration = configuration; }
public FunctionBundler CreateIfRequired( string gatewayId, LoRaPayloadData loRaPayload, LoRaDevice loRaDevice, IDeduplicationStrategyFactory deduplicationFactory, LoRaRequest request) { if (loRaPayload is null) { throw new System.ArgumentNullException(nameof(loRaPayload)); } if (loRaDevice is null) { throw new System.ArgumentNullException(nameof(loRaDevice)); } if (!string.IsNullOrEmpty(loRaDevice.GatewayID)) { // single gateway mode return(null); } var context = new FunctionBundlerExecutionContext(gatewayId, loRaPayload.Fcnt, loRaDevice.FCntDown, loRaPayload, loRaDevice, deduplicationFactory, request); var qualifyingExecutionItems = new List <IFunctionBundlerExecutionItem>(functionItems.Count); for (var i = 0; i < functionItems.Count; i++) { var itm = functionItems[i]; if (itm.RequiresExecution(context)) { qualifyingExecutionItems.Add(itm); } } if (qualifyingExecutionItems.Count == 0) { return(null); } var bundlerRequest = new FunctionBundlerRequest { ClientFCntDown = context.FCntDown, ClientFCntUp = context.FCntUp, GatewayId = gatewayId, Rssi = context.Request.RadioMetadata.UpInfo.ReceivedSignalStrengthIndication, }; for (var i = 0; i < qualifyingExecutionItems.Count; i++) { qualifyingExecutionItems[i].Prepare(context, bundlerRequest); this.logger.LogDebug("FunctionBundler request finished preparing."); } if (this.logger.IsEnabled(LogLevel.Debug)) { this.logger.LogDebug($"FunctionBundler request: {JsonSerializer.Serialize(bundlerRequest)}"); } return(new FunctionBundler(loRaDevice.DevEUI, this.deviceApi, bundlerRequest, qualifyingExecutionItems, context, loggerFactory.CreateLogger <FunctionBundler>())); }