aboutsummaryrefslogtreecommitdiffstats
path: root/src/electron/ipc-api/localServer.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/electron/ipc-api/localServer.js')
-rw-r--r--src/electron/ipc-api/localServer.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/electron/ipc-api/localServer.js b/src/electron/ipc-api/localServer.js
new file mode 100644
index 000000000..2f8f1020a
--- /dev/null
+++ b/src/electron/ipc-api/localServer.js
@@ -0,0 +1,52 @@
1import { ipcMain, app } from 'electron';
2import path from 'path';
3import net from 'net';
4import startServer from '../../server/start';
5
6const DEFAULT_PORT = 45569;
7
8const portInUse = function (port) {
9 return new Promise((resolve) => {
10 const server = net.createServer((socket) => {
11 socket.write('Echo server\r\n');
12 socket.pipe(socket);
13 });
14
15 server.listen(port, '127.0.0.1');
16 server.on('error', () => {
17 resolve(true);
18 });
19 server.on('listening', () => {
20 server.close();
21 resolve(false);
22 });
23 });
24};
25
26let localServerStarted = false;
27
28export default (params) => {
29 ipcMain.on('startLocalServer', () => {
30 if (!localServerStarted) {
31 // Find next unused port for server
32 let port = DEFAULT_PORT;
33 (async () => {
34 // eslint-disable-next-line no-await-in-loop
35 while (await portInUse(port) && port < DEFAULT_PORT + 10) {
36 port += 1;
37 }
38 console.log('Starting local server on port', port);
39
40 startServer(
41 path.join(app.getPath('userData'), 'server.sqlite'),
42 port,
43 );
44
45 params.mainWindow.webContents.send('localServerPort', {
46 port,
47 });
48 })();
49 localServerStarted = true;
50 }
51 });
52};