From 732fa930eec2c9deba1d6e22cf92b5863a4cbd62 Mon Sep 17 00:00:00 2001 From: Benjamin Kraft Date: Sun, 2 Apr 2023 16:56:28 +0200 Subject: [PATCH] https to http, proxied server --- public/data/scripts/online.js | 285 +++++++++++++++--------------- public/data/settings/get_port.php | 3 - server/package-lock.json | 11 -- server/package.json | 1 - server/src/index.ts | 4 +- server/src/start.ts | 18 +- 6 files changed, 152 insertions(+), 170 deletions(-) delete mode 100644 public/data/settings/get_port.php diff --git a/public/data/scripts/online.js b/public/data/scripts/online.js index e1c232c..47c28b4 100644 --- a/public/data/scripts/online.js +++ b/public/data/scripts/online.js @@ -24,161 +24,160 @@ function socketConnect(project, name = playerName){ connecting = true; let urlQueries = '?game=' + project.name + '&name=' + name; - $.get('data/settings/get_port.php', port => { - let url = 'https://' + location.hostname + ':' + port + urlQueries; + let url = 'https://' + location.hostname + urlQueries; - socket = io.connect(url); - socket.on('connect', () => { - console.log('Connected to ', url); - $('#start_feedback, #give_feedback').attr('disabled', false); - socket.on('disconnect', () => { - connecting = false; - console.log('Disconnected from ' + url); - $('#lobby, #room, #game_room').filter(':visible').fadeOut(menuesFadeTime, () => { - $('#main').fadeIn(menuesFadeTime); - $('#start_feedback, #give_feedback').attr('disabled', 'disabled'); - }); - }); - socket.emit('room-list'); - socket.on('room-list', (roomList) => { - roomList = roomList.filter(r => r.game === project.name); - console.log('Received room list: ', roomList); - $('#room_listings').html(''); - for (let room of roomList){ - let button = $(''); - button.html(room.name); - button.addClass('room_listing'); - button.on('click', () => socket.emit('join-lobby', room.id)); - $('#room_listings').append(button); - } - }); - $('#main').fadeOut(menuesFadeTime, () => { - $('#lobby > h1').html('Welcome, ' + name + '!'); - $('#lobby > input').val(name + "'s room"); - $('#lobby').fadeIn(menuesFadeTime); - roomTyped($('#lobby > input')); - }); - socket.on('created-lobby', (room) => { - console.log('You successfully created a room!'); - $('#create_room').attr('disabled', false); - $('#lobby').fadeOut(menuesFadeTime, () => { - roomSetup(room); - }); - }); - socket.on('client-list', (room, clients) => { - console.log('Received client list: ', clients); - - let players = clients.filter(c => c.isPlayer); - let spectators = clients.filter(c => c.isSpectator); - let leader = players[0]; + socket = io.connect(url, { + path: "/chainreact/" + }); + socket.on('connect', () => { + console.log('Connected to ', url); + $('#start_feedback, #give_feedback').attr('disabled', false); + socket.on('disconnect', () => { + connecting = false; + console.log('Disconnected from ' + url); + $('#lobby, #room, #game_room').filter(':visible').fadeOut(menuesFadeTime, () => { + $('#main').fadeIn(menuesFadeTime); + $('#start_feedback, #give_feedback').attr('disabled', 'disabled'); + }); + }); + socket.emit('room-list'); + socket.on('room-list', (roomList) => { + roomList = roomList.filter(r => r.game === project.name); + console.log('Received room list: ', roomList); + $('#room_listings').html(''); + for (let room of roomList){ + let button = $(''); + button.html(room.name); + button.addClass('room_listing'); + button.on('click', () => socket.emit('join-lobby', room.id)); + $('#room_listings').append(button); + } + }); + $('#main').fadeOut(menuesFadeTime, () => { + $('#lobby > h1').html('Welcome, ' + name + '!'); + $('#lobby > input').val(name + "'s room"); + $('#lobby').fadeIn(menuesFadeTime); + roomTyped($('#lobby > input')); + }); + socket.on('created-lobby', (room) => { + console.log('You successfully created a room!'); + $('#create_room').attr('disabled', false); + $('#lobby').fadeOut(menuesFadeTime, () => { + roomSetup(room); + }); + }); + socket.on('client-list', (room, clients) => { + console.log('Received client list: ', clients); - if (game) - game.players = players; + let players = clients.filter(c => c.isPlayer); + let spectators = clients.filter(c => c.isSpectator); + let leader = players[0]; - setInterfacePlayers(players); - setInterfaceSpectators(spectators); + if (game) + game.players = players; - function setInterfacePlayers(players){ - $('#player_listings').html(''); - for (let c of players){ - let div = $('
'); - let span = $(''); - let ready = $(''); - div.addClass('player_listing'); - ready.addClass('player_ready'); - ready.on('click', () => { - if (c.id !== socket.id) - return; - let isReady = $(ready).data('isReady'); - $(ready).data('isReady', !isReady); - socket.emit('set-ready', !isReady); - }); - span.html(c.name); - ready.css('background-color', c.isReady ? 'green' : 'transparent'); - ready.data('isReady', c.isReady); - div.append(span, ready); - $('#player_listings').append(div); - } + setInterfacePlayers(players); + setInterfaceSpectators(spectators); - let allReady = players.find(c => !c.isReady) == null; - let startClickable = allReady && players.length <= 4 && (players.length > 1 || productionMode); - if (startClickable && players[0]) - startClickable = players[0].id === socket.id; - $('#start_button').attr('disabled', startClickable ? false : 'disabled'); + function setInterfacePlayers(players){ + $('#player_listings').html(''); + for (let c of players){ + let div = $('
'); + let span = $(''); + let ready = $(''); + div.addClass('player_listing'); + ready.addClass('player_ready'); + ready.on('click', () => { + if (c.id !== socket.id) + return; + let isReady = $(ready).data('isReady'); + $(ready).data('isReady', !isReady); + socket.emit('set-ready', !isReady); + }); + span.html(c.name); + ready.css('background-color', c.isReady ? 'green' : 'transparent'); + ready.data('isReady', c.isReady); + div.append(span, ready); + $('#player_listings').append(div); + } - if (players.find(p => p.id === socket.id)){ - $('#player_list .join_type').hide(); - } else { - $('#player_list .join_type').show(); - } + let allReady = players.find(c => !c.isReady) == null; + let startClickable = allReady && players.length <= 4 && (players.length > 1 || productionMode); + if (startClickable && players[0]) + startClickable = players[0].id === socket.id; + $('#start_button').attr('disabled', startClickable ? false : 'disabled'); - refreshGamePlayers(players); - } + if (players.find(p => p.id === socket.id)){ + $('#player_list .join_type').hide(); + } else { + $('#player_list .join_type').show(); + } - function setInterfaceSpectators(spectators){ - $('.spectator_listings').html(''); - spectators.forEach(s => { - let div = $('
'); - div.addClass('spectator_listing'); - div.html(s.name); + refreshGamePlayers(players); + } - $('.spectator_listings').append(div); - }); - if (spectators.find(p => p.id === socket.id)){ - $('.spectator_list .join_type').hide(); - } else { - $('.spectator_list .join_type').show(); - } - } + function setInterfaceSpectators(spectators){ + $('.spectator_listings').html(''); + spectators.forEach(s => { + let div = $('
'); + div.addClass('spectator_listing'); + div.html(s.name); - if (leader){ - if (leader.id === socket.id) - readGameSettings(); - else - disableSettings(); - } else - disableSettings(); + $('.spectator_listings').append(div); + }); + if (spectators.find(p => p.id === socket.id)){ + $('.spectator_list .join_type').hide(); + } else { + $('.spectator_list .join_type').show(); + } + } - function disableSettings(){ - $('.setting').attr('disabled', 'disabled'); - } - }); - socket.on('member-joined', (room, joinedId, joinedName) => { - if (joinedId === socket.id){ - console.log('You joined a room!'); - $('#lobby').fadeOut(menuesFadeTime, () => { - if (room.hasStarted){ - $('#game_room').fadeIn(menuesFadeTime); - } else { - roomSetup(room); - } - }); - } - else - console.log('A player joined your room: ' + joinedName + ' (' + joinedId + ')'); - }); - socket.on('member-left', (room, leftId, leftName) => { - console.log('A player left your room: ' + leftName + ' (' + leftId + ')'); - if (game) - game.onPlayerLeft(leftId); - }); - socket.on('start-game', (room, seed) => startGame(room, seed)); - socket.on('start-spectate', (room, data, hues, turnId) => spectateGame(room, data, hues, turnId)); - socket.on('game-settings', (room, settings) => applySettings(settings)); - socket.on('left-lobby', () => { - console.log('You left a room!'); - $('#leave_room').get(0).disabled = false; - game = null; - socket.removeAllListeners('player-colors'); - socket.removeAllListeners('current-turn'); - socket.removeAllListeners('set-slot'); - $('#room, #game_room').filter(':visible').fadeOut(menuesFadeTime, () => { - $('#lobby').fadeIn(menuesFadeTime); - }); - }); - }); - }); + if (leader){ + if (leader.id === socket.id) + readGameSettings(); + else + disableSettings(); + } else + disableSettings(); + function disableSettings(){ + $('.setting').attr('disabled', 'disabled'); + } + }); + socket.on('member-joined', (room, joinedId, joinedName) => { + if (joinedId === socket.id){ + console.log('You joined a room!'); + $('#lobby').fadeOut(menuesFadeTime, () => { + if (room.hasStarted){ + $('#game_room').fadeIn(menuesFadeTime); + } else { + roomSetup(room); + } + }); + } + else + console.log('A player joined your room: ' + joinedName + ' (' + joinedId + ')'); + }); + socket.on('member-left', (room, leftId, leftName) => { + console.log('A player left your room: ' + leftName + ' (' + leftId + ')'); + if (game) + game.onPlayerLeft(leftId); + }); + socket.on('start-game', (room, seed) => startGame(room, seed)); + socket.on('start-spectate', (room, data, hues, turnId) => spectateGame(room, data, hues, turnId)); + socket.on('game-settings', (room, settings) => applySettings(settings)); + socket.on('left-lobby', () => { + console.log('You left a room!'); + $('#leave_room').get(0).disabled = false; + game = null; + socket.removeAllListeners('player-colors'); + socket.removeAllListeners('current-turn'); + socket.removeAllListeners('set-slot'); + $('#room, #game_room').filter(':visible').fadeOut(menuesFadeTime, () => { + $('#lobby').fadeIn(menuesFadeTime); + }); + }); + }); } function applySettings(settings){ diff --git a/public/data/settings/get_port.php b/public/data/settings/get_port.php deleted file mode 100644 index 8de971e..0000000 --- a/public/data/settings/get_port.php +++ /dev/null @@ -1,3 +0,0 @@ -=10.0.0" } }, - "node_modules/https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -356,11 +350,6 @@ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" }, - "https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", diff --git a/server/package.json b/server/package.json index 0f7304c..9e5bbfc 100644 --- a/server/package.json +++ b/server/package.json @@ -8,7 +8,6 @@ }, "dependencies": { "dotenv": "^16.0.3", - "https": "^1.0.0", "socket.io": "^4.4.1", "typescript": "^5.0.2" }, diff --git a/server/src/index.ts b/server/src/index.ts index 8288048..0ae84df 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -3,5 +3,7 @@ import {StartServer} from "./start"; StartServer({ useP2P: false, - gameClass: Chainreact + gameClass: Chainreact, + subPath: "/chainreact/", + port: 3100 }); \ No newline at end of file diff --git a/server/src/start.ts b/server/src/start.ts index 82293ed..eaff242 100644 --- a/server/src/start.ts +++ b/server/src/start.ts @@ -3,30 +3,26 @@ import {log} from "./logger.js"; import {Server} from 'socket.io'; import {Room} from "./room.js"; -import * as https from "https"; -import * as fs from "fs"; +import * as http from "http"; export function StartServer(settings: any){ require("dotenv").config(); - const httpsPort = parseInt(process.env.HTTPS_PORT); - let cert = fs.readFileSync(`${process.env.SSL_PATH}/cert.pem`); - let key = fs.readFileSync(`${process.env.SSL_PATH}/key.pem`); + let httpServer = http.createServer(); - let httpsServer = https.createServer({key: key, cert: cert}); - - let sIO = new Server(httpsServer, { + let sIO = new Server(httpServer, { cors: { origin: ["https://play.benjamin-kraft.local", "https://play.benjamin-kraft.eu"] - } + }, + path: settings.subPath }); if (settings.useP2P){ const p2p = require('socket.io-p2p-server').Server; sIO.use(p2p); } - httpsServer.listen(httpsPort); + httpServer.listen(settings.port); Room.GameClass = settings.gameClass; @@ -35,5 +31,5 @@ export function StartServer(settings: any){ // On new connection sIO.on('connection', socket => connectionManager.newSocket(socket)); - log('startup', null, null, 'Server is listening on port ' + httpsPort); + log('startup', null, null, 'Server is listening on port ' + settings.port); } \ No newline at end of file