diff --git a/src/Client.js b/src/Client.js index 5aa87b72d..bc783c45b 100644 --- a/src/Client.js +++ b/src/Client.js @@ -3,6 +3,7 @@ var Endpoints = require("./Endpoints.js"); //node modules var request = require("superagent"); +var WebSocket = require("ws"); var defaultOptions = { cache_tokens: false @@ -22,6 +23,7 @@ class Client { this.websocket = null; this.events = new Map(); this.user = null; + this.alreadySentData = false; /* State values: 0 - idle @@ -35,35 +37,80 @@ class Client { get ready() { return this.state === 3; } + + debug(message) { + + } //def login - login(email = "foo@bar.com", password = "pass1234s", callback = function(){}) { + login(email = "foo@bar.com", password = "pass1234s", callback = function () { }) { var self = this; if (this.state === 0 || this.state === 4) { - + this.state = 1; //set the state to logging in request .post(Endpoints.LOGIN) .send({ - email : email, - password : password - }).end(function(err, res){ - - if(err){ + email: email, + password: password + }).end(function (err, res) { + + if (err) { self.state = 4; //set state to disconnected callback(err); - }else{ + } else { self.state = 2; //set state to logged in (not yet ready) - self.token = res.body.token; + self.token = res.body.token; //set our token + self.trySendConnData(); + callback(null, self.token); } - + }); } } + + //def createws + createws() { + if (this.websocket) + return false; + + var self = this; + + //good to go + this.websocket = new WebSocket(Endpoints.WEBSOCKET_HUB); + this.websocket.onopen = function () { + self.trySendConnData(); //try connecting + }; + } + + //def trySendConnData + trySendConnData() { + + if (this.token && this.websocket.readyState === WebSocket.OPEN && !this.alreadySentData) { + + this.alreadySentData = true; + + var data = { + op: 2, + d: { + token: this.token, + v: 2, + properties: { + "$os": "discord.js", + "$browser": "discord.js", + "$device": "discord.js", + "$referrer": "", + "$referring_domain": "" + } + } + }; + this.websocket.send(JSON.stringify(data)); + } + } } \ No newline at end of file