From 458801405085aafae049dff0e180c844ec08ca94 Mon Sep 17 00:00:00 2001 From: Gabriel Canali Date: Sat, 17 Feb 2024 21:11:39 -0300 Subject: [PATCH] feat: add message Pub/Sub pattern --- server/src/utils/message-pub-sub.ts | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 server/src/utils/message-pub-sub.ts diff --git a/server/src/utils/message-pub-sub.ts b/server/src/utils/message-pub-sub.ts new file mode 100644 index 0000000..94ef1db --- /dev/null +++ b/server/src/utils/message-pub-sub.ts @@ -0,0 +1,31 @@ +type Message = { + userId: Number, + content: string, + created_at: Date +} + +type Subscriber = (message: Message) => void + +class messagesPubSub { + private channels: Record = {} + + subscribe(channelId: string, subscriber: Subscriber) { + if (!this.channels[channelId]) { + this.channels[channelId] = [] + } + + this.channels[channelId].push(subscriber) + } + + publish(channelId: string, message: Message) { + if (!this.channels[channelId]) { + return; + } + + for (const subscriber of this.channels[channelId]) { + subscriber(message) + } + } +} + +export const messageDisplay = new messagesPubSub() \ No newline at end of file