1
0
mirror of https://github.com/TheGreyDiamond/Enlight.git synced 2025-12-16 23:10:45 +01:00

Joining works now

This commit is contained in:
TheGreyDiamond
2020-11-29 00:35:03 +01:00
parent f379d1c12d
commit 618cc6ed60
5 changed files with 169 additions and 103 deletions

238
index.js
View File

@@ -1,13 +1,20 @@
const { app, BrowserWindow, screen, ipcMain, BrowserView } = require("electron"); const {
var Config = require('config-js'); app,
BrowserWindow,
screen,
ipcMain,
BrowserView,
} = require("electron");
var Config = require("config-js");
const fs = require("fs"); const fs = require("fs");
const { win32 } = require("path"); const { win32 } = require("path");
const sysInf = require("systeminformation"); const sysInf = require("systeminformation");
const dgram = require("dgram"); const dgram = require("dgram");
var server = dgram.createSocket("udp4"); var server = dgram.createSocket("udp4");
const express = require('express'); const express = require("express");
const { time } = require("console"); const { time } = require("console");
const restApp = express() const { nanoid } = require("nanoid");
const restApp = express();
const restPort = 33334; const restPort = 33334;
const PORT = 33333; const PORT = 33333;
@@ -26,7 +33,7 @@ var preloadedPageLookup = {};
var pageLookup = {}; var pageLookup = {};
pageLookup["index"] = "index.html"; pageLookup["index"] = "index.html";
pageLookup["session"] = "sessions.html"; pageLookup["session"] = "sessions.html";
pageLookup["header"] = "header.html" pageLookup["header"] = "header.html";
/// !!!-----------!!! /// !!!-----------!!!
// Session state data // Session state data
@@ -42,10 +49,12 @@ var sessionStateGoal = -1;
var mySession = { var mySession = {
name: "Unnamed Session", name: "Unnamed Session",
joinable: true, joinable: false,
passwordProtected: false, passwordProtected: false,
passwordHash: "", passwordHash: "",
members: 1 members: 1,
memberList: [],
usedUIDs: [],
}; };
var mainConn = ""; var mainConn = "";
@@ -53,60 +62,60 @@ var mainNetworkInterface = undefined;
for (const [key, value] of Object.entries(pageLookup)) { for (const [key, value] of Object.entries(pageLookup)) {
// check if the property/key is defined in the object itself, not in parent // check if the property/key is defined in the object itself, not in parent
if (pageLookup.hasOwnProperty(key)) { if (pageLookup.hasOwnProperty(key)) {
fs.readFile('ui_templates/' + value, 'utf8', function (err,data) { fs.readFile("ui_templates/" + value, "utf8", function (err, data) {
preLoadedAmount++; preLoadedAmount++;
if (err) { if (err) {
return console.log(err); return console.log(err);
} }
preloadedPageLookup[key] = data; preloadedPageLookup[key] = data;
});
});
} }
} }
function prepBroadcast(){ function prepBroadcast() {
server.bind(PORT, function(){ server.bind(PORT, function () {
server.setBroadcast(true); server.setBroadcast(true);
server.setMulticastTTL(128); server.setMulticastTTL(128);
server.addMembership(MULTICAST_ADDR); server.addMembership(MULTICAST_ADDR);
}); });
runy = true runy = true;
while(runy){ while (runy) {
//console.log("INTERFACE EMPTY", networkInterfaces) //console.log("INTERFACE EMPTY", networkInterfaces)
if(networkInterfaces.length >=1){ if (networkInterfaces.length >= 1) {
runy = false runy = false;
} }
} }
console.log("Waiting done") console.log("Waiting done");
var Ibroad = 0; var Ibroad = 0;
var names = []; var names = [];
while(Ibroad < networkInterfaces.length){ while (Ibroad < networkInterfaces.length) {
names.push(networkInterfaces[Ibroad].ifaceName) names.push(networkInterfaces[Ibroad].ifaceName);
Ibroad++; Ibroad++;
} }
last = fs.readFileSync("usrStore/lastNetwork.data") last = fs.readFileSync("usrStore/lastNetwork.data");
mainConn = last.toString(); mainConn = last.toString();
ind = names.indexOf(mainConn); ind = names.indexOf(mainConn);
mainNetworkInterface = networkInterfaces[ind] mainNetworkInterface = networkInterfaces[ind];
//console.info("!!!!!!!!!!!!!!!!!!!!!", mainConn, names, mainNetworkInterface) //console.info("!!!!!!!!!!!!!!!!!!!!!", mainConn, names, mainNetworkInterface)
} }
function broadcastNew() { function broadcastNew() {
var message = new Buffer(
var message = new Buffer("ENLIGHT_NEW_SESSION$" + String(mainNetworkInterface.ip4)); "ENLIGHT_NEW_SESSION$" + String(mainNetworkInterface.ip4)
);
server.send(message, 0, message.length, PORT, MULTICAST_ADDR); server.send(message, 0, message.length, PORT, MULTICAST_ADDR);
console.log("Sent " + message + " to the wire..."); console.log("Sent " + message + " to the wire...");
} }
function loadPage(name){ function loadPage(name) {
load = preloadedPageLookup[name] load = preloadedPageLookup[name];
if(load == undefined){ if (load == undefined) {
load = fs.readFileSync("ui_templates/" + pageLookup[name]).toString(); load = fs.readFileSync("ui_templates/" + pageLookup[name]).toString();
console.warn("Loading fallback for page " + name); console.warn("Loading fallback for page " + name);
} }
return(load) return load;
} }
function createWindow() { function createWindow() {
@@ -121,16 +130,15 @@ function createWindow() {
win.setMenuBarVisibility(false); win.setMenuBarVisibility(false);
win.setAutoHideMenuBar(true); win.setAutoHideMenuBar(true);
main = loadPage("index");
main = loadPage("index") header = loadPage("header");
header = loadPage("header")
// //
//header = fs.readFileSync("ui_templates/header.html").toString(); //header = fs.readFileSync("ui_templates/header.html").toString();
toLoad = header + main; toLoad = header + main;
fs.writeFileSync("ui_templates/temp.html", toLoad) fs.writeFileSync("ui_templates/temp.html", toLoad);
//win.loadURL("data:text/html;charset=utf-8," + encodeURI(toLoad)); //win.loadURL("data:text/html;charset=utf-8," + encodeURI(toLoad));
win.loadFile("ui_templates/temp.html") win.loadFile("ui_templates/temp.html");
return(win) return win;
} }
function createStartupInfo() { function createStartupInfo() {
@@ -152,7 +160,7 @@ function createStartupInfo() {
function doneLoading() { function doneLoading() {
var fadeOutI = 1; var fadeOutI = 1;
if(Object.keys(pageLookup).length == preLoadedAmount){ if (Object.keys(pageLookup).length == preLoadedAmount) {
aWin2.webContents.executeJavaScript( aWin2.webContents.executeJavaScript(
"document.getElementById('current').innerHTML = 'Done';" "document.getElementById('current').innerHTML = 'Done';"
); );
@@ -170,8 +178,8 @@ function doneLoading() {
clearInterval(fadeIntervall); clearInterval(fadeIntervall);
} }
}, 20); }, 20);
}else{ } else {
console.warn("Had to reschedule load finish") console.warn("Had to reschedule load finish");
setTimeout(doneLoading, 200); setTimeout(doneLoading, 200);
} }
} }
@@ -179,58 +187,85 @@ function doneLoading() {
function init() { function init() {
win = createWindow(); win = createWindow();
aWin2 = createStartupInfo(); aWin2 = createStartupInfo();
setInterval(function(){ setInterval(function () {
sysInf.networkInterfaces(function (data) { sysInf.networkInterfaces(function (data) {
networkInterfaces = data; networkInterfaces = data;
}); });
}, 2 * 60 * 1000) // Update network interface every 2 mins }, 2 * 60 * 1000); // Update network interface every 2 mins
sysInf.networkInterfaces(function (data) { sysInf.networkInterfaces(function (data) {
networkInterfaces = data; networkInterfaces = data;
}); });
var langs = new Config('./lang/langs_v1.js'); var langs = new Config("./lang/langs_v1.js");
sessionState = 0; // Init with no connection sessionState = 0; // Init with no connection
setTimeout(function(){ setTimeout(function () {
console.log("Starting restfulServer API interface") console.log("Starting restfulServer API interface");
restApp.listen(restPort, () => { restApp.listen(restPort, () => {
console.log(`Restful is running on http://localhost:${restPort}`) console.log(`Restful is running on http://localhost:${restPort}`);
}) });
restApp.get('/', (req, res) => { restApp.get("/", (req, res) => {
res.send('Hello World! The RestFul API of Enlight is up and working!') res.send("Hello World! The RestFul API of Enlight is up and working!");
}) });
restApp.get('/api/v1/ping', (req, res) => { restApp.get("/api/v1/ping", (req, res) => {
res.json({state:"Succes", uptime: time.time()}); res.json({ state: "Succes", uptime: time.time() });
}) });
restApp.get('/api/v1/session/info', (req, res) => { restApp.get("/api/v1/session/info", (req, res) => {
res.json({state:"Succes", name: mySession.name, joinAble: mySession.joinable, passwordProtected: mySession.passwordProtected}); res.json({
}) state: "Succes",
name: mySession.name,
joinAble: mySession.joinable,
passwordProtected: mySession.passwordProtected,
memberAmount: mySession.members,
});
});
restApp.get('/api/v1/session/join', (req, res) => { restApp.get("/api/v1/session/join", (req, res) => {
if(mySession.joinable){ if (mySession.joinable) {
if(mySession.passwordProtected == false){ if (mySession.passwordProtected == false) {
res.json({state: "Succes"}) uid = nanoid();
}else{ while (mySession.usedUIDs.includes(uid)) {
res.json({state: "Failed", message: "Passwords are not yet implemented", code: -1}) uid = nanoid();
}
mySession.usedUIDs.push(uid);
dev = {
type: "client",
ip: req.connection.remoteAddress,
uid: uid,
};
mySession.memberList.push();
mySession.members++;
res.json({ state: "Succes", uid: uid });
} else {
res.json({
state: "Failed",
message: "Passwords are not yet implemented",
code: -1,
});
} }
}else{ } else {
res.json({state: "Failed", message: "Session is not joinable.", code: 1}) res.json({
state: "Failed",
message: "Session is not joinable.",
code: 1,
});
} }
//name: mySession.name, joinAble: mySession.joinable, passwordProtected: mySession.passwordProtected}); //name: mySession.name, joinAble: mySession.joinable, passwordProtected: mySession.passwordProtected});
}) });
}, 20); }, 20);
// Handling sessioning // Handling sessioning
setInterval(function(){ setInterval(function () {
if(sessionStateGoal == 2){ if (sessionStateGoal == 2) {
broadcastNew(); broadcastNew();
sessionState = 2; sessionState = 2;
} }
}, 400) }, 400);
setTimeout(doneLoading, 2000); setTimeout(doneLoading, 2000);
ipcMain.on("asynchronous-message", (event, arg) => { ipcMain.on("asynchronous-message", (event, arg) => {
@@ -239,65 +274,66 @@ function init() {
event.reply("asynchronous-reply", sysInf.battery().hasbattery); event.reply("asynchronous-reply", sysInf.battery().hasbattery);
} }
}); });
ipcMain.on("synchronous-message", (event, arg) => { ipcMain.on("synchronous-message", (event, arg) => {
if (String(arg).includes("hasBattery")) { if (String(arg).includes("hasBattery")) {
sysInf.battery(function (data) { sysInf.battery(function (data) {
event.returnValue = data.hasbattery; event.returnValue = data.hasbattery;
}); });
}else if (String(arg).includes("getBatteryLevel")) { } else if (String(arg).includes("getBatteryLevel")) {
sysInf.battery(function (data) { sysInf.battery(function (data) {
event.returnValue = data.percent; event.returnValue = data.percent;
}); });
}else if (String(arg).includes("loadOverride")) { } else if (String(arg).includes("loadOverride")) {
event.returnValue = false; event.returnValue = false;
}else if (String(arg).includes("getNetworks")) { } else if (String(arg).includes("getNetworks")) {
event.returnValue = networkInterfaces; event.returnValue = networkInterfaces;
}else if (String(arg).includes("set:newNetwork")) { } else if (String(arg).includes("set:newNetwork")) {
fs.writeFile('usrStore/lastNetwork.data', String(arg).split("|")[1], function (err) { fs.writeFile(
if (err) return console.log(err); "usrStore/lastNetwork.data",
console.log('Saved new main network'); String(arg).split("|")[1],
}); function (err) {
if (err) return console.log(err);
console.log("Saved new main network");
}
);
event.returnValue = ""; event.returnValue = "";
} else if (String(arg).includes("getMainNetwork")) { } else if (String(arg).includes("getMainNetwork")) {
try{ try {
last = fs.readFileSync("usrStore/lastNetwork.data") last = fs.readFileSync("usrStore/lastNetwork.data");
//console.log(last.toString()) //console.log(last.toString())
event.returnValue = last.toString(); event.returnValue = last.toString();
mainConn = last.toString(); mainConn = last.toString();
}catch(e){ } catch (e) {
sysInf.networkInterfaces(function (data) { sysInf.networkInterfaces(function (data) {
fs.writeFileSync("usrStore/lastNetwork.data", data[0].ifaceName); fs.writeFileSync("usrStore/lastNetwork.data", data[0].ifaceName);
event.returnValue = data[0].ifaceName event.returnValue = data[0].ifaceName;
}); });
} }
} else if (String(arg).includes("PAGE:change")) {
}else if (String(arg).includes("PAGE:change")) { newPage = String(arg).split(".")[1];
newPage = String(arg).split(".")[1] main = header = loadPage(newPage);
main = header = loadPage(newPage)
header = loadPage("header") header = loadPage("header");
toLoad = header + main; toLoad = header + main;
const timestamp = Date.now(); const timestamp = Date.now();
fs.writeFileSync("ui_templates/temp.html", toLoad) fs.writeFileSync("ui_templates/temp.html", toLoad);
const timestamp2 = Date.now(); const timestamp2 = Date.now();
win.loadFile("ui_templates/temp.html") win.loadFile("ui_templates/temp.html");
const timestamp3 = Date.now(); const timestamp3 = Date.now();
//win.loadFile("ui_templates/header.html") //win.loadFile("ui_templates/header.html")
event.returnValue = ""; event.returnValue = "";
}else if (String(arg).includes("SESSION:get.state")) { } else if (String(arg).includes("SESSION:get.state")) {
event.returnValue = sessionState; event.returnValue = sessionState;
} else if (String(arg).includes("SESSION:createNew")) {
}else if (String(arg).includes("SESSION:createNew")) { setTimeout(prepBroadcast, 5);
setTimeout(prepBroadcast, 5) mySession.name = String(arg).split("|")[1];
mySession.joinable = true;
sessionState = 1; sessionState = 1;
sessionStateGoal = 2; sessionStateGoal = 2;
event.returnValue = ""; event.returnValue = "";
} else {
}else{ event.returnValue = "ERR:UNKNOW_CMD";
event.returnValue = "ERR:UNKNOW_CMD"
} }
}); });
} }

5
package-lock.json generated
View File

@@ -851,6 +851,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}, },
"nanoid": {
"version": "3.1.18",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.18.tgz",
"integrity": "sha512-rndlDjbbHbcV3xi+R2fpJ+PbGMdfBxz5v1fATIQFq0DP64FsicQdwnKLy47K4kZHdRpmQXtz24eGsxQqamzYTA=="
},
"negotiator": { "negotiator": {
"version": "0.6.2", "version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",

View File

@@ -25,6 +25,7 @@
"ejs": "^3.1.5", "ejs": "^3.1.5",
"electron": "^11.0.2", "electron": "^11.0.2",
"express": "^4.17.1", "express": "^4.17.1",
"nanoid": "^3.1.18",
"systeminformation": "^4.30.1", "systeminformation": "^4.30.1",
"yarn": "^1.22.10" "yarn": "^1.22.10"
} }

View File

@@ -11,8 +11,20 @@
}, 1000); }, 1000);
</script> </script>
<button onclick='ipcRenderer.sendSync("synchronous-message", "SESSION:createNew");''> Name: <input type="text" value="Unnamed session" id="sessionName">
<button onclick='createNewSession()'>
Create new session Create new session
</button> </button>
<script>
function createNewSession() {
val = document.getElementById("sessionName").value
if (val.indexOf('|') > -1)
{
alert("Your Sessionname may not contain a |");
}
console.log(val)
ipcRenderer.sendSync("synchronous-message", "SESSION:createNew| " + val);
}
</script>
</body> </body>
</html> </html>

View File

@@ -214,8 +214,20 @@
}, 1000); }, 1000);
</script> </script>
<button onclick='ipcRenderer.sendSync("synchronous-message", "SESSION:createNew");''> Name: <input type="text" value="Unnamed session" id="sessionName">
<button onclick='createNewSession()'>
Create new session Create new session
</button> </button>
<script>
function createNewSession() {
val = document.getElementById("sessionName").value
if (val.indexOf('|') > -1)
{
alert("Your Sessionname may not contain a |");
}
console.log(val)
ipcRenderer.sendSync("synchronous-message", "SESSION:createNew| " + val);
}
</script>
</body> </body>
</html> </html>