Exemple #1
0
        private async Task ProcessFruitMessage(FruitMessage fruitMsg)
        {
            DateTime originalEventUTC = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc);

            if (fruitMsg.OriginalEventUTCTime != null)
            {
                originalEventUTC = DateTime.Parse(fruitMsg.OriginalEventUTCTime, null, System.Globalization.DateTimeStyles.RoundtripKind);
                Log.WriteLine("processing fruit message. parsed msg time {0} from {1}", originalEventUTC.ToString("o"), fruitMsg.OriginalEventUTCTime);
            }
            else
            {
                Log.WriteLine("msg has no time.  using current {0}", originalEventUTC.ToString("o"));
            }
            lock (FruitChanged)
            {
                if (originalEventUTC >= _lastFruitUTC)
                {
                    Log.WriteLine("processing fruit message. original event UTC {0} prev {1}", originalEventUTC.ToString("o"), _lastFruitUTC.ToString("o"));
                    FruitChanged?.Invoke(this, fruitMsg.FruitSeen);
                    _lastFruitUTC = originalEventUTC;
                }
                else
                {
                    Log.WriteLine("processing fruit message. ignoring stale message. original event UTC {0} prev {1}", originalEventUTC.ToString("o"), _lastFruitUTC.ToString("o"));
                }
            }
            await Task.CompletedTask;
        }
Exemple #2
0
        protected override async Task OnDesiredModulePropertyChanged(TwinCollection newDesiredProperties)
        {
            Log.WriteLine("derived desired properties contains {0} properties", newDesiredProperties.Count);
            await base.OnDesiredModulePropertyChanged(newDesiredProperties);

            DesiredPropertiesType <ConfigurationType> dp;

            if (!newDesiredProperties.Contains(Keys.Configuration))
            {
                Log.WriteLine("derived desired properties contains no configuration.  skipping...");
                return;
            }

            dp.Configuration = ((JObject)newDesiredProperties[Keys.Configuration]).ToObject <ConfigurationType>();
            Log.WriteLine("checking for update current desiredProperties {0} new dp {1}", _desiredProperties.ToString(), dp.ToString());
            var changed = _desiredProperties.Update(dp);

            if (changed)
            {
                Log.WriteLine("desired properties {0} different then current properties, notifying...", _desiredProperties.ToString());
                ConfigurationChanged?.Invoke(this, dp.Configuration);
                Log.WriteLine("local notification complete. updating reported properties to cloud twin");
                await UpdateReportedPropertiesAsync(new KeyValuePair <string, Object>(Keys.Configuration, JsonConvert.SerializeObject(_desiredProperties.Configuration)));
            }
            if (newDesiredProperties.Contains(Keys.FruitTest))
            {
                var fruit = (string)((JValue)newDesiredProperties[Keys.FruitTest]).Value;
                Log.WriteLine("fruittest {0}", fruit != null ? fruit : "(null)");
                if (fruit != null)
                {
                    Log.WriteLine("setting fruit {0}", fruit);
                    FruitChanged?.Invoke(this, fruit);
                }
            }
            Log.WriteLine("update complete -- current properties {0}", _desiredProperties.ToString());
        }
 protected void OnFruitChanged(Fruit fruit, bool isEaten)
 {
     FruitChanged?.Invoke(this, new FruitChangedEventArgs(fruit, isEaten));
 }