UNPKG

asterisk-ami-connector

Version:
101 lines (87 loc) 2.31 kB
/** * Created by Alex Voronyansky <belirafon@gmail.com> * Date: 26.04.2016 * Time: 13:47 */ "use strict"; const EventEmitter = require('events').EventEmitter; const amiUtils = require('asterisk-ami-event-utils'); const AmiEventsStream = require('asterisk-ami-events-stream'); /** * Ami Connection */ class AmiConnection extends EventEmitter{ constructor(socket){ super(); Object.assign(this, { _isConnected: true, _socket: socket, _amiDataStream: new AmiEventsStream(), _lastWroteData: null }); this._socket .on('error', error => this.emit('error', error)) .on('close', () => this.close()); this._socket.pipe(this._amiDataStream) .on('amiEvent', event => this.emit('event', event)) .on('amiResponse', response => this.emit('response', response)) .on('data', chunk => this.emit('data', chunk)) .on('error', error => this.emit('error', error)); } /** * * @returns {AmiConnection} */ close(){ this._isConnected = false; this.emit('close'); if(this._socket){ this._socket.unpipe(this._amiDataStream); this._socket .removeAllListeners('end') .removeAllListeners('close') .removeAllListeners('errorLog') .destroy(); } return this; } /** * * @param message */ write(message){ let messageStr = typeof message === 'string' ? amiUtils.fromString(message) : amiUtils.fromObject(message); this._lastWroteData = message; return this._socket.write(messageStr); } /** * * @returns {boolean} */ get isConnected(){ return this._isConnected; } /** * * @returns {null} */ get lastEvent(){ return this._amiDataStream ? this._amiDataStream.lastEvent : null; } /** * * @returns {null} */ get lastResponse(){ return this._amiDataStream ? this._amiDataStream.lastResponse : null; } /** * * @returns {*} */ get lastWroteData(){ return this._lastWroteData; } } module.exports = AmiConnection;