From efa28482ded61c53ab947752ca1c722684ad2233 Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Mon, 3 Feb 2020 15:47:34 -0500 Subject: [PATCH] refactor for less complexity --- src/clients/clientBase.ts | 56 ++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/src/clients/clientBase.ts b/src/clients/clientBase.ts index f9e997b..cc35bbc 100644 --- a/src/clients/clientBase.ts +++ b/src/clients/clientBase.ts @@ -4,9 +4,6 @@ import ChannelManager from '../channelManager'; import PublicChannel from '../channels/types/publicChannel'; import PrivateChannel from '../channels/types/privateChannel'; 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 logger = require('../logger'); @@ -19,6 +16,7 @@ class ClientBase { clientManager: ClientManager; channelManager: ChannelManager; roles: Array; + messageListener: (data: any) => void; constructor(data: any, ws: WebSocket, channelManager: ChannelManager, clientManager: ClientManager) { this.ws = ws; @@ -28,6 +26,13 @@ class ClientBase { this.clientManager = clientManager; this.channelManager = channelManager; 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() { @@ -45,28 +50,7 @@ class ClientBase { connectToChannel(channel: PublicChannel|PrivateChannel|CustomChannel) { this.channel = channel; - let messageListener = (data: any) => { - 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('message', this.messageListener); this.ws.on('close', (reasonCode: string, description: string) => { 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) { this.ws.send(JSON.stringify(message)); logger.accessLog.info(`sent direct message to ${this.id}`, { data: { message: message }});