private static WaitableLoRaRequest Create(RadioMetadata radioMetadata, IEnumerable <TimeSpan> elapsedTimes, IDownstreamMessageSender downstreamMessageSender = null, TimeSpan?startTimeOffset = null, bool useRealTimer = false, LoRaPayload loRaPayload = null, Region region = null) { var request = new WaitableLoRaRequest(radioMetadata, downstreamMessageSender ?? new TestDownstreamMessageSender(), DateTime.UtcNow.Subtract(startTimeOffset ?? TimeSpan.Zero)); var effectiveRegion = region ?? TestUtils.TestRegion; request.SetRegion(effectiveRegion); if (loRaPayload is not null) { request.SetPayload(loRaPayload); } if (!useRealTimer) { var timeWatcher = new TestLoRaOperationTimeWatcher(effectiveRegion, elapsedTimes); request.UseTimeWatcher(timeWatcher); } return(request); }
/// <summary> /// Creates a WaitableLoRaRequest that uses a deterministic time handler. /// </summary> /// <param name="rxpk">Rxpk instance.</param> /// <param name="downstreamMessageSender">DownstreamMessageSender instance.</param> /// <param name="startTimeOffset">Is subtracted from the current time to determine the start time for the deterministic time watcher. Default is TimeSpan.Zero.</param> /// <param name="constantElapsedTime">Controls how much time is elapsed when querying the time watcher. Default is TimeSpan.Zero.</param> /// <param name="useRealTimer">Allows you to opt-in to use a real, non-deterministic time watcher.</param> public static WaitableLoRaRequest Create(RadioMetadata radioMetadata, LoRaPayload loRaPayload, IDownstreamMessageSender downstreamMessageSender = null, TimeSpan?startTimeOffset = null, TimeSpan?constantElapsedTime = null, bool useRealTimer = false, Region region = null) => Create(radioMetadata, LoRaEnumerable.RepeatInfinite(constantElapsedTime ?? TimeSpan.Zero), downstreamMessageSender, startTimeOffset, useRealTimer, loRaPayload, region: region);
public LoRaRequest( RadioMetadata radioMetadata, IDownstreamMessageSender downstreamMessageSender, DateTime startTime) { RadioMetadata = radioMetadata; DownstreamMessageSender = downstreamMessageSender; StartTime = startTime; }
/// <summary> /// Creates a WwaitableLoRaRequest that is configured to miss certain receive windows. /// </summary> /// <param name="rxpk">Rxpk instance.</param> /// <param name="downstreamMessageSender">DownstreamMessageSender instance.</param> /// <param name="inTimeForC2DMessageCheck">If set to true it ensures that processing is fast enough that C2D messages can be checked.</param> /// <param name="inTimeForAdditionalMessageCheck">If set to true it ensures that processing is fast enough that additional C2D messages can be checked.</param> /// <param name="inTimeForDownlinkDelivery">If set to true it ensures that processing is fast enough that C2D messages can be checked.</param> public static WaitableLoRaRequest Create(RadioMetadata radioMetadata, IDownstreamMessageSender downstreamMessageSender, bool inTimeForC2DMessageCheck, bool inTimeForAdditionalMessageCheck, bool inTimeForDownlinkDelivery, LoRaPayloadData loRaPayloadData = null) { var c2dMessageCheckTimeSpan = inTimeForC2DMessageCheck ? TimeSpan.FromMilliseconds(10) : TimeSpan.FromSeconds(10); var additionalMessageCheckTimeSpan = inTimeForAdditionalMessageCheck ? TimeSpan.FromMilliseconds(10) : TimeSpan.FromSeconds(10); var downlinkDeliveryTimeSpan = inTimeForDownlinkDelivery ? TimeSpan.FromMilliseconds(10) : TimeSpan.FromSeconds(10); return(Create(radioMetadata, new[] { c2dMessageCheckTimeSpan, c2dMessageCheckTimeSpan, additionalMessageCheckTimeSpan, downlinkDeliveryTimeSpan }, downstreamMessageSender: downstreamMessageSender, loRaPayload: loRaPayloadData)); }
public DefaultClassCDevicesMessageSender( NetworkServerConfiguration configuration, ILoRaDeviceRegistry loRaDeviceRegistry, IDownstreamMessageSender downstreamMessageSender, ILoRaDeviceFrameCounterUpdateStrategyProvider frameCounterUpdateStrategyProvider, ILogger <DefaultClassCDevicesMessageSender> logger, Meter meter) { this.configuration = configuration; this.loRaDeviceRegistry = loRaDeviceRegistry; this.downstreamMessageSender = downstreamMessageSender; this.frameCounterUpdateStrategyProvider = frameCounterUpdateStrategyProvider; this.logger = logger; this.c2dMessageTooLong = meter?.CreateCounter <int>(MetricRegistry.C2DMessageTooLong); }
public LnsProtocolMessageProcessor(IBasicsStationConfigurationService basicsStationConfigurationService, WebSocketWriterRegistry <StationEui, string> socketWriterRegistry, IDownstreamMessageSender downstreamMessageSender, IMessageDispatcher messageDispatcher, ILogger <LnsProtocolMessageProcessor> logger, RegistryMetricTagBag registryMetricTagBag, Meter meter) { this.basicsStationConfigurationService = basicsStationConfigurationService; this.socketWriterRegistry = socketWriterRegistry; this.downstreamMessageSender = downstreamMessageSender; this.messageDispatcher = messageDispatcher; this.logger = logger; this.registryMetricTagBag = registryMetricTagBag; this.joinRequestCounter = meter?.CreateCounter <int>(MetricRegistry.JoinRequests); this.uplinkMessageCounter = meter?.CreateCounter <int>(MetricRegistry.D2CMessagesReceived); this.unhandledExceptionCount = meter?.CreateCounter <int>(MetricRegistry.UnhandledExceptions); }
public static WaitableLoRaRequest CreateWaitableRequest(LoRaPayload loRaPayload, IDownstreamMessageSender downstreamMessageSender = null) => Create(TestUtils.GenerateTestRadioMetadata(), loRaPayload, downstreamMessageSender);
private WaitableLoRaRequest(RadioMetadata radioMetadata, IDownstreamMessageSender downstreamMessageSender, DateTime startTime) : base(radioMetadata, downstreamMessageSender, startTime) { }