diff --git a/JavaScript/adruino-temp-sensor/client/history.csv b/JavaScript/adruino-temp-sensor/client/history.csv
new file mode 100644
index 0000000..dd68faf
--- /dev/null
+++ b/JavaScript/adruino-temp-sensor/client/history.csv
@@ -0,0 +1,239 @@
+time,temperature
+2018-7-22 14:05:38,27
+2018-7-22 14:06:38,27
+2018-7-22 14:07:38,28
+2018-7-22 14:08:38,28
+2018-7-22 14:09:38,28
+2018-7-22 14:10:38,28
+2018-7-22 14:11:38,28
+2018-7-22 14:12:38,28
+2018-7-22 14:13:38,28
+2018-7-22 14:14:38,28
+2018-7-22 14:15:38,28
+2018-7-22 14:16:38,28
+2018-7-22 14:17:38,28
+2018-7-22 14:18:38,28
+2018-7-22 14:19:38,28
+2018-7-22 14:20:38,28
+2018-7-22 14:21:38,28
+2018-7-22 14:22:38,28
+2018-7-22 14:23:38,28
+2018-7-22 14:24:38,28
+2018-7-22 14:25:38,28
+2018-7-22 14:26:38,28
+2018-7-22 14:27:38,28
+2018-7-22 14:28:38,28
+2018-7-22 14:29:38,28
+2018-7-22 14:30:38,28
+2018-7-22 14:31:38,28
+2018-7-22 14:32:38,28
+2018-7-22 14:33:38,28
+2018-7-22 14:34:38,28
+2018-7-22 14:35:38,28
+2018-7-22 14:36:38,28
+2018-7-22 14:37:38,28
+2018-7-22 14:38:38,28
+2018-7-22 14:39:38,28
+2018-7-22 14:40:38,28
+2018-7-22 14:41:38,28
+2018-7-22 14:42:38,28
+2018-7-22 14:43:38,28
+2018-7-22 14:44:38,28
+2018-7-22 14:45:38,28
+2018-7-22 14:46:38,28
+2018-7-22 14:47:38,28
+2018-7-22 14:48:38,28
+2018-7-22 14:49:38,28
+2018-7-22 14:50:38,28
+2018-7-22 14:51:38,28
+2018-7-22 14:52:38,28
+2018-7-22 14:53:38,28
+2018-7-22 14:54:38,28
+2018-7-22 14:55:38,28
+2018-7-22 14:56:38,28
+2018-7-22 14:57:38,28
+2018-7-22 14:58:38,28
+2018-7-22 14:59:38,28
+2018-7-22 15:00:38,28
+2018-7-22 15:01:38,28
+2018-7-22 15:02:38,28
+2018-7-22 15:03:38,28
+2018-7-22 15:04:38,28
+2018-7-22 15:05:38,28
+2018-7-22 15:06:38,28
+2018-7-22 15:07:38,28
+2018-7-22 15:08:38,28
+2018-7-22 15:09:38,28
+2018-7-22 15:10:38,28
+2018-7-22 15:11:38,28
+2018-7-22 15:12:38,28
+2018-7-22 15:13:38,28
+2018-7-22 15:14:38,28
+2018-7-22 15:15:38,28
+2018-7-22 15:16:38,28
+2018-7-22 15:17:38,28
+2018-7-22 15:18:38,28
+2018-7-22 15:19:38,28
+2018-7-22 15:20:38,28
+2018-7-22 15:21:38,28
+2018-7-22 15:22:38,28
+2018-7-22 15:23:38,28
+2018-7-22 15:24:38,28
+2018-7-22 15:25:38,28
+2018-7-22 15:26:38,28
+2018-7-22 15:27:38,28
+2018-7-22 15:28:38,28
+2018-7-22 15:29:38,28
+2018-7-22 15:30:38,28
+2018-7-22 15:31:38,28
+2018-7-22 15:32:38,28
+2018-7-22 15:33:38,28
+2018-7-22 15:34:38,28
+2018-7-22 15:35:38,28
+2018-7-22 15:36:38,28
+2018-7-22 15:37:38,28
+2018-7-22 15:38:38,28
+2018-7-22 15:39:38,28
+2018-7-22 15:40:38,28
+2018-7-22 15:41:38,28
+2018-7-22 15:42:38,28
+2018-7-22 15:43:38,28
+2018-7-22 15:44:38,28
+2018-7-22 15:45:38,28
+2018-7-22 15:46:38,28
+2018-7-22 15:47:38,28
+2018-7-22 15:48:38,28
+2018-7-22 15:49:38,28
+2018-7-22 15:50:38,28
+2018-7-22 15:51:38,28
+2018-7-22 15:52:38,28
+2018-7-22 15:53:38,28
+2018-7-22 15:54:38,28
+2018-7-22 15:55:38,28
+2018-7-22 15:56:38,28
+2018-7-22 15:57:38,28
+2018-7-22 15:58:38,28
+2018-7-22 15:59:38,28
+2018-7-22 16:00:38,28
+2018-7-22 16:01:38,28
+2018-7-22 16:02:38,28
+2018-7-22 16:03:38,28
+2018-7-22 16:04:38,28
+2018-7-22 16:05:38,28
+2018-7-22 16:06:38,28
+2018-7-22 16:07:38,28
+2018-7-22 16:08:38,28
+2018-7-22 16:09:38,28
+2018-7-22 16:10:38,28
+2018-7-22 16:11:38,28
+2018-7-22 16:12:38,28
+2018-7-22 16:13:38,28
+2018-7-22 16:14:38,28
+2018-7-22 16:15:38,28
+2018-7-22 16:16:38,28
+2018-7-22 16:17:38,28
+2018-7-22 16:18:38,28
+2018-7-22 16:19:38,28
+2018-7-22 16:20:38,28
+2018-7-22 16:21:38,28
+2018-7-22 16:22:38,28
+2018-7-22 16:23:38,28
+2018-7-22 16:24:38,28
+2018-7-22 16:25:38,28
+2018-7-22 16:26:38,28
+2018-7-22 16:27:38,28
+2018-7-22 16:28:38,28
+2018-7-22 16:29:38,28
+2018-7-22 16:30:38,28
+2018-7-22 16:31:38,28
+2018-7-22 16:32:38,28
+2018-7-22 16:33:38,28
+2018-7-22 16:34:38,28
+2018-7-22 16:35:38,28
+2018-7-22 16:36:38,28
+2018-7-22 16:37:38,28
+2018-7-22 16:38:38,28
+2018-7-22 16:39:38,28
+2018-7-22 16:40:38,28
+2018-7-22 16:41:38,28
+2018-7-22 16:42:38,28
+2018-7-22 16:43:38,28
+2018-7-22 16:44:38,28
+2018-7-22 16:45:39,28
+2018-7-22 16:46:39,28
+2018-7-22 16:47:39,28
+2018-7-22 16:48:39,28
+2018-7-22 16:49:39,28
+2018-7-22 16:50:39,28
+2018-7-22 16:51:39,28
+2018-7-22 16:52:39,28
+2018-7-22 16:53:39,28
+2018-7-22 16:54:39,28
+2018-7-22 16:55:39,28
+2018-7-22 16:56:39,28
+2018-7-22 16:57:39,28
+2018-7-22 16:58:39,28
+2018-7-22 16:59:39,28
+2018-7-22 17:00:39,28
+2018-7-22 17:01:39,28
+2018-7-22 17:02:39,28
+2018-7-22 17:03:39,28
+2018-7-22 17:04:39,28
+2018-7-22 17:05:39,28
+2018-7-22 17:06:39,28
+2018-7-22 17:07:39,28
+2018-7-22 17:08:39,28
+2018-7-22 17:09:39,28
+2018-7-22 17:10:39,28
+2018-7-22 17:11:39,28
+2018-7-22 17:14:03,29
+2018-7-22 17:15:03,30
+2018-7-22 17:16:03,30
+2018-7-22 17:17:03,30
+2018-7-22 17:18:03,30
+2018-7-22 17:19:03,30
+2018-7-22 17:20:03,30
+2018-7-22 17:21:03,30
+2018-7-22 17:22:03,30
+2018-7-22 17:23:03,30
+2018-7-22 17:24:03,30
+2018-7-22 17:25:03,30
+2018-7-22 17:26:03,30
+2018-7-22 17:27:03,30
+2018-7-22 17:28:03,30
+2018-7-22 17:29:03,30
+2018-7-22 17:30:03,30
+2018-7-22 17:31:03,30
+2018-7-22 17:32:03,30
+2018-7-22 17:33:03,30
+2018-7-22 17:34:03,30
+2018-7-22 17:35:03,30
+2018-7-22 17:36:03,30
+2018-7-22 17:37:03,30
+2018-7-22 17:38:03,30
+2018-7-22 17:39:03,30
+2018-7-22 17:40:03,30
+2018-7-22 17:41:03,30
+2018-7-22 17:42:03,30
+2018-7-22 17:43:03,30
+2018-7-22 17:44:03,30
+2018-7-22 17:45:03,30
+2018-7-22 17:46:03,30
+2018-7-22 17:47:03,30
+2018-7-22 17:48:03,30
+2018-7-22 17:49:03,30
+2018-7-22 17:50:03,30
+2018-7-22 17:51:03,30
+2018-7-22 17:52:03,30
+2018-7-22 17:53:03,30
+2018-7-22 17:54:03,30
+2018-7-22 17:55:03,30
+2018-7-22 17:56:03,30
+2018-7-22 17:57:03,30
+2018-7-22 17:58:03,30
+2018-7-22 17:59:03,30
+2018-7-22 18:00:03,30
+2018-7-22 18:01:03,30
+2018-7-22 18:02:03,30
+2018-7-22 18:03:03,30
+2018-7-22 18:04:03,30
diff --git a/JavaScript/adruino-temp-sensor/client/main.js b/JavaScript/adruino-temp-sensor/client/main.js
index 3718836..dbdaf28 100644
--- a/JavaScript/adruino-temp-sensor/client/main.js
+++ b/JavaScript/adruino-temp-sensor/client/main.js
@@ -1,6 +1,6 @@
console.log('Connecting to server')
-var socket = io.connect('benkyd.duckdns.org:8081');
+var socket = io.connect('benkyd.duckdns.org:7001');
let temp = [];
socket.on('connect', function(data) {
@@ -13,7 +13,8 @@ socket.on('handshake', function(data) {
socket.on('temp', function(data) {
console.log(data);
- addPoint(data);
+ if (data[0] * 2 != data[1]) socket.emmit('another');
+ addPoint(data[0]);
});
socket.on('lasthour', function(data) {
diff --git a/JavaScript/adruino-temp-sensor/index.js b/JavaScript/adruino-temp-sensor/index.js
index 01b5847..8809dec 100644
--- a/JavaScript/adruino-temp-sensor/index.js
+++ b/JavaScript/adruino-temp-sensor/index.js
@@ -8,6 +8,7 @@ let io = require('socket.io')(server);
/* COMMUNICATION WITH ARDUINO AND CLENSING OF DATA */
let lastHour = []
+let history = [];
let temperature;
const parser = new parsers.Readline({
delimiter: '\r\n'
@@ -40,12 +41,12 @@ app.use('/', express.static(__dirname + '/client'));
app.get('/', function(req, res) {
res.sendFile(__dirname + '/client/index.html');
});
-app.listen(8080);
-console.log('Server listening on 80')
+app.listen(7000);
+console.log('Server listening on 8081')
/* WEBSOCKETS */
-server.listen(8081);
+server.listen(7001);
io.on('connection', (socket) => {
let ip = socket.request.connection.remoteAddress;
@@ -61,12 +62,18 @@ io.on('connection', (socket) => {
socket.emit('lasthour', lastHour);
setInterval(() => {
- socket.emit('temp', temperature);
+ socket.emit('temp', [temperature, temperature * 2]);
}, 60000);
});
+
+ socket.on('another', function(data) {
+ socket.emit('temp', [temperature, temperature * 2]);
+ });
});
setInterval(() => {
+ history.push(temperature);
lastHour.push(temperature);
if (lastHour.length > 60) lastHour.splice(0,1);
+ fs.appendFileSync('client/history.csv', `${new Date().toLocaleString()},${temperature}\n`)
}, 60000)
diff --git a/JavaScript/web-chat/client/index.html b/JavaScript/web-chat/client/index.html
new file mode 100644
index 0000000..581406b
--- /dev/null
+++ b/JavaScript/web-chat/client/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ BenChat
+
+
+
+
+
+
+
+
+
+
+
diff --git a/JavaScript/web-chat/client/main.js b/JavaScript/web-chat/client/main.js
new file mode 100644
index 0000000..5251c1f
--- /dev/null
+++ b/JavaScript/web-chat/client/main.js
@@ -0,0 +1,42 @@
+var socket = io.connect('http://benkyd.duckdns.org:8083');
+
+let name;
+
+window.addEventListener('keydown', (event) => {
+ if (event.code == 'Enter') messagesend();
+})
+
+function messagesend() {
+ if (!name) {
+ while (name == null || name == undefined) {
+ name = prompt('Enter your name:');
+ tempname = name.replace(/^\s+/, '').replace(/\s+$/, '');
+ if (tempname === '') {
+ name = undefined;
+ }
+ }
+ }
+
+ let message = document.getElementById('in').value;
+
+ if (message == '' || message == ' ') {
+ document.getElementById('in').value = '';
+ return;
+ }
+
+ tempmessage = message.replace(/^\s+/, '').replace(/\s+$/, '');
+ if (tempname === '') {
+ document.getElementById('in').value = '';
+ return;
+ }
+
+ socket.emit('outward', {name: name, message: message})
+ document.getElementById('in').value = '';
+}
+
+socket.on('receive', (data) => {
+ console.log(data);
+ document.getElementById('chat').value = document.getElementById('chat').value + data;
+ document.getElementById('chat').scrollTop = document.getElementById('chat').scrollHeight;
+});
+
diff --git a/JavaScript/web-chat/client/style.css b/JavaScript/web-chat/client/style.css
new file mode 100644
index 0000000..c5477b8
--- /dev/null
+++ b/JavaScript/web-chat/client/style.css
@@ -0,0 +1,19 @@
+body {
+ background-color: rgb(245, 245, 245);
+}
+
+textarea {
+ resize: none;
+ left: 2px;
+}
+
+input {
+ position: absolute;
+ top: 60%;
+ left: 2px;
+}
+
+input[type=text] {
+ left: 70px;
+ width: 50%;
+}
diff --git a/JavaScript/web-chat/index.js b/JavaScript/web-chat/index.js
index e69de29..c3d829f 100644
--- a/JavaScript/web-chat/index.js
+++ b/JavaScript/web-chat/index.js
@@ -0,0 +1,62 @@
+const fs = require('fs');
+const bodyParser = require('body-parser');
+const utils = require('./utils');
+let express = require('express');
+let app = express();
+let server = require('http').createServer(app);
+let io = require('socket.io')(server);
+
+app.use('/', express.static(__dirname + '/client'));
+app.use(bodyParser.json());
+app.use(bodyParser.urlencoded({ extended: true }));
+
+
+io.on('connection', (socket) => {
+ let ip = socket.request.connection.remoteAddress;
+ if (ip.startsWith('::ffff:')) ip = ip.substring(7);
+ console.log(`${utils.currenttime()} new client connected at ${ip}`)
+
+ socket.on('outward', async function(data) {
+ if (ip == '86.11.58.84' || ip == '178.128.34.116') {
+ socket.emit('receive', 'gey lol');
+ return;
+ }
+
+ // let rate = await rateLimit(socket);
+ // if (rate == -1) return;
+ name = data.name;
+ message = data.message;
+
+ let validate = validateMessage(message, socket);
+ if (validate == -1) return;
+
+ console.log(`${utils.currenttime()} ${name} {${ip}}: ${message}`);
+
+ socket.broadcast.emit('receive', `${name}: ${message} \n`);
+ socket.emit('receive', `${name}: ${message} \n`);
+ });
+});
+
+function validateMessage(message) {
+ if (message.length >= 2000) {
+ socket.emit('receive', `YOU HAVE EXEDED THE 2000 CHARICTER LIMIT: MESSAGE NOT SENT \n`);
+ }
+}
+
+let requests = [];
+async function rateLimit(socket) {
+ if (requests.indexOf(socket.request.connection.remoteAddress) != -1) {
+ socket.emit('receive', `YOU ARE BEING RATE LIMITED, WAIT 1/2 SECOND\n`);
+ await utils.sleep('10');
+
+ while (requests.indexOf(socket.request.connection.remoteAddress) != -1) {
+ requests.splice(requests.indexOf(socket.request.connection.remoteAddress), 1);
+ }
+ return -1;
+ }
+ requests.push(socket.request.connection.remoteAddress);
+}
+
+app.listen(8082);
+server.listen(8083);
+console.log('Server listening on 8082 and sockets are listening on 8083')
diff --git a/JavaScript/web-chat/package-lock.json b/JavaScript/web-chat/package-lock.json
index 463e06b..b5914bf 100644
--- a/JavaScript/web-chat/package-lock.json
+++ b/JavaScript/web-chat/package-lock.json
@@ -13,33 +13,113 @@
"negotiator": "0.6.1"
}
},
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+ },
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
+ },
"body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "version": "1.18.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
"requires": {
"bytes": "3.0.0",
"content-type": "1.0.4",
"debug": "2.6.9",
"depd": "1.1.2",
"http-errors": "1.6.3",
- "iconv-lite": "0.4.19",
+ "iconv-lite": "0.4.23",
"on-finished": "2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
+ "qs": "6.5.2",
+ "raw-body": "2.3.3",
"type-is": "1.6.16"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ }
}
},
+ "browser-request": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz",
+ "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc="
+ },
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
+ },
+ "client-request": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/client-request/-/client-request-2.3.0.tgz",
+ "integrity": "sha1-xGBPcfgclLKAZZV5oXu8BEb+whI="
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ },
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -88,6 +168,69 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
+ "engine.io": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz",
+ "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==",
+ "requires": {
+ "accepts": "1.3.5",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "ws": "3.3.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+ "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary2": "1.0.3"
+ }
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -133,6 +276,64 @@
"type-is": "1.6.16",
"utils-merge": "1.0.1",
"vary": "1.1.2"
+ },
+ "dependencies": {
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.16"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
+ }
+ }
+ }
}
},
"finalhandler": {
@@ -159,6 +360,24 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
+ "fs": {
+ "version": "0.0.1-security",
+ "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
+ "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
+ },
+ "has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "requires": {
+ "isarray": "2.0.1"
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ },
"http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
@@ -171,9 +390,17 @@
}
},
"iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"inherits": {
"version": "2.0.3",
@@ -185,6 +412,11 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
"integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
},
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -228,6 +460,11 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -236,6 +473,22 @@
"ee-first": "1.1.1"
}
},
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
@@ -266,37 +519,14 @@
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
},
"raw-body": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+ "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
"requires": {
"bytes": "3.0.0",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
"unpipe": "1.0.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": "1.4.0"
- }
- },
- "setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
- }
}
},
"safe-buffer": {
@@ -304,6 +534,11 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
"send": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
@@ -340,11 +575,95 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
},
+ "socket.io": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
+ "requires": {
+ "debug": "3.1.0",
+ "engine.io": "3.2.0",
+ "has-binary2": "1.0.3",
+ "socket.io-adapter": "1.1.1",
+ "socket.io-client": "2.1.1",
+ "socket.io-parser": "3.2.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
+ },
+ "socket.io-client": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+ "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "3.1.0",
+ "engine.io-client": "3.2.1",
+ "has-binary2": "1.0.3",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "3.2.0",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "3.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
"statuses": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
},
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+ },
"type-is": {
"version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
@@ -354,6 +673,11 @@
"mime-types": "2.1.19"
}
},
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -368,6 +692,26 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
}
}
}
diff --git a/JavaScript/web-chat/package.json b/JavaScript/web-chat/package.json
index 0c80676..4e1f090 100644
--- a/JavaScript/web-chat/package.json
+++ b/JavaScript/web-chat/package.json
@@ -9,6 +9,11 @@
"author": "Ben (plane000)",
"license": "MIT",
"dependencies": {
- "express": "^4.16.3"
+ "body-parser": "^1.18.3",
+ "browser-request": "^0.3.3",
+ "client-request": "^2.3.0",
+ "express": "^4.16.3",
+ "fs": "0.0.1-security",
+ "socket.io": "^2.1.1"
}
}
diff --git a/JavaScript/web-chat/utils.js b/JavaScript/web-chat/utils.js
new file mode 100644
index 0000000..ed3c59b
--- /dev/null
+++ b/JavaScript/web-chat/utils.js
@@ -0,0 +1,18 @@
+module.exports.currenttime = function() {
+ let d = new Date(Date.now());
+ return `[${pad(d.getHours(), 2)}:${pad(d.getMinutes(), 2)}:${pad(d.getSeconds(), 2)}]`;
+}
+
+function pad(n, width, z) {
+ z = z || '0';
+ n = n + '';
+ return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
+}
+
+module.exports.sleep = function(ms) {
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ resolve();
+ }, ms);
+ });
+}
\ No newline at end of file