colyseus.js
Version:
Colyseus Multiplayer SDK for JavaScript/TypeScript
48 lines • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
exports.createSignal = createSignal;
class EventEmitter {
constructor() {
this.handlers = [];
}
register(cb, once = false) {
this.handlers.push(cb);
return this;
}
invoke(...args) {
this.handlers.forEach((handler) => handler.apply(this, args));
}
invokeAsync(...args) {
return Promise.all(this.handlers.map((handler) => handler.apply(this, args)));
}
remove(cb) {
const index = this.handlers.indexOf(cb);
this.handlers[index] = this.handlers[this.handlers.length - 1];
this.handlers.pop();
}
clear() {
this.handlers = [];
}
}
exports.EventEmitter = EventEmitter;
function createSignal() {
const emitter = new EventEmitter();
function register(cb) {
return emitter.register(cb, this === null);
}
;
register.once = (cb) => {
const callback = function (...args) {
cb.apply(this, args);
emitter.remove(callback);
};
emitter.register(callback);
};
register.remove = (cb) => emitter.remove(cb);
register.invoke = (...args) => emitter.invoke(...args);
register.invokeAsync = (...args) => emitter.invokeAsync(...args);
register.clear = () => emitter.clear();
return register;
}
//# sourceMappingURL=signal.js.map