server for my chess game
Diffstat (limited to 'src/index.js')
| -rw-r--r-- | src/index.js | 63 |
1 files changed, 57 insertions, 6 deletions
diff --git a/src/index.js b/src/index.js index 98ae2ba..21b6d07 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,10 @@ -/*jshint esversion: 6 */ const WebSocket = require("ws"); -const gdCom = require("@gd-com/utils"); const PORT = process.env.PORT || 3000; +const wss = new WebSocket.Server({ port: PORT }); // init server asap -const wss = new WebSocket.Server({ port: PORT }); +const { putVar, getVar } = require("@gd-com/utils"); +const { command } = require("./pg"); const HEADERS = { relay: "R", @@ -13,6 +13,8 @@ const HEADERS = { stopgame: "K", ping: "P", signal: "S", + create_user: "C", + signin: ">", }; let games = {}; @@ -22,7 +24,7 @@ function str_obj(obj) { } function send_packet(data, header, client) { - const packet = gdCom.putVar({ data: data, header: header }); + const packet = putVar({ data: data, header: header }); client.send(packet); } @@ -37,10 +39,9 @@ wss.on("connection", (ws, req) => { console.log(`client connected (${req.socket.remoteAddress})`); // on message recieved ws.on("message", (message) => { - let recieve = gdCom.getVar(Buffer.from(message)).value; + let recieve = getVar(Buffer.from(message)).value; let data = recieve.data; let header = recieve.header; - console.log(`recieved ${str_obj(data)}`); if (header) { switch (header) { case HEADERS.relay: @@ -61,6 +62,12 @@ wss.on("connection", (ws, req) => { case HEADERS.signal: signal_other(data, ws); break; + case HEADERS.create_user: + signup(data, ws); + break; + case HEADERS.signin: + signin(data, ws); + break; default: console.log(`header ${header} unknown`); break; @@ -69,6 +76,50 @@ wss.on("connection", (ws, req) => { }); }); +async function get_propertys(name) { + const c = `SELECT * FROM users WHERE name = '${name}';`; + const result = await command(c); + return result.rows[0] ? result.rows[0] : undefined; +} + +async function signin(data, ws) { + const c = `SELECT * FROM users WHERE name = '${data.name}' AND password = '${data.password}';`; + const res = await command(c); + if (res.rows[0]) { + const packet = { id: res.rows[0].id, country: res.rows[0].country }; + send_packet(packet, HEADERS.signin, ws); + } else { + send_packet("NO", HEADERS.signin, ws); + } +} + +async function signup(data, ws) { + console.log("attempting to create user"); + const res = await get_propertys(data.name); + if (res) { + send_packet("err: user already exists", HEADERS.create_user, ws); + console.error("user already exists"); + return; // if existing, send err + } + + async function init_user() { + const c = `INSERT INTO users (name, country, password) VALUES ('${data.name}', '${data.country}', '${data.password}') RETURNING id;`; + const res = await command(c); + console.log(`created user sucessully! (${c})`); + return res.rows[0].id; // return the uuid + } + let id; + try { + id = await init_user(); + } catch (e) { + const packet = `err: could not create user(${e.stack})`; + send_packet(packet, HEADERS.create_user, ws); + console.error(e.stack); + return; + } + send_packet(id, HEADERS.create_user, ws); +} + function handle_joinrequest(data, ws) { console.log("joinrequest", data); if (games[data] !== undefined) { |