MCPcopy
hub / github.com/redis/node-redis / subscribe

Method subscribe

packages/client/lib/client/pub-sub.ts:102–154  ·  view source on GitHub ↗
(
    type: PubSubType,
    channels: string | Array<string>,
    listener: PubSubListener<T>,
    returnBuffers?: T
  )

Source from the content-addressed store, hash-verified

100 };
101
102 subscribe<T extends boolean>(
103 type: PubSubType,
104 channels: string | Array<string>,
105 listener: PubSubListener<T>,
106 returnBuffers?: T
107 ) {
108 const args: Array<RedisArgument> = [COMMANDS[type].subscribe],
109 channelsArray = PubSub.#channelsArray(channels);
110 for (const channel of channelsArray) {
111 let channelListeners = this.listeners[type].get(channel);
112 if (!channelListeners || channelListeners.unsubscribing) {
113 args.push(channel);
114 }
115 }
116
117 if (args.length === 1) {
118 // all channels are already subscribed, add listeners without issuing a command
119 for (const channel of channelsArray) {
120 PubSub.#listenersSet(
121 this.listeners[type].get(channel)!,
122 returnBuffers
123 ).add(listener);
124 }
125 return;
126 }
127
128 this.#isActive = true;
129 this.#subscribing++;
130 return {
131 args,
132 channelsCounter: args.length - 1,
133 resolve: () => {
134 this.#subscribing--;
135 for (const channel of channelsArray) {
136 let listeners = this.listeners[type].get(channel);
137 if (!listeners) {
138 listeners = {
139 unsubscribing: false,
140 buffers: new Set(),
141 strings: new Set()
142 };
143 this.listeners[type].set(channel, listeners);
144 }
145
146 PubSub.#listenersSet(listeners, returnBuffers).add(listener);
147 }
148 },
149 reject: () => {
150 this.#subscribing--;
151 this.#updateIsActive();
152 }
153 } satisfies PubSubCommand;
154 }
155
156 extendChannelListeners(
157 type: PubSubType,

Callers 1

createAndSubscribeFunction · 0.95

Calls 7

#updateIsActiveMethod · 0.95
#channelsArrayMethod · 0.80
#listenersSetMethod · 0.80
addMethod · 0.65
getMethod · 0.45
pushMethod · 0.45
setMethod · 0.45

Tested by 1

createAndSubscribeFunction · 0.76