示例#1
0
 private void OnTelemetryInfoChanged(TelemetryInfoChangedEventArgs e) => TelemetryInfoChanged?.Invoke(this, e);
示例#2
0
        private void Loop(CancellationToken cancellationToken)
        {
            int  lastUpdate   = -1;
            bool hasConnected = false;

            while (!cancellationToken.IsCancellationRequested)
            {
                // Check if we can find the sim
                if (sdk.IsConnected())
                {
                    if (!IsConnected)
                    {
                        // If this is the first time, raise the Connected event
                        RaiseEvent(OnStarted, EventArgs.Empty);
                        connectionSource.TrySetResult();
                    }

                    hasConnected = true;
                    IsConnected  = true;

                    readMutex.WaitOne(8);

                    // Update telemetry info

                    TelemetryData = new TelemetryData(sdk);

                    // Update session info

                    int newUpdate = sdk.Header.SessionInfoUpdate;
                    if (newUpdate != lastUpdate)
                    {
                        RawSessionData = sdk.GetSessionInfo();
                        SessionData    = deserializer.Deserialize <SessionData>(RawSessionData);

                        var args = new SessionInfoChangedEventArgs(SessionData, (double)sdk.GetData("SessionTime"));
                        RaiseEvent(OnSessionInfoChanged, args);

                        if (lastUpdate == -1)
                        {
                            firstDataSource.TrySetResult();
                        }

                        lastUpdate = newUpdate;
                    }

                    // Send telemetry event now to make sure both data is updated when either event is thrown

                    var telArgs = new TelemetryInfoChangedEventArgs(TelemetryData, (double)sdk.GetData("SessionTime"));
                    RaiseEvent(OnTelemetryInfoChanged, telArgs);
                }
                else if (hasConnected)
                {
                    // We have already been initialized before, so the sim is closing
                    RaiseEvent(OnStopped, EventArgs.Empty);

                    SessionData   = null;
                    TelemetryData = null;

                    sdk.Shutdown();
                    lastUpdate   = -1;
                    IsConnected  = false;
                    hasConnected = false;
                }
                else
                {
                    // Have not been initialized before and there is no connection. Try to find the sim.
                    IsConnected  = false;
                    hasConnected = false;

                    sdk.Startup();
                }

                // Sleep for a short amount of time until the next update is available
                if (IsConnected)
                {
                    if (waitTime <= 0 || waitTime > 1000)
                    {
                        waitTime = 15;
                    }

                    Thread.Sleep(waitTime);
                }
                else
                {
                    // Not connected yet, no need to check every 16 ms, let's try again in some time
                    Thread.Sleep(ConnectSleepTime);
                }
            }

            sdk.Shutdown();
            IsConnected = false;
        }