private void _updateTimer_Elapsed(object sender) { var scsTelemetry = SharedMemory.Update <SCSTelemetry>(); // check if sdk is NOT running if (!scsTelemetry.SdkActive && !paused) { // if so don't check so often the data var tsInterval = new TimeSpan(0, 0, 0, 0, DefaultPausedUpdateInterval); _updateTimer.Change(tsInterval.Add(tsInterval), tsInterval); paused = true; // if sdk not active we don't need to do something return; } if (paused && scsTelemetry.SdkActive) { // ok sdk is active now paused = false; resume(); // going back to normal update rate } var time = scsTelemetry.Timestamp; Data?.Invoke(scsTelemetry, time != lastTime); //TODO: make it nicer thats a lot of code for such less work // Job start event if (wasOnJob != scsTelemetry.SpecialEventsValues.OnJob) { wasOnJob = scsTelemetry.SpecialEventsValues.OnJob; if (scsTelemetry.SpecialEventsValues.OnJob) { JobStarted?.Invoke(this, new EventArgs()); } } if (cancelled != scsTelemetry.SpecialEventsValues.JobCancelled) { cancelled = scsTelemetry.SpecialEventsValues.JobCancelled; if (scsTelemetry.SpecialEventsValues.JobCancelled) { JobCancelled?.Invoke(this, new EventArgs()); } } if (delivered != scsTelemetry.SpecialEventsValues.JobDelivered) { delivered = scsTelemetry.SpecialEventsValues.JobDelivered; if (scsTelemetry.SpecialEventsValues.JobDelivered) { JobDelivered?.Invoke(this, new EventArgs()); } } if (fined != scsTelemetry.SpecialEventsValues.Fined) { fined = scsTelemetry.SpecialEventsValues.Fined; if (scsTelemetry.SpecialEventsValues.Fined) { Fined?.Invoke(this, new EventArgs()); } } if (tollgate != scsTelemetry.SpecialEventsValues.Tollgate) { tollgate = scsTelemetry.SpecialEventsValues.Tollgate; if (scsTelemetry.SpecialEventsValues.Tollgate) { Tollgate?.Invoke(this, new EventArgs()); } } if (ferry != scsTelemetry.SpecialEventsValues.Ferry) { ferry = scsTelemetry.SpecialEventsValues.Ferry; if (scsTelemetry.SpecialEventsValues.Ferry) { Ferry?.Invoke(this, new EventArgs()); } } if (train != scsTelemetry.SpecialEventsValues.Train) { train = scsTelemetry.SpecialEventsValues.Train; if (scsTelemetry.SpecialEventsValues.Train) { Train?.Invoke(this, new EventArgs()); } } if (refuel != scsTelemetry.SpecialEventsValues.Refuel) { refuel = scsTelemetry.SpecialEventsValues.Refuel; if (scsTelemetry.SpecialEventsValues.Refuel) { Refuel?.Invoke(this, new EventArgs()); } } lastTime = time; }