process.send = data => {
			if (data && data.ava) {
				const name = data.name.replace(/^ava-/, '');

				if (events.listeners(name).length > 0) {
					events.emit(name, data.data);
				} else {
					console.log('UNHANDLED AVA EVENT:', name, data.data);
				}

				return;
			}

			console.log('NON AVA EVENT:', data);
		};
const common = require('../common');
const assert = require('assert');
const EventEmitter = require('events');

function listener1() {}
function listener2() {}

{
  const ee = new EventEmitter();
  ee.on('hello', listener1);
  ee.on('removeListener', common.mustCall((name, cb) => {
    assert.strictEqual(name, 'hello');
    assert.strictEqual(cb, listener1);
  }));
  ee.removeListener('hello', listener1);
  assert.deepStrictEqual([], ee.listeners('hello'));
}

{
  const ee = new EventEmitter();
  ee.on('hello', listener1);
  ee.on('removeListener', common.mustNotCall());
  ee.removeListener('hello', listener2);
  assert.deepStrictEqual([listener1], ee.listeners('hello'));
}

{
  const ee = new EventEmitter();
  ee.on('hello', listener1);
  ee.on('hello', listener2);
  ee.once('removeListener', common.mustCall((name, cb) => {
'use strict';

const common = require('../common');
const EventEmitter = require('events');
const assert = require('assert');

const ee = new EventEmitter();
const foo = Symbol('foo');
const listener = common.mustCall(function() {});

ee.on(foo, listener);
assert.deepEqual(ee.listeners(foo), [listener]);

ee.emit(foo);

ee.removeAllListeners();
assert.deepEqual(ee.listeners(foo), []);

ee.on(foo, listener);
assert.deepEqual(ee.listeners(foo), [listener]);

ee.removeListener(foo, listener);
assert.deepEqual(ee.listeners(foo), []);
const ee = new EventEmitter();
const handler = () => {};

assert.strictEqual(ee._events.hasOwnProperty, undefined);
assert.strictEqual(ee._events.toString, undefined);

ee.on('__proto__', handler);
ee.on('__defineGetter__', handler);
ee.on('toString', handler);

assert.deepStrictEqual(ee.eventNames(), [
  '__proto__',
  '__defineGetter__',
  'toString'
]);

assert.deepStrictEqual(ee.listeners('__proto__'), [handler]);
assert.deepStrictEqual(ee.listeners('__defineGetter__'), [handler]);
assert.deepStrictEqual(ee.listeners('toString'), [handler]);

ee.on('__proto__', common.mustCall(function(val) {
  assert.strictEqual(val, 1);
}));
ee.emit('__proto__', 1);

process.on('__proto__', common.mustCall(function(val) {
  assert.strictEqual(val, 1);
}));
process.emit('__proto__', 1);
}

{
  const listen1 = () => {};
  const listen2 = () => {};
  const ee = new EventEmitter();

  ee.once('newListener', function() {
    assert.deepStrictEqual(ee.listeners('hello'), []);
    ee.once('newListener', function() {
      assert.deepStrictEqual(ee.listeners('hello'), []);
    });
    ee.on('hello', listen2);
  });
  ee.on('hello', listen1);
  // The order of listeners on an event is not always the order in which the
  // listeners were added.
  assert.deepStrictEqual(ee.listeners('hello'), [listen2, listen1]);
}

// Verify that the listener must be a function
common.expectsError(() => {
  const ee = new EventEmitter();
  ee.on('foo', null);
}, {
  code: 'ERR_INVALID_ARG_TYPE',
  type: TypeError,
  message: 'The "listener" argument must be of type Function. ' +
           'Received type object'
});
var EventEmmiter = require('events');
var e = new EventEmmiter();
function x1() {
    console.log(1);
}
//我们每一个函数都有最大监听数,默认10个
e.setMaxListeners(2);//warning 警告
e.once('休息1',x1);
//指定监听数量 x1的个数
console.log(e.listenerCount('休息1'));
//就近移除
// e.removeListener('休息',x1);
//清除所有的,此方法可以移除掉所有监听或者指定名字移除
// e.removeAllListeners('休息');
// e.emit('休息1');
console.log(e.listeners('休息1')); //获取当前函数池