change handlermanager to use Map to prevent garbage
This commit is contained in:
@@ -108,8 +108,8 @@ export default class ChatListModel {
|
||||
this.connectionModel = connectionModel;
|
||||
this.loadChats();
|
||||
|
||||
connectionModel.messageHandlerManager.addHandler(this.messageHandler);
|
||||
connectionModel.messageSentHandlerManager.addHandler(
|
||||
connectionModel.messageHandlerManager.setHandler("chat-list", this.messageHandler);
|
||||
connectionModel.messageSentHandlerManager.setHandler("chat-list",
|
||||
this.messageSentHandler,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ export default class FileTransferModel {
|
||||
this.storageModel = storageModel;
|
||||
this.connectionModel = connectionModel;
|
||||
|
||||
this.connectionModel.messageHandlerManager.addHandler(
|
||||
this.connectionModel.messageHandlerManager.setHandler("file-transfer",
|
||||
this.handleMessage,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -173,22 +173,20 @@ export function checkDoesObjectMatchSearch<T>(
|
||||
export type Handler<T> = (item: T) => void;
|
||||
|
||||
export class HandlerManager<T> {
|
||||
handlers = new Set<Handler<T>>();
|
||||
handlers = new Map<string, Handler<T>>();
|
||||
|
||||
// manage
|
||||
addHandler = (handler: Handler<T>): void => {
|
||||
this.handlers.add(handler);
|
||||
setHandler = (id: string, handler: Handler<T>): void => {
|
||||
this.handlers.set(id, handler);
|
||||
};
|
||||
|
||||
deleteHandler = (handler: Handler<T>): void => {
|
||||
this.handlers.delete(handler);
|
||||
deleteHandler = (id: string): void => {
|
||||
this.handlers.delete(id);
|
||||
};
|
||||
|
||||
// trigger
|
||||
trigger = (item: T): void => {
|
||||
for (const handler of this.handlers) {
|
||||
handler(item);
|
||||
}
|
||||
[...this.handlers.values()].forEach((handler) => handler(item));
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user