https to http, proxied server

main v2.2
Benjamin Kraft 1 year ago
parent 455736f51d
commit 732fa930ee
  1. 285
      public/data/scripts/online.js
  2. 3
      public/data/settings/get_port.php
  3. 11
      server/package-lock.json
  4. 1
      server/package.json
  5. 4
      server/src/index.ts
  6. 18
      server/src/start.ts

@ -24,161 +24,160 @@ function socketConnect(project, name = playerName){
connecting = true; connecting = true;
let urlQueries = '?game=' + project.name + '&name=' + name; let urlQueries = '?game=' + project.name + '&name=' + name;
$.get('data/settings/get_port.php', port => { let url = 'https://' + location.hostname + urlQueries;
let url = 'https://' + location.hostname + ':' + port + urlQueries;
socket = io.connect(url); socket = io.connect(url, {
socket.on('connect', () => { path: "/chainreact/"
console.log('Connected to ', url); });
$('#start_feedback, #give_feedback').attr('disabled', false); socket.on('connect', () => {
socket.on('disconnect', () => { console.log('Connected to ', url);
connecting = false; $('#start_feedback, #give_feedback').attr('disabled', false);
console.log('Disconnected from ' + url); socket.on('disconnect', () => {
$('#lobby, #room, #game_room').filter(':visible').fadeOut(menuesFadeTime, () => { connecting = false;
$('#main').fadeIn(menuesFadeTime); console.log('Disconnected from ' + url);
$('#start_feedback, #give_feedback').attr('disabled', 'disabled'); $('#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); socket.emit('room-list');
console.log('Received room list: ', roomList); socket.on('room-list', (roomList) => {
$('#room_listings').html(''); roomList = roomList.filter(r => r.game === project.name);
for (let room of roomList){ console.log('Received room list: ', roomList);
let button = $('<button></button>'); $('#room_listings').html('');
button.html(room.name); for (let room of roomList){
button.addClass('room_listing'); let button = $('<button></button>');
button.on('click', () => socket.emit('join-lobby', room.id)); button.html(room.name);
$('#room_listings').append(button); 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"); $('#main').fadeOut(menuesFadeTime, () => {
$('#lobby').fadeIn(menuesFadeTime); $('#lobby > h1').html('Welcome, ' + name + '!');
roomTyped($('#lobby > input')); $('#lobby > input').val(name + "'s room");
}); $('#lobby').fadeIn(menuesFadeTime);
socket.on('created-lobby', (room) => { roomTyped($('#lobby > input'));
console.log('You successfully created a room!'); });
$('#create_room').attr('disabled', false); socket.on('created-lobby', (room) => {
$('#lobby').fadeOut(menuesFadeTime, () => { console.log('You successfully created a room!');
roomSetup(room); $('#create_room').attr('disabled', false);
}); $('#lobby').fadeOut(menuesFadeTime, () => {
}); roomSetup(room);
socket.on('client-list', (room, clients) => { });
console.log('Received client list: ', clients); });
socket.on('client-list', (room, clients) => {
let players = clients.filter(c => c.isPlayer); console.log('Received client list: ', clients);
let spectators = clients.filter(c => c.isSpectator);
let leader = players[0];
if (game) let players = clients.filter(c => c.isPlayer);
game.players = players; let spectators = clients.filter(c => c.isSpectator);
let leader = players[0];
setInterfacePlayers(players); if (game)
setInterfaceSpectators(spectators); game.players = players;
function setInterfacePlayers(players){ setInterfacePlayers(players);
$('#player_listings').html(''); setInterfaceSpectators(spectators);
for (let c of players){
let div = $('<div></div>');
let span = $('<span></span>');
let ready = $('<button></button>');
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);
}
let allReady = players.find(c => !c.isReady) == null; function setInterfacePlayers(players){
let startClickable = allReady && players.length <= 4 && (players.length > 1 || productionMode); $('#player_listings').html('');
if (startClickable && players[0]) for (let c of players){
startClickable = players[0].id === socket.id; let div = $('<div></div>');
$('#start_button').attr('disabled', startClickable ? false : 'disabled'); let span = $('<span></span>');
let ready = $('<button></button>');
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)){ let allReady = players.find(c => !c.isReady) == null;
$('#player_list .join_type').hide(); let startClickable = allReady && players.length <= 4 && (players.length > 1 || productionMode);
} else { if (startClickable && players[0])
$('#player_list .join_type').show(); 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){ refreshGamePlayers(players);
$('.spectator_listings').html(''); }
spectators.forEach(s => {
let div = $('<div></div>');
div.addClass('spectator_listing');
div.html(s.name);
$('.spectator_listings').append(div); function setInterfaceSpectators(spectators){
}); $('.spectator_listings').html('');
if (spectators.find(p => p.id === socket.id)){ spectators.forEach(s => {
$('.spectator_list .join_type').hide(); let div = $('<div></div>');
} else { div.addClass('spectator_listing');
$('.spectator_list .join_type').show(); div.html(s.name);
}
}
if (leader){ $('.spectator_listings').append(div);
if (leader.id === socket.id) });
readGameSettings(); if (spectators.find(p => p.id === socket.id)){
else $('.spectator_list .join_type').hide();
disableSettings(); } else {
} else $('.spectator_list .join_type').show();
disableSettings(); }
}
function disableSettings(){ if (leader){
$('.setting').attr('disabled', 'disabled'); if (leader.id === socket.id)
} readGameSettings();
}); else
socket.on('member-joined', (room, joinedId, joinedName) => { disableSettings();
if (joinedId === socket.id){ } else
console.log('You joined a room!'); disableSettings();
$('#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 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){ function applySettings(settings){

@ -1,3 +0,0 @@
<?php
echo parse_ini_file("../../../server/.env")["HTTPS_PORT"];

@ -9,7 +9,6 @@
"version": "2.0", "version": "2.0",
"dependencies": { "dependencies": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"https": "^1.0.0",
"socket.io": "^4.4.1", "socket.io": "^4.4.1",
"typescript": "^5.0.2" "typescript": "^5.0.2"
}, },
@ -147,11 +146,6 @@
"node": ">=10.0.0" "node": ">=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": { "node_modules/mime-db": {
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "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", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" "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": { "mime-db": {
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",

@ -8,7 +8,6 @@
}, },
"dependencies": { "dependencies": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"https": "^1.0.0",
"socket.io": "^4.4.1", "socket.io": "^4.4.1",
"typescript": "^5.0.2" "typescript": "^5.0.2"
}, },

@ -3,5 +3,7 @@ import {StartServer} from "./start";
StartServer({ StartServer({
useP2P: false, useP2P: false,
gameClass: Chainreact gameClass: Chainreact,
subPath: "/chainreact/",
port: 3100
}); });

@ -3,30 +3,26 @@ import {log} from "./logger.js";
import {Server} from 'socket.io'; import {Server} from 'socket.io';
import {Room} from "./room.js"; import {Room} from "./room.js";
import * as https from "https"; import * as http from "http";
import * as fs from "fs";
export function StartServer(settings: any){ export function StartServer(settings: any){
require("dotenv").config(); require("dotenv").config();
const httpsPort = parseInt(process.env.HTTPS_PORT);
let cert = fs.readFileSync(`${process.env.SSL_PATH}/cert.pem`); let httpServer = http.createServer();
let key = fs.readFileSync(`${process.env.SSL_PATH}/key.pem`);
let httpsServer = https.createServer({key: key, cert: cert}); let sIO = new Server(httpServer, {
let sIO = new Server(httpsServer, {
cors: { cors: {
origin: ["https://play.benjamin-kraft.local", "https://play.benjamin-kraft.eu"] origin: ["https://play.benjamin-kraft.local", "https://play.benjamin-kraft.eu"]
} },
path: settings.subPath
}); });
if (settings.useP2P){ if (settings.useP2P){
const p2p = require('socket.io-p2p-server').Server; const p2p = require('socket.io-p2p-server').Server;
sIO.use(p2p); sIO.use(p2p);
} }
httpsServer.listen(httpsPort); httpServer.listen(settings.port);
Room.GameClass = settings.gameClass; Room.GameClass = settings.gameClass;
@ -35,5 +31,5 @@ export function StartServer(settings: any){
// On new connection // On new connection
sIO.on('connection', socket => connectionManager.newSocket(socket)); 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);
} }
Loading…
Cancel
Save