refactor for less complexity
This commit is contained in:
parent
473cbd239f
commit
efa28482de
@ -4,9 +4,6 @@ import ChannelManager from '../channelManager';
|
|||||||
import PublicChannel from '../channels/types/publicChannel';
|
import PublicChannel from '../channels/types/publicChannel';
|
||||||
import PrivateChannel from '../channels/types/privateChannel';
|
import PrivateChannel from '../channels/types/privateChannel';
|
||||||
import CustomChannel from '../channels/types/customChannel';
|
import CustomChannel from '../channels/types/customChannel';
|
||||||
import PublicClient from '../clients/types/publicClient';
|
|
||||||
import PrivateClient from '../clients/types/privateClient';
|
|
||||||
import CustomClient from '../clients/types/customClient';
|
|
||||||
|
|
||||||
var messageManager = require('../messageManager');
|
var messageManager = require('../messageManager');
|
||||||
var logger = require('../logger');
|
var logger = require('../logger');
|
||||||
@ -19,6 +16,7 @@ class ClientBase {
|
|||||||
clientManager: ClientManager;
|
clientManager: ClientManager;
|
||||||
channelManager: ChannelManager;
|
channelManager: ChannelManager;
|
||||||
roles: Array<string>;
|
roles: Array<string>;
|
||||||
|
messageListener: (data: any) => void;
|
||||||
|
|
||||||
constructor(data: any, ws: WebSocket, channelManager: ChannelManager, clientManager: ClientManager) {
|
constructor(data: any, ws: WebSocket, channelManager: ChannelManager, clientManager: ClientManager) {
|
||||||
this.ws = ws;
|
this.ws = ws;
|
||||||
@ -28,6 +26,13 @@ class ClientBase {
|
|||||||
this.clientManager = clientManager;
|
this.clientManager = clientManager;
|
||||||
this.channelManager = channelManager;
|
this.channelManager = channelManager;
|
||||||
this.roles = ['receiver']
|
this.roles = ['receiver']
|
||||||
|
this.messageListener = (data: any) => {
|
||||||
|
if (this.channel) {
|
||||||
|
logger.accessLog.info(`starting message transaction on channel ${this.channel.id}: `, {data: data});
|
||||||
|
data = messageManager.prepareMessage(data, this.channel, this);
|
||||||
|
this.messageTransaction(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getData() {
|
getData() {
|
||||||
@ -45,28 +50,7 @@ class ClientBase {
|
|||||||
connectToChannel(channel: PublicChannel|PrivateChannel|CustomChannel) {
|
connectToChannel(channel: PublicChannel|PrivateChannel|CustomChannel) {
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
|
|
||||||
let messageListener = (data: any) => {
|
this.ws.on('message', this.messageListener);
|
||||||
logger.accessLog.info(`starting message transaction on channel ${channel.id}: `, {data: data});
|
|
||||||
data = messageManager.prepareMessage(data, channel, this);
|
|
||||||
|
|
||||||
if (!data.error) {
|
|
||||||
if (data.message_type == 'broadcast') {
|
|
||||||
channel.broadcastMessage(this, data);
|
|
||||||
} else if (data.message_type == 'direct') {
|
|
||||||
let to = this.clientManager.getClient(data.message.to)
|
|
||||||
to.directMessage(data)
|
|
||||||
} else if (data.message_type == 'changeChannel') {
|
|
||||||
this.ws.removeListener('message', messageListener);
|
|
||||||
this.channelManager.changeChannel(this, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.accessLog.info(`message transaction complete on channel ${channel.id}: `, {message: data});
|
|
||||||
} else {
|
|
||||||
logger.errorLog.info(`Validation failed, please review schema: ${channel.id}`, {data: {message: data, error: data.error}});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.ws.on('message', messageListener);
|
|
||||||
|
|
||||||
this.ws.on('close', (reasonCode: string, description: string) => {
|
this.ws.on('close', (reasonCode: string, description: string) => {
|
||||||
logger.accessLog.info(`closing connection for client ${this.id}`);
|
logger.accessLog.info(`closing connection for client ${this.id}`);
|
||||||
@ -80,6 +64,28 @@ class ClientBase {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
messageTransaction(data: any) {
|
||||||
|
if (this.channel && !data.error) {
|
||||||
|
switch (data.message_type) {
|
||||||
|
case 'broadcast':
|
||||||
|
this.channel.broadcastMessage(this, data);
|
||||||
|
break;
|
||||||
|
case 'direct':
|
||||||
|
let to = this.clientManager.getClient(data.message.to)
|
||||||
|
to.directMessage(data)
|
||||||
|
break;
|
||||||
|
case 'changeChannel':
|
||||||
|
this.ws.removeListener('message', this.messageListener);
|
||||||
|
this.channelManager.changeChannel(this, data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.accessLog.info(`message transaction complete on channel ${this.channel.id}: `, {message: data});
|
||||||
|
} else {
|
||||||
|
logger.errorLog.info(`Validation failed or client is not part of a channel, please review schema`, {data: {message: data, error: data.error}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
directMessage(message: any) {
|
directMessage(message: any) {
|
||||||
this.ws.send(JSON.stringify(message));
|
this.ws.send(JSON.stringify(message));
|
||||||
logger.accessLog.info(`sent direct message to ${this.id}`, { data: { message: message }});
|
logger.accessLog.info(`sent direct message to ${this.id}`, { data: { message: message }});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user