Skip to content

Commit d4b49e2

Browse files
authored
add demo mode (#11)
1 parent a0c53ee commit d4b49e2

File tree

11 files changed

+4820
-2805
lines changed

11 files changed

+4820
-2805
lines changed
Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,65 @@
11
import { IRacingSDK } from 'irsdk-node';
22
import { TelemetrySink } from './telemetrySink';
33
import { OverlayManager } from 'src/app/overlayManager';
4+
import type { IrSdkBridge, Session, Telemetry } from '@irdashies/types';
45

56
const TIMEOUT = 1000;
67

78
export async function publishIRacingSDKEvents(
89
telemetrySink: TelemetrySink,
910
overlayManager: OverlayManager
10-
) {
11+
): Promise<IrSdkBridge> {
1112
console.log('Loading iRacing SDK bridge...');
1213

13-
setInterval(async () => {
14+
let shouldStop = false;
15+
const runningStateInterval = setInterval(async () => {
1416
const isSimRunning = await IRacingSDK.IsSimRunning();
1517
console.log('Sending running state to window', isSimRunning);
1618
overlayManager.publishMessage('runningState', isSimRunning);
1719
}, 2000);
1820

19-
while (true) {
20-
if (await IRacingSDK.IsSimRunning()) {
21-
console.log('iRacing is running');
22-
const sdk = new IRacingSDK();
23-
sdk.autoEnableTelemetry = true;
21+
// Start the telemetry loop in the background
22+
(async () => {
23+
while (!shouldStop) {
24+
if (await IRacingSDK.IsSimRunning()) {
25+
console.log('iRacing is running');
26+
const sdk = new IRacingSDK();
27+
sdk.autoEnableTelemetry = true;
2428

25-
await sdk.ready();
29+
await sdk.ready();
2630

27-
while (sdk.waitForData(TIMEOUT)) {
28-
const telemetry = sdk.getTelemetry();
29-
const session = sdk.getSessionData();
30-
await new Promise((resolve) => setTimeout(resolve, 1000 / 60));
31+
while (!shouldStop && sdk.waitForData(TIMEOUT)) {
32+
const telemetry = sdk.getTelemetry();
33+
const session = sdk.getSessionData();
34+
await new Promise((resolve) => setTimeout(resolve, 1000 / 60));
3135

32-
if (telemetry) {
33-
overlayManager.publishMessage('telemetry', telemetry);
34-
telemetrySink.addTelemetry(telemetry);
35-
}
36+
if (telemetry) {
37+
overlayManager.publishMessage('telemetry', telemetry);
38+
telemetrySink.addTelemetry(telemetry);
39+
}
3640

37-
if (session) {
38-
overlayManager.publishMessage('sessionData', session);
39-
telemetrySink.addSession(session);
41+
if (session) {
42+
overlayManager.publishMessage('sessionData', session);
43+
telemetrySink.addSession(session);
44+
}
4045
}
46+
47+
console.log('iRacing is no longer publishing telemetry');
48+
} else {
49+
console.log('iRacing is not running');
4150
}
4251

43-
console.log('iRacing is no longer publishing telemetry');
44-
} else {
45-
console.log('iRacing is not running');
52+
await new Promise((resolve) => setTimeout(resolve, TIMEOUT));
4653
}
54+
})();
4755

48-
await new Promise((resolve) => setTimeout(resolve, TIMEOUT));
49-
}
56+
return {
57+
onTelemetry: (callback: (value: Telemetry) => void) => callback({} as Telemetry),
58+
onSessionData: (callback: (value: Session) => void) => callback({} as Session),
59+
onRunningState: (callback: (value: boolean) => void) => callback(false),
60+
stop: () => {
61+
shouldStop = true;
62+
clearInterval(runningStateInterval);
63+
}
64+
};
5065
}

src/app/bridge/iracingSdk/mock-data/mockSdkBridge.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ export async function publishIRacingSDKEvents(
1818
bridge.onRunningState((running) => {
1919
overlayManager.publishMessage('runningState', running);
2020
});
21+
return bridge;
2122
}

0 commit comments

Comments
 (0)