@kajidog/mcp-tts-voicevox
Version:
VOICEVOX integration for MCP - Text-to-Speech server using VOICEVOX engine
60 lines (59 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventManager = void 0;
const types_1 = require("./types");
/**
* イベント管理クラス
* キュー関連イベントの管理と発火を担当
*/
class EventManager {
constructor() {
this.eventListeners = new Map();
// イベントタイプごとのリスナー配列を初期化
Object.values(types_1.QueueEventType).forEach((eventType) => {
this.eventListeners.set(eventType, []);
});
}
/**
* イベントリスナーを追加
* @param event イベントタイプ
* @param listener リスナー関数
*/
addEventListener(event, listener) {
const listeners = this.eventListeners.get(event) || [];
if (!listeners.includes(listener)) {
listeners.push(listener);
this.eventListeners.set(event, listeners);
}
}
/**
* イベントリスナーを削除
* @param event イベントタイプ
* @param listener リスナー関数
*/
removeEventListener(event, listener) {
const listeners = this.eventListeners.get(event) || [];
const index = listeners.indexOf(listener);
if (index !== -1) {
listeners.splice(index, 1);
this.eventListeners.set(event, listeners);
}
}
/**
* イベントを発火
* @param event 発火するイベントのタイプ
* @param item 関連するキューアイテム(オプション)
*/
emitEvent(event, item) {
const listeners = this.eventListeners.get(event) || [];
listeners.forEach((listener) => {
try {
listener(event, item);
}
catch (error) {
console.error(`イベントリスナーの実行中にエラーが発生しました (${event}):`, error);
}
});
}
}
exports.EventManager = EventManager;