tailwind
Version:
tailwind is a base module for streaming and evented CQS applications.
59 lines (53 loc) • 1.51 kB
JavaScript
const postCommand = require('./wsPostCommand'),
postEvents = require('./wsPostEvents'),
postRead = require('./wsPostRead'),
sendMessage = require('./wsSendMessage');
const handleMessage = async function (socket, { app, message, readModel, writeModel }) {
if (!socket) {
throw new Error('Socket is missing.');
}
if (!app) {
throw new Error('App is missing.');
}
if (!message) {
throw new Error('Message is missing.');
}
if (!readModel) {
throw new Error('Read model is missing.');
}
if (!writeModel) {
throw new Error('Write model is missing.');
}
const logger = app.services.getLogger();
switch (message.type) {
case 'sendCommand': {
await postCommand.send(socket, { app, message, writeModel });
break;
}
case 'subscribeEvents': {
await postEvents.subscribe(socket, { app, message });
break;
}
case 'unsubscribeEvents': {
await postEvents.unsubscribe(socket, { app, message });
break;
}
case 'subscribeRead': {
await postRead.subscribe(socket, { app, message, readModel });
break;
}
case 'unsubscribeRead': {
await postRead.unsubscribe(socket, { app, message });
break;
}
default: {
try {
await sendMessage(socket, { type: 'error', statusCode: 400, payload: 'Bad request.' });
} catch (ex) {
logger.error('Failed to send message.', { ex });
}
}
}
};
module.exports = handleMessage;
;