function _read(size) {
  /* jshint validthis: true */
  var self = this;
  /**
   * Callback to be called when a READ event is received. Pushes the data onto
   * the read queue and starts reading again if applicable
   * @param {grpc.Event} event READ event object
   */
  function readCallback(err, event) {
    if (err) {
      self.terminate();
      return;
    }
    if (self.finished) {
      self.push(null);
      return;
    }
    var data = event.read;
    var deserialized;
    try {
      deserialized = self.deserialize(data);
    } catch (e) {
      e.code = constants.status.INTERNAL;
      self.emit('error', e);
      return;
    }
    if (self.push(deserialized) && data !== null) {
      var read_batch = {};
      read_batch[grpc.opType.RECV_MESSAGE] = true;
      self.call.startBatch(read_batch, readCallback);
    } else {
      self.reading = false;
    }
  }
  if (self.finished) {
    self.push(null);
  } else {
    if (!self.reading) {
      self.reading = true;
      var batch = {};
      batch[grpc.opType.RECV_MESSAGE] = true;
      self.call.startBatch(batch, readCallback);
    }
  }
}
function _read(size) {
  /* jshint validthis: true */
  var self = this;
  /**
   * Callback to be called when a READ event is received. Pushes the data onto
   * the read queue and starts reading again if applicable
   * @param {grpc.Event} event READ event object
   */
  function readCallback(err, event) {
    if (err) {
      self.terminate();
      return;
    }
    if (self.finished) {
      self.push(null);
      return;
    }
    var data = event.read;
    var deserialized;
    try {
      deserialized = self.deserialize(data);
    } catch (e) {
      e.code = constants.status.INTERNAL;
      self.emit('error', e);
      return;
    }
    if (self.push(deserialized) && data !== null) {
      var read_batch = {};
      read_batch[grpc.opType.RECV_MESSAGE] = true;
      self.call.startBatch(read_batch, readCallback);
    } else {
      self.reading = false;
    }
  }
  if (self.finished) {
    self.push(null);
  } else {
    if (!self.reading) {
      self.reading = true;
      var batch = {};
      batch[grpc.opType.RECV_MESSAGE] = true;
      self.call.startBatch(batch, readCallback);
    }
  }
}
function _read ( size ) { /* jshint validthis: true */ var self = this ; /**
   * Callback to be called when a READ event is received. Pushes the data onto
   * the read queue and starts reading again if applicable
   * @param {grpc.Event} event READ event object
   */ function readCallback ( err , event ) { if ( err ) { self . terminate ( ) ; return ; } if ( self . finished ) { self . push ( null ) ; return ; } var data = event . read ; var deserialized ; try { deserialized = self . deserialize ( data ) ; } catch ( e ) { e . code = constants . status . INTERNAL ; self . emit ( 'error' , e ) ; return ; } if ( self . push ( deserialized ) && data !== null ) { var read_batch = { } ; read_batch [ grpc . opType . RECV_MESSAGE ] = true ; self . call . startBatch ( read_batch , readCallback ) ; } else { self . reading = false ; } } if ( self . finished ) { self . push ( null ) ; } else { if ( ! self . reading ) { self . reading = true ; var batch = { } ; batch [ grpc . opType . RECV_MESSAGE ] = true ; self . call . startBatch ( batch , readCallback ) ; } } }
Start reading from the gRPC data source. This is an implementation of a
method required for implementing stream.Readable
@access private
@param {number} size Ignored
Start reading from the gRPC data source . This is an implementation of a method required for implementing stream . Readable
Called when a read event is received.