From 48ebeb447721a5997c84ffa5bfa6eb3fc397acfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abdussamed=20ULUTA=C5=9E?= Date: Mon, 21 Nov 2022 00:09:22 +0300 Subject: [PATCH] Room Objecttive --- Source/Client.js | 3 +- Source/Services/Room.js | 108 ++++++++++++---- Source/WebSocket.js | 6 + package-lock.json | 276 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + test.html | 24 +++- wsjs.js | 32 ++++- 7 files changed, 417 insertions(+), 33 deletions(-) diff --git a/Source/Client.js b/Source/Client.js index 3e2a75d..12e36f5 100644 --- a/Source/Client.js +++ b/Source/Client.js @@ -14,12 +14,11 @@ function Client() this.created_at = null; this.store = new Map(); + this.rooms = new Set(); }; Client.prototype.send = function(obj){ this.socket.sendUTF(JSON.stringify(obj)); }; -Client.prototype.rooms = new Set(); - exports.Client = Client; \ No newline at end of file diff --git a/Source/Services/Room.js b/Source/Services/Room.js index 74262cd..c92bf8f 100644 --- a/Source/Services/Room.js +++ b/Source/Services/Room.js @@ -2,6 +2,7 @@ const { Client } = require("../Client.js"); let {randomUUID} = require("crypto"); const joi = require("joi"); let {addService,addListener} = require("../WebSocket.js"); +let term = require("terminal-kit").terminal; function Room() { @@ -62,7 +63,8 @@ function Room() * @param {Room} room */ Room.prototype.publish = function(room){ - Room.rooms.set(room.id, room); + Room.rooms.set(this.id, this); + term.green("Room Published ").white(this.name," in ").yellow(this.clients.size).white(" clients")('\n'); }; Room.prototype.toJSON = function(){ let obj = {}; @@ -80,36 +82,48 @@ Room.prototype.send = function(obj){ for (const client of this.clients.values()) { client.send(obj); } + term.green("Room bulk message ").white(this.name," in ").yellow(this.clients.size + "").white(" clients")('\n'); }; /** * @param {Client} client */ Room.prototype.join = function(client){ - this.notifyActionJoined && this.send([{ + if(this.notifyActionJoined) + { + this.send([{ + id: client.id, + roomid: this.id, + ownerid: this.owner.id + },'room/joined']); + }; + client.rooms.add(this.id); + this.clients.set(client.id, client); + term.green("Client Room joined ").white(this.name," in ").yellow(this.clients.size + "").white(" clients")('\n'); +}; +Room.prototype.down = function(){ + term.red("Room is downed ").red(this.name," in ").yellow(this.clients.size + "").red(" clients")('\n'); + this.send([{ id: client.id, roomid: this.id, ownerid: this.owner.id - },'room/joined']); - client.rooms.add(this.id); - this.clients.set(client.id, client); -}; -Room.prototype.active = function(){ - Room.rooms.set(this.id, this); -}; -Room.prototype.deactive = function(){ + },'room/closed']); Room.rooms.delete(this.id); }; /** * @param {Client} client */ Room.prototype.eject = function(client){ - this.notifyActionEjected && this.send([{ - id: client.id, - roomid: this.id, - ownerid: this.owner.id - },'room/ejected']); + if(this.notifyActionEjected) + { + this.send([{ + id: client.id, + roomid: this.id, + ownerid: this.owner.id + },'room/ejected']); + } client.rooms.delete(this.id); this.clients.delete(client.id); + term.red("Client Room ejected ").red(this.name," in ").yellow(this.clients.size + "").red(" clients")('\n'); }; /** @@ -121,19 +135,18 @@ addListener('connect',(global, client)=>{ let room = new Room(); room.accessType = "private"; room.joinType = "notify"; - room.clients.set(client.id, client); room.description = 'Yourself private room, you can invite friends'; room.id = client.id; - room.name = "Your Room"; + room.name = "Your Room | " + client.id; room.owner = client; room.join(client); - room.active(); + room.publish(); }); addListener('disconnect',(global, client)=>{ + Room.rooms.get(client.id).eject(client); for (const roomId of client.rooms) { Room.rooms.get(roomId).eject(client); - Room.rooms.get(roomId).deactive(); } }); @@ -165,6 +178,32 @@ addService(({ end(room.toJSON()) break; } + case 'room-info':{ + let {name} = message; + for (const [roomId,{name:RoomName}] of Room.rooms) { + if(name == RoomName) + { + return end({ + status : "success", + room : Room.rooms.get(roomId).toJSON() + }) + } + }; + return end({ + status : "fail", + message : "NOT-FOUND-ROOM" + }) + break; + } + case 'joinedrooms':{ + let data = [ + ...client.rooms + ].map(e => { + return Room.rooms.get(e).toJSON() + }); + end(data) + break; + } case 'create-room':{ let {error} = CreateRoomVerify.validate(message); if(error) @@ -174,6 +213,16 @@ addService(({ messages: error.message }) }else{ + let {name} = message; + for (const [,{name:RoomName}] of Room.rooms) { + if(name == RoomName) + { + return end({ + status : "fail", + message : "ALREADY-EXISTS" + }) + } + } let room = new Room(); room.accessType = message.accessType; room.notifyActionInvite = message.notifyActionInvite; @@ -184,16 +233,27 @@ addService(({ room.name = message.name; room.owner = client; room.join(client); - room.active(); - end(room.toJSON()) + room.publish(); + end({ + status: "success", + room: room.toJSON() + }); } break; } - case 'join':{ - let isRoom = Room.rooms.has(client.id); + case 'joinroom':{ + let {name} = message; + let roomId; + for (const [roomId,{name:RoomName}] of Room.rooms) { + if(name == RoomName) + { + roomId = roomId + } + } + let isRoom = Room.rooms.has(roomId); if(isRoom) { - let room = Room.rooms.get(client.id); + let room = Room.rooms.get(roomId); if(room.joinType == "lock") { return end({ diff --git a/Source/WebSocket.js b/Source/WebSocket.js index 6c4c7a6..9170026 100644 --- a/Source/WebSocket.js +++ b/Source/WebSocket.js @@ -5,6 +5,12 @@ let {http} = require("./HTTPServer"); let {randomUUID} = require("crypto"); const { Client } = require("./Client.js"); +console.log("Web Socket Protocol is ready"); + +http.addListener("upgrade",() => { + console.log("HTTP Upgrading to WebSocket"); +}) + let wsServer = new websocket.server({ httpServer: http, autoAcceptConnections: true diff --git a/package-lock.json b/package-lock.json index e211967..1c132b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,23 @@ "joi": "^17.7.0", "knex": "^2.3.0", "sqlite3": "^5.1.2", + "terminal-kit": "^3.0.0", "websocket": "^1.0.34" } }, + "node_modules/@cronvel/get-pixels": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.1.tgz", + "integrity": "sha512-gB5C5nDIacLUdsMuW8YsM9SzK3vaFANe4J11CVXpovpy7bZUGrcJKmc6m/0gWG789pKr6XSZY2aEetjFvSRw5g==", + "dependencies": { + "jpeg-js": "^0.4.4", + "ndarray": "^1.0.19", + "ndarray-pack": "^1.1.1", + "node-bitmap": "0.0.1", + "omggif": "^1.0.10", + "pngjs": "^6.0.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -235,6 +249,11 @@ "node": ">=10" } }, + "node_modules/chroma-js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", + "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -275,6 +294,14 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, + "node_modules/cwise-compiler": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz", + "integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==", + "dependencies": { + "uniq": "^1.0.0" + } + }, "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -606,12 +633,22 @@ "node": ">= 0.10" } }, + "node_modules/iota-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", + "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==" + }, "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -660,6 +697,11 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, "node_modules/knex": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/knex/-/knex-2.3.0.tgz", @@ -710,6 +752,14 @@ } } }, + "node_modules/lazyness": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz", + "integrity": "sha512-KenL6EFbwxBwRxG93t0gcUyi0Nw0Ub31FJKN1laA4UscdkL1K1AxUd0gYZdcLU3v+x+wcFi4uQKS5hL+fk500g==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -890,6 +940,24 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/ndarray": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", + "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", + "dependencies": { + "iota-array": "^1.0.0", + "is-buffer": "^1.0.2" + } + }, + "node_modules/ndarray-pack": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz", + "integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==", + "dependencies": { + "cwise-compiler": "^1.1.2", + "ndarray": "^1.0.13" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -904,11 +972,27 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, + "node_modules/nextgen-events": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.5.3.tgz", + "integrity": "sha512-P6qw6kenNXP+J9XlKJNi/MNHUQ+Lx5K8FEcSfX7/w8KJdZan5+BB5MKzuNgL2RTjHG1Svg8SehfseVEp8zAqwA==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" }, + "node_modules/node-bitmap": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz", + "integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==", + "engines": { + "node": ">=v0.6.5" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -1042,6 +1126,11 @@ "node": ">=0.10.0" } }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1083,6 +1172,14 @@ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, + "node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "engines": { + "node": ">=12.13.0" + } + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -1217,6 +1314,22 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/seventh": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/seventh/-/seventh-0.8.1.tgz", + "integrity": "sha512-houkkIUA97+aLqTAfgzEAIHfPkjKaJXek7zESTrMs+eFfsHvUjzrjxEstZiFTGKwOR+VJQ4p+/AlWwObcDE+xQ==", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=16.13.0" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -1302,6 +1415,14 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-kit": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/string-kit/-/string-kit-0.17.6.tgz", + "integrity": "sha512-o3ivC9/8proGcnA5Janz3DBqpG9lEV6e8wXviPLy8RKHgqaBbRDpU0jpFUa6caarMFhgJZIom+jrjYWMplJkmw==", + "engines": { + "node": ">=14.15.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1361,6 +1482,24 @@ "node": ">=8.0.0" } }, + "node_modules/terminal-kit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/terminal-kit/-/terminal-kit-3.0.0.tgz", + "integrity": "sha512-GSJGYF0+hoFylKJXmq0ntE42b4S7zUkxFpf7FqHGwKFPCNeGkuv3jV0tmGquZkmfh5mYb/B2xoPJiP40mJsQrg==", + "dependencies": { + "@cronvel/get-pixels": "^3.4.1", + "chroma-js": "^2.4.2", + "lazyness": "^1.2.0", + "ndarray": "^1.0.19", + "nextgen-events": "^1.5.3", + "seventh": "^0.8.1", + "string-kit": "^0.17.6", + "tree-kit": "^0.7.4" + }, + "engines": { + "node": ">=16.13.0" + } + }, "node_modules/tildify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", @@ -1374,6 +1513,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/tree-kit": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.4.tgz", + "integrity": "sha512-Of3tPmVs3b6BhzyUJ7t0olisf47kYr9qAm0XaUpURMjdBn6TwiVaaMuTFoKkkvPGojd9trKAHlrGGcGKcdR1DA==" + }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -1387,6 +1531,11 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -1508,6 +1657,19 @@ } }, "dependencies": { + "@cronvel/get-pixels": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.1.tgz", + "integrity": "sha512-gB5C5nDIacLUdsMuW8YsM9SzK3vaFANe4J11CVXpovpy7bZUGrcJKmc6m/0gWG789pKr6XSZY2aEetjFvSRw5g==", + "requires": { + "jpeg-js": "^0.4.4", + "ndarray": "^1.0.19", + "ndarray-pack": "^1.1.1", + "node-bitmap": "0.0.1", + "omggif": "^1.0.10", + "pngjs": "^6.0.0" + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1693,6 +1855,11 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, + "chroma-js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", + "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -1724,6 +1891,14 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, + "cwise-compiler": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz", + "integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==", + "requires": { + "uniq": "^1.0.0" + } + }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -1994,12 +2169,22 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, + "iota-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", + "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==" + }, "ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -2042,6 +2227,11 @@ "@sideway/pinpoint": "^2.0.0" } }, + "jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, "knex": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/knex/-/knex-2.3.0.tgz", @@ -2063,6 +2253,11 @@ "tildify": "2.0.0" } }, + "lazyness": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz", + "integrity": "sha512-KenL6EFbwxBwRxG93t0gcUyi0Nw0Ub31FJKN1laA4UscdkL1K1AxUd0gYZdcLU3v+x+wcFi4uQKS5hL+fk500g==" + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -2198,6 +2393,24 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "ndarray": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", + "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", + "requires": { + "iota-array": "^1.0.0", + "is-buffer": "^1.0.2" + } + }, + "ndarray-pack": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz", + "integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==", + "requires": { + "cwise-compiler": "^1.1.2", + "ndarray": "^1.0.13" + } + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -2209,11 +2422,21 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, + "nextgen-events": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.5.3.tgz", + "integrity": "sha512-P6qw6kenNXP+J9XlKJNi/MNHUQ+Lx5K8FEcSfX7/w8KJdZan5+BB5MKzuNgL2RTjHG1Svg8SehfseVEp8zAqwA==" + }, "node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" }, + "node-bitmap": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz", + "integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==" + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -2309,6 +2532,11 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2341,6 +2569,11 @@ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -2428,6 +2661,19 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "seventh": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/seventh/-/seventh-0.8.1.tgz", + "integrity": "sha512-houkkIUA97+aLqTAfgzEAIHfPkjKaJXek7zESTrMs+eFfsHvUjzrjxEstZiFTGKwOR+VJQ4p+/AlWwObcDE+xQ==", + "requires": { + "setimmediate": "^1.0.5" + } + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -2488,6 +2734,11 @@ "safe-buffer": "~5.2.0" } }, + "string-kit": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/string-kit/-/string-kit-0.17.6.tgz", + "integrity": "sha512-o3ivC9/8proGcnA5Janz3DBqpG9lEV6e8wXviPLy8RKHgqaBbRDpU0jpFUa6caarMFhgJZIom+jrjYWMplJkmw==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2529,6 +2780,21 @@ "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" }, + "terminal-kit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/terminal-kit/-/terminal-kit-3.0.0.tgz", + "integrity": "sha512-GSJGYF0+hoFylKJXmq0ntE42b4S7zUkxFpf7FqHGwKFPCNeGkuv3jV0tmGquZkmfh5mYb/B2xoPJiP40mJsQrg==", + "requires": { + "@cronvel/get-pixels": "^3.4.1", + "chroma-js": "^2.4.2", + "lazyness": "^1.2.0", + "ndarray": "^1.0.19", + "nextgen-events": "^1.5.3", + "seventh": "^0.8.1", + "string-kit": "^0.17.6", + "tree-kit": "^0.7.4" + } + }, "tildify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", @@ -2539,6 +2805,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "tree-kit": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.4.tgz", + "integrity": "sha512-Of3tPmVs3b6BhzyUJ7t0olisf47kYr9qAm0XaUpURMjdBn6TwiVaaMuTFoKkkvPGojd9trKAHlrGGcGKcdR1DA==" + }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -2552,6 +2823,11 @@ "is-typedarray": "^1.0.0" } }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", diff --git a/package.json b/package.json index 49583c1..5a5658e 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "joi": "^17.7.0", "knex": "^2.3.0", "sqlite3": "^5.1.2", + "terminal-kit": "^3.0.0", "websocket": "^1.0.34" } } diff --git a/test.html b/test.html index da095ce..d63ba37 100644 --- a/test.html +++ b/test.html @@ -12,18 +12,30 @@ let ws = new WSJS(); ws.connect('ws://localhost:8282'); ws.scope(async ()=>{ + let secretRoom; console.log("Connected ws") - let roomInfo = await ws.fetchMyRoomInfo(); - let secretRoom = await ws.createRoom({ - name: "Benim Odam", - description: "Gizli Odam" - }); + let roomInfo = await ws.roomInfo("MY-ROOM"); + + if(roomInfo.status == 'fail' && roomInfo.message == "NOT-FOUND-ROOM") + { + let secretRoom = await ws.createRoom({ + name: "MY-ROOM", + description: "Gizli Odam", + joinType: "free" + }); + console.log(secretRoom); + }else{ + + } + + console.log(await ws.getJoinedRooms()); + }); ws.signal('id',(data)=>{ console.log("Your id is ", data.value) }); ws.signal("room/joined",(joinStatus)=>{ - console.log("Room ejected", joinStatus) + console.log("Room joined", joinStatus) }); ws.signal("room/ejected",(ejectStatus)=>{ console.log("Room ejected", ejectStatus) diff --git a/wsjs.js b/wsjs.js index d2cfa8e..6424690 100644 --- a/wsjs.js +++ b/wsjs.js @@ -115,6 +115,7 @@ WSJS.prototype.sendRaw = function(obj){ }; } WSJS.prototype.checkAuth = async function(username, password){ + return false; let {value:isAuth} = await this.request({ type: 'auth/check' }); @@ -152,6 +153,35 @@ WSJS.prototype.createRoom = async function(options){ name: options.name || "No" }); - debugger; + return result; + } +}; +WSJS.prototype.roomInfo = async function(name){ + if(!await this.checkAuth()) + { + let result = await this.request({ + type: 'room-info', + name + }); + return result; + } +}; +WSJS.prototype.joinRoom = async function(name){ + if(!await this.checkAuth()) + { + let result = await this.request({ + type: 'joinroom', + name + }); + return result; + } +}; +WSJS.prototype.joinedRooms = new Map(); +WSJS.prototype.getJoinedRooms = async function(){ + if(!await this.checkAuth()) + { + return await this.request({ + type: 'joinedrooms' + }); } }; \ No newline at end of file