jok-play
Version:
creating online games never was so easy
213 lines (158 loc) • 5.18 kB
text/typescript
/*------------------------*/
/* Jok Play */
/* by */
/* Jok Entertainers */
/*------------------------*/
class Helper {
public static IO;
static pluginHttp;
static pluginSendgrid;
static pluginMongojs;
public static SendMail(to: string, subject: string, body: string) {
try {
if (!Helper.pluginSendgrid) {
var sendgrid = require('sendgrid');
if (sendgrid)
Helper.pluginSendgrid = sendgrid(process.env.SENDGRID_USERNAME, process.env.SENDGRID_PASSWORD);
}
}
catch (err) { return; }
if (!Helper.pluginSendgrid) return;
var sendObject = {
to: to,
from: 'no-reply@jok.io',
subject: subject,
text: body
};
var errorSending = (err, json) => {
if (err) { return console.error('Sendmail failed', err); }
};
Helper.pluginSendgrid.send(sendObject, errorSending);
}
public static HttpGet(url: string, cb, parseJson = false) {
try {
if (!Helper.pluginHttp) {
Helper.pluginHttp = require('http');
}
}
catch (err) { return; }
if (!Helper.pluginHttp) return;
Helper.pluginHttp.get(url, function (res) {
var data = '';
res.on('data', function (chunk) {
data += chunk;
});
res.on('end', function () {
// Success Result Callback
if (parseJson) {
try {
var oldData = data;
data = JSON.parse(data);
}
catch (err) {
// Fail Result Callback
cb && cb(false, err.message, oldData);
}
}
cb && cb(true, data);
});
}).on('error', function (e) {
// Fail Result Callback
cb && cb(false, e.message, e);
});
}
public static ChannelSockets(channel: string): any[] {
if (!Helper.IO || !Helper.IO.adapter) return;
var channelClients = Helper.IO.adapter().clients(channel);
var result = [];
for (var id in channelClients) {
var client_sid = channelClients[id];
if (!client_sid) continue;
var socket = Helper.IO.clients[client_sid];
if (!socket) continue;
result.push(socket);
}
return result;
}
public static SaveErrorLog(err) {
try {
if (!Helper.pluginMongojs) {
Helper.pluginMongojs = require('mongojs');
}
}
catch (err) { return; }
if (!process.env.MONGOHQ_URL) return;
try {
var db = Helper.pluginMongojs(process.env.MONGOHQ_URL, ['ErrorLog']);
db.ErrorLog.save({
Error: err,
Stack: err.stack,
CreateDate: Date.now()
}, err => err && console.log(err));
}
catch (err) { console.log(err); }
}
public static FinishGame(obj, cb) {
try {
if (!Helper.pluginHttp) {
Helper.pluginHttp = require('http');
}
}
catch (err) { return; }
var userString = JSON.stringify(obj);
var headers = {
'Content-Type': 'application/json',
'Content-Length': userString.length
};
var options = {
hostname: 'api.jok.io',
port: 80,
path: '/game/finish',
method: 'POST',
headers: headers
};
var req = Helper.pluginHttp.request(options, function (res) {
var result = '';
res.setEncoding('utf8');
res.on('data', chunk => result += chunk);
res.on('end', () => {
try {
result = JSON.parse(result);
}
catch (err) {
}
cb && cb(null, result);
});
});
req.on('error', err => cb && cb(err));
req.write(userString);
req.end();
}
}
interface Array {
unique(): any[];
contains(v): boolean;
remove(item: any): boolean;
}
Array.prototype.unique = function () {
var arr = [];
for (var i = 0; i < this.length; i++) {
if (!arr.contains(this[i])) {
arr.push(this[i]);
}
}
return arr;
}
Array.prototype.contains = function (v) {
for (var i = 0; i < this.length; i++) {
if (this[i] === v) return true;
}
return false;
};
Array.prototype.remove = function (item) {
var index = this.indexOf(item);
if (index == -1)
return false;
this.splice(index, 1);
return true;
};