diff --git a/.gitignore b/.gitignore
index 6f92a01..440e037 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+# ---> Vim
+*.swp
+
# ---> Node
# Logs
logs
diff --git a/html/css/extra.css b/html/css/extra.css
index 524b156..7a1f838 100644
--- a/html/css/extra.css
+++ b/html/css/extra.css
@@ -17,3 +17,12 @@ tr.clickable:hover{
color: #aaa;
text-align: center;
}
+
+
+.story{
+ text-align: center;
+ margin-bottom: 30px;
+}
+.story h5{
+ margin: 0px;
+}
diff --git a/html/index.html b/html/index.html
index d95dc4a..e501e0a 100644
--- a/html/index.html
+++ b/html/index.html
@@ -13,11 +13,11 @@
You should have received a copy of the GNU General Public License along with
this program. If not, see .
- This project is hosted on https://git.bitscuit.be/bitscuit/ReverseQuiz
+ This project is hosted on https://git.bitscuit.be/bitscuit/Scrawl
-->
- Reverse Quiz
+ Scrawl
@@ -31,14 +31,14 @@
-
Reverse Quiz
+
Scrawl
Please enter a username to get started with the game.
@@ -85,7 +85,7 @@ socket.on("LOBBY", function(users){
}
// Disable button if not enough players
- if(users.length < 2){
+ if(users.length < 3){
document.getElementById("button_lobby_start").style.display = "none";
}
});
@@ -94,7 +94,7 @@ socket.on("LOBBY", function(users){
socket.on("LOBBY_CLOSED", function(){
// When game busy
var page = "";
- page += "Reverse Quiz The lobby is currently closed. Please come back in a few moments.
";
+ page += "Scrawl The lobby is currently closed. Please come back in a few moments.
";
document.getElementById("main").innerHTML = page;
});
@@ -114,8 +114,6 @@ socket.on("START", function(data){
page += "Get ready! ";
page += "The game is about to begin.
";
- page += "Come up with false answers to a trivia quiz question to fool the other players. Afterwards, find the correct answer to the question, but don't get fooled by your friends wrong answers.
";
- page += "If you answer a question correctly, you gain 3 points. If someone else thought your false answer was correct, you gain 1 point. Get the most points to win the game!
";
page += " Let's begin! ";
// Show page
@@ -128,10 +126,16 @@ socket.on("WRITE", function(data){
var page = "";
- page += "Question "+data.questionNr+" of "+data.questionsTotal+"
";
- page += ""+data.question+" ";
- page += "Enter a false answer.
";
- page += " ";
+ page += "Line "+data.lineNr+" of "+data.linesTotal+"
";
+
+ page += "";
+ for(var i=0; i"+data.lines[i]+"";
+ }
+ page += "
";
+
+ page += "Enter the next line.
";
+ page += " ";
page += "
";
page += " Submit ";
@@ -171,18 +175,22 @@ socket.on("PICK", function(data){
var page = "";
- page += "Question "+data.questionNr+" of "+data.questionsTotal+"
";
- page += ""+data.question+" ";
+ page += "Line "+data.lineNr+" of "+data.linesTotal+"
";
+ page += "";
+ for(var i=0; i"+data.lines[i]+"";
+ }
+ page += "
";
page += "";
@@ -210,16 +218,20 @@ socket.on("ANSWER", function(data){
var page = "";
- page += "Question "+data.questionNr+" of "+data.questionsTotal+"
";
- page += ""+data.question+" ";
- page += "Correct answer: "+data.answers[data.correctAnswer]+"
";
+ page += "Line "+data.lineNr+" of "+data.linesTotal+"
";
+ page += "";
+ for(var i=0; i"+data.lines[i]+"";
+ }
+ page += "
";
+ page += "Preferred submission:"+data.submissions[data.bestLine]+"
";
// Table with results
page += "";
page += "";
page += " ";
page += " ";
- page += "Answered ";
+ page += "Picked ";
page += "Wrote ";
page += "Change ";
page += "Points ";
@@ -229,8 +241,8 @@ socket.on("ANSWER", function(data){
for(i=0; i";
page += ""+data.usernames[i]+" ";
- page += ""+(data.userPick[i] == data.correctAnswer ? " " : " ")+" ";
- page += ""+data.answers[data.userPick[i]]+" ";
+ page += ""+(data.userWrite[i] == data.submissions[data.bestLine] ? " " : "")+" ";
+ page += ""+data.submissions[data.userPick[i]]+" ";
page += ""+data.userWrite[i]+" ";
page += "+"+data.pointsDiff[i]+" ";
page += ""+data.userPoints[i]+" ";
@@ -255,7 +267,7 @@ socket.on("STOP", function(data){
var page = "";
page += "We're done! ";
- page += "All questions were answered. Let's see who's the winner!
";
+ page += "All lines were scrawled. Let's see who's the winner!
";
// Scoreboard
page += "";
@@ -276,6 +288,14 @@ socket.on("STOP", function(data){
page += "";
page += "
";
+ page += "";
+ page += "
The final scrawl:
";
+ for(var i=0; i
"+data.lines[i]+"";
+ }
+ page += " ";
+
+
page += " Restart game ";
document.getElementById("main").innerHTML = page;
diff --git a/main.js b/main.js
index b481d05..cb18070 100644
--- a/main.js
+++ b/main.js
@@ -13,7 +13,7 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*
- * This project is hosted on https://git.bitscuit.be/bitscuit/ReverseQuiz
+ * This project is hosted on https://git.bitscuit.be/bitscuit/Scrawl
*
*/
@@ -22,17 +22,16 @@ const http = require("http");
const url = require("url");
const fs = require("fs");
const util = require("util");
-const fetch = require("node-fetch");
// Vars
-const hostname = "192.168.0.128"; // Enter your local IP address here
-const port = 3000; // Enter a port number here
+const hostname = "localhost"; // Enter your local IP address here
+const port = 5000; // Enter a port number here
const STATE_LOBBY = 0;
const STATE_MANUAL = 10;
const STATE_WRITE = 20;
const STATE_PICK = 30;
-const STATE_ANSWER = 40;
+const STATE_RESULT = 40;
const STATE_END = 50;
var state = STATE_LOBBY;
@@ -40,12 +39,10 @@ var userSockets = [];
var userNames = [];
var userOK = [];
-var questionNr = 0; // Current question
-var questionsTotal = 10; // Total nr of questions
-var questionData = {};
-var questionCorrectAnswerIndex;
-var answers;
-const QUESTION_CATEGORIES = [9,15,16,17,18,19,20,22,23,27,28,30];
+var lines = [];
+var lineNr = 0; // Current line
+var linesTotal = 10; // Total nr of lines before game ends
+var submissions = [];
var userWrite = [];
var userPick = [];
@@ -137,14 +134,15 @@ io.on("connection", (socket) => {
state = STATE_MANUAL;
// Reset vars
- questionNr = 0;
+ lines = [];
+ lineNr = 0;
userPoints = [];
for(i=0; i {
// Check if empty
if(data.write == ""){
- socket.emit("WRITE_REPLY", {error:"Please enter a false answer!"});
+ socket.emit("WRITE_REPLY", {error:"Please enter some text!"});
return;
}
- // Check if valid
- var valid = true;
- valid = valid && data.write.toUpperCase() != questionData.correct_answer.toUpperCase();
- for(i=0; i questionsTotal){
+ if(lineNr > linesTotal){
// End
state = STATE_END;
@@ -268,7 +250,7 @@ function next(){
console.log(ranks);
// Send data
- var data = {ranks:ranks};
+ var data = {ranks:ranks, lineNr:lineNr, lines:lines};
userSockets.forEach(function(s){s.emit("STOP", data);});
// Reset vars
@@ -278,24 +260,8 @@ function next(){
}else{
- // Load new question
- console.log("Loading new question...");
- var category = QUESTION_CATEGORIES[rand(0, QUESTION_CATEGORIES.length)];
- fetch("https://opentdb.com/api.php?amount=1&type=multiple&category="+category)
- .then(res => res.json()) // Convert to JSON
- .then(json => {
- // Question loaded
- console.log("Question loaded!");
- console.log(json);
-
- // TODO: check response code
-
- // Save data
- questionData = json.results[0];
-
- // Send question to players
- userSockets.forEach(function(s){s.emit("WRITE", {questionNr:questionNr, questionsTotal:questionsTotal, question:questionData.question});});
- });
+ // Load data for new line
+ userSockets.forEach(function(s){s.emit("WRITE", {lineNr:lineNr, linesTotal:linesTotal, lines:lines});});
}
@@ -304,20 +270,15 @@ function next(){
state = STATE_PICK;
console.log("Preparing PICK");
- // Send question and answers to players
- answers = [];
- for(i=0; i lineVotes[bestLine]){
+ bestLine = i;
+ }
+ }
+
+ // Add bestLine to lines
+ lines.push(submissions[bestLine]);
+
// Send data to players
- var data = {questionNr:questionNr, questionsTotal:questionsTotal, question:questionData.question, answers:answers, correctAnswer:questionCorrectAnswerIndex, userPick:userPick, userWrite:userWrite, userPoints:userPoints, pointsDiff:pointsDiff, usernames:userNames};
+ var data = {lineNr:lineNr, linesTotal:linesTotal, lines:lines, submissions:submissions, bestLine:bestLine, userPick:userPick, userWrite:userWrite, userPoints:userPoints, pointsDiff:pointsDiff, usernames:userNames};
userSockets.forEach(function(s){s.emit("ANSWER", data);});
console.log(data);
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..db14b2c
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,394 @@
+{
+ "name": "Scrawl",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "socket.io": "^4.0.0"
+ }
+ },
+ "node_modules/@types/component-emitter": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
+ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg=="
+ },
+ "node_modules/@types/cors": {
+ "version": "2.8.10",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz",
+ "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ=="
+ },
+ "node_modules/@types/node": {
+ "version": "14.14.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz",
+ "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA=="
+ },
+ "node_modules/accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dependencies": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/base64-arraybuffer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "engines": {
+ "node": "^4.5.0 || >= 5.9"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "node_modules/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/engine.io": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.0.0.tgz",
+ "integrity": "sha512-BATIdDV3H1SrE9/u2BAotvsmjJg0t1P4+vGedImSs1lkFAtQdvk4Ev1y4LDiPF7BPWgXWEG+NDY+nLvW3UrMWw==",
+ "dependencies": {
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~4.0.0",
+ "ws": "~7.4.2"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/engine.io-parser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz",
+ "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==",
+ "dependencies": {
+ "base64-arraybuffer": "0.1.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.46.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+ "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.29",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+ "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+ "dependencies": {
+ "mime-db": "1.46.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/socket.io": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.0.0.tgz",
+ "integrity": "sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg==",
+ "dependencies": {
+ "@types/cookie": "^0.4.0",
+ "@types/cors": "^2.8.8",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.1",
+ "engine.io": "~5.0.0",
+ "socket.io-adapter": "~2.2.0",
+ "socket.io-parser": "~4.0.3"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-adapter": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz",
+ "integrity": "sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg=="
+ },
+ "node_modules/socket.io-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
+ "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
+ "dependencies": {
+ "@types/component-emitter": "^1.2.10",
+ "component-emitter": "~1.3.0",
+ "debug": "~4.3.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ws": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
+ "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@types/component-emitter": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
+ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="
+ },
+ "@types/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg=="
+ },
+ "@types/cors": {
+ "version": "2.8.10",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz",
+ "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ=="
+ },
+ "@types/node": {
+ "version": "14.14.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz",
+ "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA=="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
+ },
+ "base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "engine.io": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.0.0.tgz",
+ "integrity": "sha512-BATIdDV3H1SrE9/u2BAotvsmjJg0t1P4+vGedImSs1lkFAtQdvk4Ev1y4LDiPF7BPWgXWEG+NDY+nLvW3UrMWw==",
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~4.0.0",
+ "ws": "~7.4.2"
+ }
+ },
+ "engine.io-parser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz",
+ "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==",
+ "requires": {
+ "base64-arraybuffer": "0.1.4"
+ }
+ },
+ "mime-db": {
+ "version": "1.46.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+ "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
+ },
+ "mime-types": {
+ "version": "2.1.29",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+ "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+ "requires": {
+ "mime-db": "1.46.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "socket.io": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.0.0.tgz",
+ "integrity": "sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg==",
+ "requires": {
+ "@types/cookie": "^0.4.0",
+ "@types/cors": "^2.8.8",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.1",
+ "engine.io": "~5.0.0",
+ "socket.io-adapter": "~2.2.0",
+ "socket.io-parser": "~4.0.3"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz",
+ "integrity": "sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg=="
+ },
+ "socket.io-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
+ "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
+ "requires": {
+ "@types/component-emitter": "^1.2.10",
+ "component-emitter": "~1.3.0",
+ "debug": "~4.3.1"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "ws": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
+ "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
+ "requires": {}
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..67c19a9
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "socket.io": "^4.0.0"
+ }
+}