All files / js.socket/src/emitter index.js

84.62% Statements 11/13
50% Branches 1/2
100% Functions 5/5
84.62% Lines 11/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57                      13x 13x                   4x   4x   4x 4x               4x                   5x   5x   5x           1x  
/**
 * Responsible for emitting a message over the network
 */
class Emitter
{
  /**
   * @param {Logger} log
   * @param {PayloadFactory} payloadFactory
   */
  constructor(log, payloadFactory)
  {
    this.log            = log
    this.payloadFactory = payloadFactory
  }
 
  /**
   * @param {net.Socket} socket
   * @param {events} event
   * @param {*} data
   */
  async emit(socket, event, data)
  {
    this.log.info('emitting event:', event, 'data:', data)
 
    try
    {
      const payload = this.payloadFactory.create(event, data).toBuffer()
      await this.writeBufferToSocket(socket, payload)
    }
    catch(error)
    {
      this.log.info('error emitting:', event, data, error)
      throw error
    }
 
    this.log.info('emitted:', event, data)
  }
 
  /**
   * @protected
   * @param {net.Socket} socket
   * @param {Buffer} buffer
   */
  writeBufferToSocket(socket, buffer)
  {
    return new Promise(
      (accept, reject) =>
        socket.write(
          buffer,
          (error) => error
            ? reject(error)
            : accept()))
  }
}
 
module.exports = Emitter