@microfleet/core
Version:
Abstract microservice core
56 lines (48 loc) • 1.72 kB
text/typescript
import _debug = require('debug')
import noop = require('lodash/noop')
import { ActionTransport } from '../../..'
import { ServiceRequest } from '../../../types'
import { Router } from '../../router/factory'
import { RequestCallback } from '../../router/dispatcher'
const debug = _debug('mservice:router:socket.io')
const { socketIO } = ActionTransport
export interface SocketIOMessage {
data: [string, any, RequestCallback];
}
/* Decrease request count on response */
function wrapCallback(router: Router, callback: RequestCallback) {
return (err: any, result?: any) => {
router.requestCountTracker.decrease(socketIO)
if (callback) {
callback(err, result)
}
}
}
function getSocketIORouterAdapter(_: unknown, router: Router): (socket: NodeJS.EventEmitter) => void {
return function socketIORouterAdapter(socket: NodeJS.EventEmitter) {
socket.on('*', (packet: SocketIOMessage) => {
/* Increase request count on message */
router.requestCountTracker.increase(socketIO)
const [actionName, params, callback] = packet.data
const request: ServiceRequest = {
socket,
params,
action: noop as any,
headers: Object.create(null),
locals: Object.create(null),
log: console as any,
method: 'socketio',
parentSpan: undefined,
query: Object.create(null),
route: '',
span: undefined,
transport: socketIO,
transportRequest: packet,
}
debug('prepared request with', packet.data)
const wrappedCallback = wrapCallback(router, callback)
router.dispatch.call(router, actionName, request, wrappedCallback)
})
}
}
export default getSocketIORouterAdapter