generlize everything
This commit is contained in:
parent
cb975dc3aa
commit
5c095c23ad
@ -1,7 +1,7 @@
|
||||
import ChannelBase from './channels/channelBase';
|
||||
import ClientBase from './clients/clientBase';
|
||||
import ServicesClient from './clients/servicesClient';
|
||||
import StudentProgressMonitorChannel from './channels/services/studentProgressMonitorChannel';
|
||||
import PrivateClient from './clients/types/privateClient';
|
||||
import PrivateChannel from './channels/types/privateChannel';
|
||||
|
||||
var logger = require('./logger');
|
||||
|
||||
@ -15,8 +15,8 @@ class ChannelManager {
|
||||
}
|
||||
|
||||
createChannel(data: any) {
|
||||
var channelExists: ChannelBase|StudentProgressMonitorChannel|null = this.channelExists(data.channel);
|
||||
var channel: ChannelBase|StudentProgressMonitorChannel;
|
||||
var channelExists: ChannelBase|PrivateChannel|null = this.channelExists(data.channel);
|
||||
var channel: ChannelBase|PrivateChannel;
|
||||
|
||||
if (channelExists) {
|
||||
channel = channelExists;
|
||||
@ -40,8 +40,8 @@ class ChannelManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
addClientToChannel(client: ClientBase|ServicesClient, channel_id: string) {
|
||||
var channel: ChannelBase|StudentProgressMonitorChannel|null = this.channelExists(channel_id);
|
||||
addClientToChannel(client: ClientBase|PrivateClient, channel_id: string) {
|
||||
var channel: ChannelBase|PrivateChannel|null = this.channelExists(channel_id);
|
||||
|
||||
if (channel) {
|
||||
channel.addClient(client);
|
||||
@ -54,11 +54,11 @@ class ChannelManager {
|
||||
}
|
||||
|
||||
createByChannelType(data: any) {
|
||||
var channel_name = data.client.charAt(0).toLowerCase() + data.client.slice(1) + 'Channel'
|
||||
var channel_name = data.channel_type + 'Channel'
|
||||
|
||||
try {
|
||||
var Channel = require(`./channels/${data.client_type}/${channel_name}`);
|
||||
logger.accessLog.info(`attempting to create channel of type ${data.client}, channel id: ${data.channel}...`);
|
||||
var Channel = require(`./channels/types/${channel_name}`);
|
||||
logger.accessLog.info(`attempting to create channel of type ${channel_name}, channel id: ${data.channel}...`);
|
||||
return new Channel(data.channel);
|
||||
} catch (e) {
|
||||
logger.errorLog.info(e);
|
||||
@ -83,7 +83,7 @@ class ChannelManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
changeChannel(client: ClientBase|ServicesClient, changeRequest: any) {
|
||||
changeChannel(client: ClientBase|PrivateClient, changeRequest: any) {
|
||||
if (client.channel != null) {
|
||||
this.removeClientFromChannel(client.id, client.channel.id)
|
||||
}
|
||||
|
@ -1,18 +1,18 @@
|
||||
import ClientBase from '../clients/clientBase';
|
||||
import ServicesClient from '../clients/servicesClient';
|
||||
import PrivateClient from '../clients/types/privateClient';
|
||||
|
||||
var logger = require('../logger');
|
||||
|
||||
class ChannelBase {
|
||||
id: string;
|
||||
clients: ServicesClient[]|ClientBase[] = [];
|
||||
clients: PrivateClient[]|ClientBase[] = [];
|
||||
|
||||
constructor(id: string) {
|
||||
this.id = id;
|
||||
logger.accessLog.info('Channel Created', {channelId: id});
|
||||
}
|
||||
|
||||
addClient(client: ServicesClient|ClientBase) {
|
||||
addClient(client: PrivateClient|ClientBase) {
|
||||
if (this.clientExists(client.id)) {
|
||||
logger.errorLog.info('Client already exits in channel', {channelId: this.id, clientId: client.id});
|
||||
return {'status': 'notice', 'message': 'client aleady exists in channel'};
|
||||
|
@ -1,17 +1,17 @@
|
||||
import ServicesClient from '../../clients/servicesClient';
|
||||
import PrivateClient from '../../clients/types/privateClient';
|
||||
import ChannelBase from '../channelBase';
|
||||
|
||||
var logger = require('../../logger');
|
||||
|
||||
class StudentProgressMonitorChannel extends ChannelBase {
|
||||
broadcastMessage(from: ServicesClient, message: any) {
|
||||
class PrivateChannel extends ChannelBase {
|
||||
broadcastMessage(from: PrivateClient, message: any) {
|
||||
for (let client of this.clients) {
|
||||
if (client != from && client.data.user_type != from.data.user_type) {
|
||||
console.log('sending message: ' + JSON.stringify(message))
|
||||
client.ws.send(JSON.stringify(message));
|
||||
logger.accessLog.info(`sent to ${client.id}`, { data: { message: message }});
|
||||
} else {
|
||||
logger.accessLog.info(`client either a ${client.data.user_type} or is the sender: ${client.id}`, { data: { message: message }});
|
||||
logger.accessLog.info(`client is either just a broadcaster or is the sender: ${client.id}`, { data: { message: message }});
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,5 +19,5 @@ class StudentProgressMonitorChannel extends ChannelBase {
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = StudentProgressMonitorChannel;
|
||||
export default StudentProgressMonitorChannel;
|
||||
module.exports = PrivateChannel;
|
||||
export default PrivateChannel;
|
@ -1,12 +1,12 @@
|
||||
import * as WebSocket from 'ws';
|
||||
import ClientBase from './clients/clientBase';
|
||||
import ServicesClient from './clients/servicesClient';
|
||||
import PrivateClient from './clients/types/privateClient';
|
||||
import ChannelManager from './channelManager';
|
||||
|
||||
var logger = require('./logger');
|
||||
|
||||
class ClientManager {
|
||||
clients: ClientBase[]|ServicesClient[] = [];
|
||||
clients: ClientBase[]|PrivateClient[] = [];
|
||||
|
||||
constructor() {
|
||||
//...maybe one day
|
||||
@ -26,7 +26,7 @@ class ClientManager {
|
||||
}
|
||||
|
||||
clientsOfType(client_type: string) {
|
||||
var result: ClientBase[]|ServicesClient[] = [];
|
||||
var result: ClientBase[]|PrivateClient[] = [];
|
||||
|
||||
for (let client of this.clients) {
|
||||
if (client.type() == client_type) {
|
||||
@ -70,7 +70,7 @@ class ClientManager {
|
||||
var client_type = data.client_type + 'Client'
|
||||
|
||||
try {
|
||||
var Client = require(`./clients/${client_type}`);
|
||||
var Client = require(`./clients/types/${client_type}`);
|
||||
logger.accessLog.info(`attempting to create client of type ${data.client_type}, client id: ${data.user_id}...`);
|
||||
return new Client(data, ws, channelManager, this);
|
||||
} catch (e) {
|
||||
|
@ -2,7 +2,7 @@ import * as WebSocket from 'ws';
|
||||
import ClientManager from '../clientManager';
|
||||
import ChannelManager from '../channelManager';
|
||||
import ChannelBase from '../channels/channelBase';
|
||||
import StudentProgressMonitorChannel from '../channels/services/studentProgressMonitorChannel';
|
||||
import Private from '../channels/types/privateChannel';
|
||||
|
||||
var messageManager = require('../messageManager');
|
||||
var logger = require('../logger');
|
||||
@ -11,7 +11,7 @@ class ClientBase {
|
||||
ws: WebSocket;
|
||||
data: any;
|
||||
id: number;
|
||||
channel: ChannelBase|StudentProgressMonitorChannel|null;
|
||||
channel: ChannelBase|Private|null;
|
||||
clientManager: ClientManager;
|
||||
channelManager: ChannelManager;
|
||||
|
||||
@ -36,7 +36,7 @@ class ClientBase {
|
||||
return this.data.client;
|
||||
}
|
||||
|
||||
connectToChannel(channel: StudentProgressMonitorChannel) {
|
||||
connectToChannel(channel: Private) {
|
||||
this.channel = channel;
|
||||
|
||||
var messageListener = (message: any) => {
|
||||
|
@ -1,17 +0,0 @@
|
||||
import * as WebSocket from 'ws';
|
||||
import ClientBase from './clientBase';
|
||||
import ClientManager from '../clientManager';
|
||||
import ChannelManager from '../channelManager';
|
||||
|
||||
var logger = require('../logger');
|
||||
|
||||
class ServicesClient extends ClientBase {
|
||||
constructor(data: any, ws: WebSocket, channelManager: ChannelManager, clientManager: ClientManager) {
|
||||
super(data, ws, channelManager, clientManager);
|
||||
logger.accessLog.info('Service Client Created', {data: data});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = ServicesClient;
|
||||
export default ServicesClient;
|
||||
|
0
src/clients/types/customClient.ts
Normal file
0
src/clients/types/customClient.ts
Normal file
17
src/clients/types/privateClient.ts
Normal file
17
src/clients/types/privateClient.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import * as WebSocket from 'ws';
|
||||
import ClientBase from '../clientBase';
|
||||
import ClientManager from '../../clientManager';
|
||||
import ChannelManager from '../../channelManager';
|
||||
|
||||
var logger = require('../logger');
|
||||
|
||||
class PrivateClient extends ClientBase {
|
||||
constructor(data: any, ws: WebSocket, channelManager: ChannelManager, clientManager: ClientManager) {
|
||||
super(data, ws, channelManager, clientManager);
|
||||
logger.accessLog.info('Private Client Created', {data: data});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = PrivateClient;
|
||||
export default PrivateClient;
|
||||
|
0
src/clients/types/publicClient.ts
Normal file
0
src/clients/types/publicClient.ts
Normal file
@ -12,7 +12,7 @@ let schema = {
|
||||
time_left: Joi.any(),
|
||||
status: Joi.string(),
|
||||
channel: Joi.string(),
|
||||
client: Joi.string(),
|
||||
channel_type: Joi.string(),
|
||||
client_type: Joi.string(),
|
||||
user_id: Joi.number().integer(),
|
||||
user_exam_id: Joi.number().integer(),
|
||||
|
@ -13,7 +13,7 @@ var logger = require('./logger');
|
||||
import ClientManager from './clientManager';
|
||||
import ChannelManager from './channelManager';
|
||||
import ClientBase from './clients/clientBase';
|
||||
import ServicesClient from './clients/servicesClient';
|
||||
import PrivateClient from './clients/types/privateClient';
|
||||
|
||||
|
||||
// if (app.environment == 'development') {
|
||||
@ -55,13 +55,13 @@ function connectionManager() {
|
||||
}
|
||||
|
||||
if (clientManager.clientExists(data.user_id)) {
|
||||
var client: ClientBase|ServicesClient|null = clientManager.getClient(data.user_id);
|
||||
var client: ClientBase|PrivateClient|null = clientManager.getClient(data.user_id);
|
||||
|
||||
if (client != null) {
|
||||
client.replaceWebSocket(ws);
|
||||
}
|
||||
} else {
|
||||
var client: ClientBase|ServicesClient|null = clientManager.addClient(data, channelManager, ws);
|
||||
var client: ClientBase|PrivateClient|null = clientManager.addClient(data, channelManager, ws);
|
||||
}
|
||||
|
||||
if (client != null) {
|
||||
|
@ -7,7 +7,7 @@ var expect = require('chai').expect;
|
||||
var sinon = require('sinon');
|
||||
|
||||
var name: string = 'test channel';
|
||||
var data: any = { 'client': 'test', 'client_type':'site', 'user_id': 125, 'user_type': 'user', 'channel': name }
|
||||
var data: any = { 'channel_type': 'private', 'client_type':'private', 'user_id': 125, 'user_roles': '["broadcaster"]', 'channel': name }
|
||||
var WebSocketClient = require('websocket').client;
|
||||
var wsClient = new WebSocketClient();
|
||||
var clientManager = new ClientManager();
|
||||
@ -33,7 +33,7 @@ describe('ChannelManager', function () {
|
||||
expect(result).to.be.equal(true);
|
||||
});
|
||||
|
||||
it('should not return a channel when seraching if channel exists', function () {
|
||||
it('should not return a channel when searching if channel exists', function () {
|
||||
var exists = channelManager.channelExists('no channel');
|
||||
var result = exists ? true : false;
|
||||
expect(result).to.be.equal(false);
|
||||
@ -49,8 +49,8 @@ describe('ChannelManager', function () {
|
||||
expect(result.status).to.be.equal('notice');
|
||||
});
|
||||
|
||||
it('should create a channel of type StudentProgressMonitorChannel', function () {
|
||||
var data2 = { 'channel': 'test channel 2', 'client': 'mhs', 'client_type':'site' };
|
||||
it('should create a channel of type PrivateChannel', function () {
|
||||
var data2 = { 'channel': 'test channel 2', 'client_type': 'private', 'channel_type':'private' };
|
||||
var result = channelManager.createByChannelType(data2);
|
||||
expect(result.id).to.be.equal('test channel 2');
|
||||
});
|
||||
|
@ -51,9 +51,9 @@ describe('ClientManager', function () {
|
||||
expect(result).to.be.equal(false);
|
||||
});
|
||||
|
||||
it('should add client of type ServicesClient', function () {
|
||||
var data: any = { 'client': 'services', 'client_type':'StudentProgressMonitor', 'user_id': 125, 'user_type': 'user', 'channel': name }
|
||||
it('should add client of type PrivateClient', function () {
|
||||
var data: any = { 'channel_type': 'private', 'client_type':'private', 'user_id': 125, 'user_roles': '["broadcaster", "receiver"]', 'channel': name }
|
||||
var result = clientManager.getClientType(data, channelManager, wsClient);
|
||||
expect(result.clientType()).to.be.equal('services');
|
||||
expect(result.clientType()).to.be.equal('private');
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user