Ejemplo n.º 1
0
        public DeduplicationResult Process(DeduplicationResult result, uint fCntUp)
        {
            if (result is null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            result.CanProcess = true; // can always process. Message is marked if it is a duplicate
            return(result);
        }
Ejemplo n.º 2
0
        public DeduplicationResult Process(DeduplicationResult result, uint fCntUp)
        {
            result.CanProcess = !result.IsDuplicate;

            if (result.IsDuplicate)
            {
                Logger.Log(this.loRaDevice.DevEUI, $"duplicate message '{fCntUp}' is dropped.", LogLevel.Debug);
            }

            return(result);
        }
        public DeduplicationResult Process(DeduplicationResult result, uint fCntUp)
        {
            if (result is null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            result.CanProcess = !result.IsDuplicate;

            if (result.IsDuplicate)
            {
                this.logger.LogDebug($"duplicate message '{fCntUp}' is dropped.");
            }

            return(result);
        }
        private async Task <bool> SendDeviceEventAsync(LoRaRequest request, LoRaDevice loRaDevice, LoRaOperationTimeWatcher timeWatcher, object decodedValue, DeduplicationResult deduplicationResult, byte[] decryptedPayloadData)
        {
            var loRaPayloadData = (LoRaPayloadData)request.Payload;
            var deviceTelemetry = new LoRaDeviceTelemetry(request.Rxpk, loRaPayloadData, decodedValue, decryptedPayloadData)
            {
                DeviceEUI = loRaDevice.DevEUI,
                GatewayID = this.configuration.GatewayID,
                Edgets    = (long)(timeWatcher.Start - DateTime.UnixEpoch).TotalMilliseconds
            };

            if (deduplicationResult != null && deduplicationResult.IsDuplicate)
            {
                deviceTelemetry.DupMsg = true;
            }

            Dictionary <string, string> eventProperties = null;

            if (loRaPayloadData.IsUpwardAck())
            {
                eventProperties = new Dictionary <string, string>();
                Logger.Log(loRaDevice.DevEUI, $"message ack received for cloud to device message id {loRaDevice.LastConfirmedC2DMessageID}", LogLevel.Information);
                eventProperties.Add(Constants.C2D_MSG_PROPERTY_VALUE_NAME, loRaDevice.LastConfirmedC2DMessageID ?? Constants.C2D_MSG_ID_PLACEHOLDER);
                loRaDevice.LastConfirmedC2DMessageID = null;
            }

            this.ProcessAndSendMacCommands(loRaPayloadData, ref eventProperties);

            if (await loRaDevice.SendEventAsync(deviceTelemetry, eventProperties))
            {
                string payloadAsRaw = null;
                if (deviceTelemetry.Data != null)
                {
                    payloadAsRaw = JsonConvert.SerializeObject(deviceTelemetry.Data, Formatting.None);
                }

                Logger.Log(loRaDevice.DevEUI, $"message '{payloadAsRaw}' sent to hub", LogLevel.Information);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 5
0
 public DeduplicationResult Process(DeduplicationResult result, uint fCntUp)
 {
     result.CanProcess = true; // can always process. Message is marked if it is a duplicate
     return(result);
 }