update to types
This commit is contained in:
parent
8fa7f98493
commit
cdd6179992
42
dist/server/channelManager.js
vendored
42
dist/server/channelManager.js
vendored
@ -1,6 +1,46 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const channelBase_1 = require("./channels/channelBase");
|
||||
class ChannelManager {
|
||||
constructor() {
|
||||
this.channels = [];
|
||||
// create default channel...
|
||||
var channel = new channelBase_1.default('default');
|
||||
this.channels.push(channel);
|
||||
}
|
||||
createChannel(data) {
|
||||
var channel = this.channelExists(data.channel_id);
|
||||
if (channel) {
|
||||
console.log('channel already exists');
|
||||
}
|
||||
else {
|
||||
var Channel = require(`./channels/${data.client_type}s/${data.client}channel`);
|
||||
var channel = new channelBase_1.default(data.channel_id);
|
||||
this.channels.push(channel);
|
||||
console.log('added channel to channel manager');
|
||||
}
|
||||
console.log(data.channel_id);
|
||||
}
|
||||
channelExists(channel_id) {
|
||||
for (let channel of this.channels) {
|
||||
if (channel.id == channel_id) {
|
||||
return channel;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
addClientToChannel(client, channel_id) {
|
||||
var channel = this.channelExists(channel_id);
|
||||
if (channel) {
|
||||
channel.addClient(client);
|
||||
client.connectToChannel(channel);
|
||||
}
|
||||
else {
|
||||
console.log(`channel with id ${channel_id} does not exist.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
module.exports = ChannelManager;
|
||||
exports.default = ChannelManager;
|
||||
// { :client => 'mhs', :client_type => 'site', :user_id => 125, :user_type => 'user', :channel => 'mhs_1239' }
|
||||
//# sourceMappingURL=channelManager.js.map
|
2
dist/server/channelManager.js.map
vendored
2
dist/server/channelManager.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"channelManager.js","sourceRoot":"","sources":["../../src/channelManager.ts"],"names":[],"mappings":";AAAA,MAAM,cAAc;CAEnB;AAAA,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC"}
|
||||
{"version":3,"file":"channelManager.js","sourceRoot":"","sources":["../../src/channelManager.ts"],"names":[],"mappings":";;AAAA,wDAAiD;AAKjD,MAAM,cAAc;IAGlB;QAFA,aAAQ,GAA+B,EAAE,CAAC;QAGxC,4BAA4B;QAC5B,IAAI,OAAO,GAAgB,IAAI,qBAAW,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,IAAS;QACrB,IAAI,OAAO,GAAgC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/E,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;SACvC;aAAM;YACL,IAAI,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;YAC/E,IAAI,OAAO,GAAgC,IAAI,qBAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;SACjD;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,UAAkB;QAC9B,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,EAAE,IAAI,UAAU,EAAE;gBAC5B,OAAO,OAAO,CAAC;aAChB;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,MAA4B,EAAE,UAAkB;QACjE,IAAI,OAAO,GAAgC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE1E,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAClC;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,kBAAkB,CAAC,CAAA;SAC7D;IACH,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,cAAc,CAAC;AAE9B,8GAA8G"}
|
42
dist/server/channels/channelBase.js
vendored
Normal file
42
dist/server/channels/channelBase.js
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class ChannelBase {
|
||||
constructor(id) {
|
||||
this.clients = [];
|
||||
this.id = id;
|
||||
console.log('channel created');
|
||||
}
|
||||
addClient(client) {
|
||||
console.log(client.data);
|
||||
if (this.clientExists(client.id)) {
|
||||
console.log('client already exits in channel');
|
||||
}
|
||||
else {
|
||||
this.clients.push(client);
|
||||
console.log('added client to channel');
|
||||
}
|
||||
}
|
||||
clientExists(id) {
|
||||
for (let client of this.clients) {
|
||||
if (client.id == id) {
|
||||
return client;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
broadcastMessage(from, message) {
|
||||
for (let client of this.clients) {
|
||||
if (client != from) {
|
||||
client.ws.send(message);
|
||||
console.log(`sent to ${client.id}: %s`, message);
|
||||
console.log(message);
|
||||
}
|
||||
else {
|
||||
console.log('client is same as sender');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
exports.default = ChannelBase;
|
||||
//# sourceMappingURL=channelBase.js.map
|
1
dist/server/channels/channelBase.js.map
vendored
Normal file
1
dist/server/channels/channelBase.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"channelBase.js","sourceRoot":"","sources":["../../../src/channels/channelBase.ts"],"names":[],"mappings":";;AAGA,MAAM,WAAW;IAIf,YAAY,EAAU;QAFtB,YAAO,GAA6B,EAAE,CAAC;QAGrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,MAA4B;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;SAChD;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;SACxC;IACH,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;gBACnB,OAAO,MAAM,CAAC;aACf;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,IAA+B,EAAE,OAAe;QAC/D,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACtB;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;aACzC;SACF;IACH,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,WAAW,CAAC"}
|
20
dist/server/channels/sites/mhsChannel.js
vendored
Normal file
20
dist/server/channels/sites/mhsChannel.js
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const channelBase_1 = require("../channelBase");
|
||||
class MHSChannel extends channelBase_1.default {
|
||||
broadcastMessage(from, message) {
|
||||
for (let client of this.clients) {
|
||||
if (client != from) {
|
||||
client.ws.send(message);
|
||||
console.log(`sent to ${client.id}: %s`, message);
|
||||
console.log(message);
|
||||
}
|
||||
else {
|
||||
console.log('client is same as sender');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
exports.default = MHSChannel;
|
||||
//# sourceMappingURL=mhsChannel.js.map
|
1
dist/server/channels/sites/mhsChannel.js.map
vendored
Normal file
1
dist/server/channels/sites/mhsChannel.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"mhsChannel.js","sourceRoot":"","sources":["../../../../src/channels/sites/mhsChannel.ts"],"names":[],"mappings":";;AAEA,gDAAyC;AAEzC,MAAM,UAAW,SAAQ,qBAAW;IAClC,gBAAgB,CAAC,IAA+B,EAAE,OAAe;QAC/D,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACtB;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;aACzC;SACF;IACH,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,UAAU,CAAC"}
|
8
dist/server/client/sites/mhsClient.js
vendored
Normal file
8
dist/server/client/sites/mhsClient.js
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const base_1 = require("../base");
|
||||
class MHSClient extends base_1.default {
|
||||
}
|
||||
;
|
||||
module.exports = MHSClient;
|
||||
//# sourceMappingURL=mhsClient.js.map
|
1
dist/server/client/sites/mhsClient.js.map
vendored
Normal file
1
dist/server/client/sites/mhsClient.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"mhsClient.js","sourceRoot":"","sources":["../../../../src/client/sites/mhsClient.ts"],"names":[],"mappings":";;AAAA,kCAA2B;AAE3B,MAAM,SAAU,SAAQ,cAAI;CAE3B;AAAA,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC"}
|
59
dist/server/clientManager.js
vendored
59
dist/server/clientManager.js
vendored
@ -1,20 +1,59 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class ClientManager {
|
||||
constructor(data, ws) {
|
||||
this.ws = ws;
|
||||
this.client(data);
|
||||
constructor() {
|
||||
this.clients = [];
|
||||
//...maybe one day
|
||||
}
|
||||
client(data) {
|
||||
if (data.site) {
|
||||
console.log('legit: ' + data.site);
|
||||
addClient(data, ws) {
|
||||
if (data.client_type && !this.clientExists(data.user_id)) {
|
||||
var Client = require(`./clients/${data.client_type}s/${data.client}client`);
|
||||
var client = new Client(data, ws);
|
||||
this.clients.push(client);
|
||||
console.log('client added to client manager');
|
||||
return client;
|
||||
}
|
||||
else {
|
||||
console.log('no client type designated, socket disconnect.');
|
||||
this.ws.close();
|
||||
console.log('no client type designated or client already exists, socket disconnected.');
|
||||
ws.close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
clientsOfType(client_type) {
|
||||
var result = [];
|
||||
for (let client of this.clients) {
|
||||
if (client.type() == client_type) {
|
||||
result.push(client);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
clientExists(id) {
|
||||
for (let client of this.clients) {
|
||||
if (client.id == id) {
|
||||
return client;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
getClient(id) {
|
||||
return this.clientExists(id);
|
||||
}
|
||||
removeClient(id) {
|
||||
var index = 0;
|
||||
for (let client of this.clients) {
|
||||
if (client.id == id) {
|
||||
client.ws.close();
|
||||
this.clients.splice(index, 1);
|
||||
console.log('client disconnected');
|
||||
return true;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
module.exports = ClientManager;
|
||||
// user_type: 'user', user_id: 125, site: 'mhs' }
|
||||
exports.default = ClientManager;
|
||||
// { :client => 'mhs', :client_type => 'site', :user_id => 125, :user_type => 'user' }
|
||||
// var exampleSocket = new WebSocket("wss://ysbraid.localhost:8443?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImNsaWVudCI6Im1ocyIsImNsaWVudF90eXBlIjoic2l0ZSIsInVzZXJfdHlwZSI6InVzZXIiLCJ1c2VyX2lkIjoxMjV9LCJleHAiOjE1NTI4MDExMDUsImF1ZCI6ImludGVybmFsIiwiaXNzIjoiWWFyZHN0aWNrIFNvZnR3YXJlIiwic3ViIjoiQnJhaWQgSldUIn0.fkfoqoWNjOeKfsXXJxh-9lBudhFsxhUt9fUIT1BXOLU");
|
||||
//# sourceMappingURL=clientManager.js.map
|
2
dist/server/clientManager.js.map
vendored
2
dist/server/clientManager.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"clientManager.js","sourceRoot":"","sources":["../../src/clientManager.ts"],"names":[],"mappings":";AAAA,MAAM,aAAa;IAGjB,YAAY,IAAY,EAAE,EAAU;QAClC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,IAAS;QACd,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;SACnC;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;YAC5D,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;SACjB;IACH,CAAC;CACF;AAAA,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;AAG9B,iDAAiD"}
|
||||
{"version":3,"file":"clientManager.js","sourceRoot":"","sources":["../../src/clientManager.ts"],"names":[],"mappings":";;AAIA,MAAM,aAAa;IAGjB;QAFA,YAAO,GAA6B,EAAE,CAAC;QAGrC,kBAAkB;IACpB,CAAC;IAED,SAAS,CAAC,IAAS,EAAE,EAAa;QAChC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACxD,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC5E,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,MAAM,CAAC;SACf;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAA;YACvF,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,IAAI,MAAM,GAA6B,EAAE,CAAC;QAE1C,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE;gBAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrB;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;gBACnB,OAAO,MAAM,CAAC;aACf;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,IAAI,KAAK,GAAW,CAAC,CAAC;QAEtB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;gBACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC;aACb;YAED,KAAK,EAAE,CAAC;SACT;IACH,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,aAAa,CAAC;AAG7B,sFAAsF;AACtF,gXAAgX"}
|
22
dist/server/clients/base.js
vendored
Normal file
22
dist/server/clients/base.js
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class ClientBase {
|
||||
constructor(data, ws) {
|
||||
this.ws = ws;
|
||||
this.data = data;
|
||||
this.id = data.user_id;
|
||||
this.channel = null;
|
||||
}
|
||||
getData() {
|
||||
return this.data;
|
||||
}
|
||||
type() {
|
||||
return this.data.client_type;
|
||||
}
|
||||
connectToChannel(channel) {
|
||||
this.channel = channel;
|
||||
}
|
||||
}
|
||||
;
|
||||
exports.default = ClientBase;
|
||||
//# sourceMappingURL=Base.js.map
|
1
dist/server/clients/base.js.map
vendored
Normal file
1
dist/server/clients/base.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../src/clients/Base.ts"],"names":[],"mappings":";;AAIA,MAAM,UAAU;IAMd,YAAY,IAAS,EAAE,EAAa;QAClC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,OAAoB;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,UAAU,CAAC"}
|
30
dist/server/clients/clientBase.js
vendored
Normal file
30
dist/server/clients/clientBase.js
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class ClientBase {
|
||||
constructor(data, ws) {
|
||||
this.ws = ws;
|
||||
this.data = data;
|
||||
this.id = data.user_id;
|
||||
this.channel = null;
|
||||
}
|
||||
getData() {
|
||||
return this.data;
|
||||
}
|
||||
type() {
|
||||
return this.data.client_type;
|
||||
}
|
||||
connectToChannel(channel) {
|
||||
this.channel = channel;
|
||||
this.ws.on('message', (message) => {
|
||||
channel.broadcastMessage(this, message);
|
||||
console.log('broadcasted: %s', message);
|
||||
});
|
||||
}
|
||||
replaceWebSocket(ws) {
|
||||
this.ws.close();
|
||||
this.ws = ws;
|
||||
}
|
||||
}
|
||||
;
|
||||
exports.default = ClientBase;
|
||||
//# sourceMappingURL=clientBase.js.map
|
1
dist/server/clients/clientBase.js.map
vendored
Normal file
1
dist/server/clients/clientBase.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"clientBase.js","sourceRoot":"","sources":["../../../src/clients/clientBase.ts"],"names":[],"mappings":";;AAKA,MAAM,UAAU;IAMd,YAAY,IAAS,EAAE,EAAa;QAClC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,OAA+B;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAe,EAAE,EAAE;YACxC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,EAAa;QAC5B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;CACF;AAAA,CAAC;AAEF,kBAAe,UAAU,CAAC"}
|
13
dist/server/clients/sites/mhsClient.js
vendored
Normal file
13
dist/server/clients/sites/mhsClient.js
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const clientBase_1 = require("../clientBase");
|
||||
class MHSClient extends clientBase_1.default {
|
||||
constructor(data, ws) {
|
||||
super(data, ws);
|
||||
console.log('mhs client created');
|
||||
}
|
||||
}
|
||||
;
|
||||
module.exports = MHSClient;
|
||||
exports.default = MHSClient;
|
||||
//# sourceMappingURL=mhsClient.js.map
|
1
dist/server/clients/sites/mhsClient.js.map
vendored
Normal file
1
dist/server/clients/sites/mhsClient.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"mhsClient.js","sourceRoot":"","sources":["../../../../src/clients/sites/mhsClient.ts"],"names":[],"mappings":";;AACA,8CAAuC;AAEvC,MAAM,SAAU,SAAQ,oBAAU;IAChC,YAAY,IAAS,EAAE,EAAa;QAClC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;CACF;AAAA,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;AAC3B,kBAAe,SAAS,CAAC"}
|
4
dist/server/config/app.js
vendored
4
dist/server/config/app.js
vendored
@ -1,8 +1,8 @@
|
||||
"use strict";
|
||||
module.exports = {
|
||||
version: '0.2.1',
|
||||
version: '0.5.5',
|
||||
whitelist: (process.env.WHITELIST || "http://admin.localhost").split(','),
|
||||
secret: process.env.API_TOKEN || "test",
|
||||
secret: process.env.SECRET || "test",
|
||||
devToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoidGVzdCBkYXRhIiwiYXVkIjoiaW50ZXJuYWwiLCJpc3MiOiJZYXJkc3RpY2sgU29mdHdhcmUiLCJzdWIiOiJCcmFpZCBKV1QifQ.t6LFXWPEVz3aLXwtrucarggqTkGY_2NnZB8ZTMaJ2oI',
|
||||
port: process.env.PORT || 8443,
|
||||
hostname: process.env.HOSTNAME || 'ysbraid.localhost',
|
||||
|
2
dist/server/config/app.js.map
vendored
2
dist/server/config/app.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/config/app.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,OAAO,EAAG,OAAO;IACjB,SAAS,EAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,wBAAwB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1E,MAAM,EAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACxC,QAAQ,EAAE,iMAAiM;IAC3M,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;IAC9B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,mBAAmB;IACrD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,aAAa;IACrD,WAAW,EAAG;QACZ,MAAM,EAAG,oBAAoB;QAC7B,OAAO,EAAG,WAAW;QACrB,QAAQ,EAAG,UAAU;QACrB,SAAS,EAAG,CAAC,OAAO,CAAC;KACtB;CACF,CAAA"}
|
||||
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/config/app.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,OAAO,EAAG,OAAO;IACjB,SAAS,EAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,wBAAwB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1E,MAAM,EAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM;IACrC,QAAQ,EAAE,iMAAiM;IAC3M,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;IAC9B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,mBAAmB;IACrD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,aAAa;IACrD,WAAW,EAAG;QACZ,MAAM,EAAG,oBAAoB;QAC7B,OAAO,EAAG,WAAW;QACrB,QAAQ,EAAG,UAAU;QACrB,SAAS,EAAG,CAAC,OAAO,CAAC;KACtB;CACF,CAAA"}
|
23
dist/server/server.js
vendored
23
dist/server/server.js
vendored
@ -18,6 +18,8 @@ const url = require("url");
|
||||
//internal imports
|
||||
var routes = require('./routes');
|
||||
var app = require('./config/app');
|
||||
const clientManager_1 = require("./clientManager");
|
||||
const channelManager_1 = require("./channelManager");
|
||||
var privateKey = fs.readFileSync('certs/key.pem', 'utf8');
|
||||
var certificate = fs.readFileSync('certs/cert.pem', 'utf8');
|
||||
var options = { key: privateKey, cert: certificate, hostname: app.hostname };
|
||||
@ -26,11 +28,26 @@ const server = https.createServer(options, application);
|
||||
const wss = new WebSocket.Server({ noServer: true, maxPayload: 250000, host: app.hostname });
|
||||
application.use(express.json());
|
||||
application.use('', routes);
|
||||
let clientManager = new clientManager_1.default();
|
||||
let channelManager = new channelManager_1.default();
|
||||
wss.on('connection', (ws, request, args) => {
|
||||
console.log('client connected');
|
||||
var data = JSON.parse(args).data;
|
||||
var ClientManager = require('./clientManager');
|
||||
let clientManager = new ClientManager(data, ws);
|
||||
if (!channelManager.channelExists(data.channel)) {
|
||||
channelManager.createChannel(data);
|
||||
}
|
||||
if (clientManager.clientExists(data.user_id)) {
|
||||
var client = clientManager.getClient(data.user_id);
|
||||
if (client != null) {
|
||||
client.replaceWebSocket(ws);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var client = clientManager.addClient(data, ws);
|
||||
}
|
||||
if (client != null) {
|
||||
channelManager.addClientToChannel(client, data.channel);
|
||||
}
|
||||
// ws.on('message', (message: string) => {
|
||||
// console.log('received: %s', message);
|
||||
// const broadcastRegex = /^broadcast\:/;
|
||||
@ -63,7 +80,7 @@ server.on('upgrade', function upgrade(request, socket, head) {
|
||||
function verifyConnection() {
|
||||
return new Promise((resolve, reject) => {
|
||||
var data = url.parse(request.url, true).query;
|
||||
var token = data["token"] || (app.environment == 'development' ? app.devToken : '');
|
||||
var token = data.token || (app.environment == 'development' ? app.devToken : '');
|
||||
var accepted = true;
|
||||
var result;
|
||||
jwt.verify(token, app.secret, app.signOptions, function (err, decoded) {
|
||||
|
2
dist/server/server.js.map
vendored
2
dist/server/server.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
@ -1,5 +1,54 @@
|
||||
class ChannelManager {
|
||||
import ChannelBase from './channels/channelBase';
|
||||
import ClientBase from './clients/clientBase';
|
||||
import MHSClient from './clients/sites/mhsClient';
|
||||
import MHSChannel from './channels/sites/mhsChannel';
|
||||
|
||||
class ChannelManager {
|
||||
channels: ChannelBase[]|MHSChannel[] = [];
|
||||
|
||||
constructor() {
|
||||
// create default channel...
|
||||
var channel: ChannelBase = new ChannelBase('default');
|
||||
this.channels.push(channel);
|
||||
}
|
||||
|
||||
createChannel(data: any) {
|
||||
var channel: ChannelBase|MHSChannel|null = this.channelExists(data.channel_id);
|
||||
|
||||
if (channel) {
|
||||
console.log('channel already exists');
|
||||
} else {
|
||||
var Channel = require(`./channels/${data.client_type}s/${data.client}channel`);
|
||||
var channel: ChannelBase|MHSChannel|null = new ChannelBase(data.channel_id);
|
||||
this.channels.push(channel);
|
||||
console.log('added channel to channel manager');
|
||||
}
|
||||
|
||||
console.log(data.channel_id);
|
||||
}
|
||||
|
||||
channelExists(channel_id: string) {
|
||||
for (let channel of this.channels) {
|
||||
if (channel.id == channel_id) {
|
||||
return channel;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
addClientToChannel(client: ClientBase|MHSClient, channel_id: string) {
|
||||
var channel: ChannelBase|MHSChannel|null = this.channelExists(channel_id);
|
||||
|
||||
if (channel) {
|
||||
channel.addClient(client);
|
||||
client.connectToChannel(channel);
|
||||
} else {
|
||||
console.log(`channel with id ${channel_id} does not exist.`)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = ChannelManager;
|
||||
export default ChannelManager;
|
||||
|
||||
// { :client => 'mhs', :client_type => 'site', :user_id => 125, :user_type => 'user', :channel => 'mhs_1239' }
|
||||
|
46
src/channels/channelBase.ts
Normal file
46
src/channels/channelBase.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import ClientBase from '../clients/clientBase';
|
||||
import MHSClient from '../clients/sites/mhsClient';
|
||||
|
||||
class ChannelBase {
|
||||
id: string;
|
||||
clients: MHSClient[]|ClientBase[] = [];
|
||||
|
||||
constructor(id: string) {
|
||||
this.id = id;
|
||||
console.log('channel created');
|
||||
}
|
||||
|
||||
addClient(client: MHSClient|ClientBase) {
|
||||
console.log(client.data)
|
||||
if (this.clientExists(client.id)) {
|
||||
console.log('client already exits in channel');
|
||||
} else {
|
||||
this.clients.push(client);
|
||||
console.log('added client to channel');
|
||||
}
|
||||
}
|
||||
|
||||
clientExists(id: number) {
|
||||
for (let client of this.clients) {
|
||||
if (client.id == id) {
|
||||
return client;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
broadcastMessage(from: ClientBase|MHSClient|null, message: string) {
|
||||
for (let client of this.clients) {
|
||||
if (client != from) {
|
||||
client.ws.send(message);
|
||||
console.log(`sent to ${client.id}: %s`, message);
|
||||
console.log(message);
|
||||
} else {
|
||||
console.log('client is same as sender');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default ChannelBase;
|
19
src/channels/sites/mhsChannel.ts
Normal file
19
src/channels/sites/mhsChannel.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import ClientBase from '../../clients/clientBase';
|
||||
import MHSClient from '../../clients/sites/mhsClient';
|
||||
import ChannelBase from '../channelBase';
|
||||
|
||||
class MHSChannel extends ChannelBase {
|
||||
broadcastMessage(from: ClientBase|MHSClient|null, message: string) {
|
||||
for (let client of this.clients) {
|
||||
if (client != from) {
|
||||
client.ws.send(message);
|
||||
console.log(`sent to ${client.id}: %s`, message);
|
||||
console.log(message);
|
||||
} else {
|
||||
console.log('client is same as sender');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default MHSChannel;
|
@ -1,22 +1,72 @@
|
||||
class ClientManager {
|
||||
ws: any;
|
||||
import * as WebSocket from 'ws';
|
||||
import ClientBase from './clients/clientBase';
|
||||
import MHSClient from './clients/sites/mhsClient';
|
||||
|
||||
constructor(data: object, ws: object) {
|
||||
this.ws = ws;
|
||||
this.client(data);
|
||||
class ClientManager {
|
||||
clients: ClientBase[]|MHSClient[] = [];
|
||||
|
||||
constructor() {
|
||||
//...maybe one day
|
||||
}
|
||||
|
||||
client(data: any) {
|
||||
if (data.site) {
|
||||
console.log('legit: ' + data.site)
|
||||
addClient(data: any, ws: WebSocket) {
|
||||
if (data.client_type && !this.clientExists(data.user_id)) {
|
||||
var Client = require(`./clients/${data.client_type}s/${data.client}client`);
|
||||
var client = new Client(data, ws);
|
||||
this.clients.push(client);
|
||||
console.log('client added to client manager');
|
||||
return client;
|
||||
} else {
|
||||
console.log('no client type designated, socket disconnect.')
|
||||
this.ws.close();
|
||||
console.log('no client type designated or client already exists, socket disconnected.')
|
||||
ws.close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
clientsOfType(client_type: string) {
|
||||
var result: ClientBase[]|MHSClient[] = [];
|
||||
|
||||
for (let client of this.clients) {
|
||||
if (client.type() == client_type) {
|
||||
result.push(client);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
clientExists(id: number) {
|
||||
for (let client of this.clients) {
|
||||
if (client.id == id) {
|
||||
return client;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
getClient(id: number) {
|
||||
return this.clientExists(id);
|
||||
}
|
||||
|
||||
removeClient(id: number) {
|
||||
var index: number = 0;
|
||||
|
||||
for (let client of this.clients) {
|
||||
if (client.id == id) {
|
||||
client.ws.close();
|
||||
this.clients.splice(index, 1);
|
||||
console.log('client disconnected');
|
||||
return true;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = ClientManager;
|
||||
export default ClientManager;
|
||||
|
||||
|
||||
// user_type: 'user', user_id: 125, site: 'mhs' }
|
||||
// { :client => 'mhs', :client_type => 'site', :user_id => 125, :user_type => 'user' }
|
||||
// var exampleSocket = new WebSocket("wss://ysbraid.localhost:8443?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImNsaWVudCI6Im1ocyIsImNsaWVudF90eXBlIjoic2l0ZSIsInVzZXJfdHlwZSI6InVzZXIiLCJ1c2VyX2lkIjoxMjV9LCJleHAiOjE1NTI4MDExMDUsImF1ZCI6ImludGVybmFsIiwiaXNzIjoiWWFyZHN0aWNrIFNvZnR3YXJlIiwic3ViIjoiQnJhaWQgSldUIn0.fkfoqoWNjOeKfsXXJxh-9lBudhFsxhUt9fUIT1BXOLU");
|
||||
|
42
src/clients/clientBase.ts
Normal file
42
src/clients/clientBase.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import * as WebSocket from 'ws';
|
||||
import * as ChannelManager from '../channelManager';
|
||||
import ChannelBase from '../channels/channelBase';
|
||||
import MHSChannel from '../channels/sites/mhsChannel';
|
||||
|
||||
class ClientBase {
|
||||
ws: WebSocket;
|
||||
data: any;
|
||||
id: number;
|
||||
channel: ChannelBase|MHSChannel|null;
|
||||
|
||||
constructor(data: any, ws: WebSocket) {
|
||||
this.ws = ws;
|
||||
this.data = data;
|
||||
this.id = data.user_id;
|
||||
this.channel = null;
|
||||
}
|
||||
|
||||
getData() {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
type() {
|
||||
return this.data.client_type;
|
||||
}
|
||||
|
||||
connectToChannel(channel: ChannelBase|MHSChannel) {
|
||||
this.channel = channel;
|
||||
|
||||
this.ws.on('message', (message: string) => {
|
||||
channel.broadcastMessage(this, message);
|
||||
console.log('broadcasted: %s', message);
|
||||
});
|
||||
}
|
||||
|
||||
replaceWebSocket(ws: WebSocket) {
|
||||
this.ws.close();
|
||||
this.ws = ws;
|
||||
}
|
||||
};
|
||||
|
||||
export default ClientBase;
|
13
src/clients/sites/mhsClient.ts
Normal file
13
src/clients/sites/mhsClient.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import * as WebSocket from 'ws';
|
||||
import ClientBase from '../clientBase';
|
||||
|
||||
class MHSClient extends ClientBase {
|
||||
constructor(data: any, ws: WebSocket) {
|
||||
super(data, ws);
|
||||
console.log('mhs client created');
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = MHSClient;
|
||||
export default MHSClient;
|
||||
|
@ -1,7 +1,7 @@
|
||||
module.exports = {
|
||||
version : '0.5.1',
|
||||
version : '0.5.5',
|
||||
whitelist : (process.env.WHITELIST || "http://admin.localhost").split(','),
|
||||
secret : (process.env.API_TOKENS || "test").split(','),
|
||||
secret : process.env.SECRET || "test",
|
||||
devToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoidGVzdCBkYXRhIiwiYXVkIjoiaW50ZXJuYWwiLCJpc3MiOiJZYXJkc3RpY2sgU29mdHdhcmUiLCJzdWIiOiJCcmFpZCBKV1QifQ.t6LFXWPEVz3aLXwtrucarggqTkGY_2NnZB8ZTMaJ2oI',
|
||||
port: process.env.PORT || 8443,
|
||||
hostname: process.env.HOSTNAME || 'ysbraid.localhost',
|
||||
|
@ -9,6 +9,10 @@ import * as url from 'url';
|
||||
//internal imports
|
||||
var routes = require('./routes');
|
||||
var app = require('./config/app');
|
||||
import ClientManager from './clientManager';
|
||||
import ChannelManager from './channelManager';
|
||||
import ClientBase from './clients/clientBase';
|
||||
import MHSClient from './clients/sites/mhsClient';
|
||||
|
||||
var privateKey = fs.readFileSync('certs/key.pem', 'utf8');
|
||||
var certificate = fs.readFileSync('certs/cert.pem', 'utf8');
|
||||
@ -21,11 +25,30 @@ const wss = new WebSocket.Server({ noServer: true, maxPayload:250000, host: app.
|
||||
application.use(express.json());
|
||||
application.use('', routes);
|
||||
|
||||
let clientManager = new ClientManager();
|
||||
let channelManager = new ChannelManager();
|
||||
|
||||
wss.on('connection', (ws: WebSocket, request: object, args: string) => {
|
||||
console.log('client connected');
|
||||
var data = JSON.parse(args).data
|
||||
var ClientManager = require('./clientManager');
|
||||
let clientManager = new ClientManager(data, ws);
|
||||
|
||||
if (!channelManager.channelExists(data.channel)) {
|
||||
channelManager.createChannel(data);
|
||||
}
|
||||
|
||||
if (clientManager.clientExists(data.user_id)) {
|
||||
var client: ClientBase|MHSClient|null = clientManager.getClient(data.user_id);
|
||||
|
||||
if (client != null) {
|
||||
client.replaceWebSocket(ws);
|
||||
}
|
||||
} else {
|
||||
var client: ClientBase|MHSClient|null = clientManager.addClient(data, ws);
|
||||
}
|
||||
|
||||
if (client != null) {
|
||||
channelManager.addClientToChannel(client, data.channel);
|
||||
}
|
||||
|
||||
// ws.on('message', (message: string) => {
|
||||
|
||||
@ -66,7 +89,7 @@ server.on('upgrade', async function upgrade(request, socket, head) {
|
||||
function verifyConnection() {
|
||||
return new Promise((resolve, reject) => {
|
||||
var data = url.parse(request.url, true).query;
|
||||
var token = data["token"] || (app.environment == 'development' ? app.devToken : '');
|
||||
var token = data.token || (app.environment == 'development' ? app.devToken : '');
|
||||
var accepted = true;
|
||||
var result: string;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user