mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-12-23 20:18:15 +00:00
feat(session): add subscribe method, getAllBlocks
This commit is contained in:
@@ -67,15 +67,32 @@ class SessionManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addListener(event: string, listener: (data: any) => void) {
|
getAllBlocks() {
|
||||||
this.emitter.addListener(event, listener);
|
return Array.from(this.blocks.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
replay() {
|
subscribe(listener: (event: string, data: any) => void): () => void {
|
||||||
for (const { event, data } of this.events) {
|
const currentEventsLength = this.events.length;
|
||||||
/* Using emitter directly to avoid infinite loop */
|
|
||||||
this.emitter.emit(event, data);
|
const handler = (event: string) => (data: any) => listener(event, data);
|
||||||
|
const dataHandler = handler('data');
|
||||||
|
const endHandler = handler('end');
|
||||||
|
const errorHandler = handler('error');
|
||||||
|
|
||||||
|
this.emitter.on('data', dataHandler);
|
||||||
|
this.emitter.on('end', endHandler);
|
||||||
|
this.emitter.on('error', errorHandler);
|
||||||
|
|
||||||
|
for (let i = 0; i < currentEventsLength; i++) {
|
||||||
|
const { event, data } = this.events[i];
|
||||||
|
listener(event, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
this.emitter.off('data', dataHandler);
|
||||||
|
this.emitter.off('end', endHandler);
|
||||||
|
this.emitter.off('error', errorHandler);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user