mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-05 18:01:56 +02:00
Co-authored-by: Hannah Lindrob <hannahlindrob@ourlook.com> Co-authored-by: Sapphire <imsapphire0@gmail.com>
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import os from 'os'
|
|
import { OSStats } from "../preload/interface";
|
|
import { ipcMain, IpcMainInvokeEvent } from 'electron';
|
|
import { IpcInvokeMap } from '../shared';
|
|
import net from 'net'
|
|
|
|
export const getPlatform = (): OSStats['type'] => {
|
|
switch (os.platform()) {
|
|
case 'darwin':
|
|
return 'macos';
|
|
case 'win32':
|
|
return 'windows';
|
|
case 'linux':
|
|
return 'linux';
|
|
default:
|
|
return 'unknown';
|
|
}
|
|
};
|
|
|
|
export const isPortAvailable = (port: number) => {
|
|
return new Promise((resolve) => {
|
|
const s = net.createServer();
|
|
s.once('error', (err) => {
|
|
s.close();
|
|
if ("code" in err && err["code"] == "EADDRINUSE") {
|
|
resolve(false);
|
|
} else {
|
|
resolve(false);
|
|
}
|
|
});
|
|
s.once('listening', () => {
|
|
resolve(true);
|
|
s.close();
|
|
});
|
|
s.listen(port);
|
|
});
|
|
};
|
|
|
|
export function handleIpc<K extends keyof IpcInvokeMap>(
|
|
channel: K,
|
|
handler: (
|
|
event: IpcMainInvokeEvent,
|
|
...args: Parameters<IpcInvokeMap[K]>
|
|
) => ReturnType<IpcInvokeMap[K]>
|
|
) {
|
|
ipcMain.handle(channel, (event, ...args) => {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
return handler(event, ...args as any);
|
|
});
|
|
}
|