UNPKG

739 BJavaScriptView Raw
1'use strict'
2
3const stream = require('../lib/destroyable-stream')
4
5const FRAME_PREFIX_SIZE = 2 // uint16 is 2 bytes
6
7class AbstractEncoder extends stream.Transform {
8 constructor (messageType, options) {
9 super(Object.assign({
10 readableObjectMode: false,
11 writableObjectMode: true
12 }, options))
13
14 this._messageType = messageType
15 }
16
17 _transform (message, encoding, callback) {
18 const messageLength = this._messageType.encodingLength(message)
19
20 const framedMessage = Buffer.alloc(messageLength + FRAME_PREFIX_SIZE)
21 framedMessage.writeUInt16BE(messageLength, 0)
22 this._messageType.encode(message, framedMessage, FRAME_PREFIX_SIZE)
23
24 callback(null, framedMessage)
25 }
26}
27
28module.exports = AbstractEncoder