Skip to content

Commit cb09100

Browse files
committed
feat(realtime): add closure based method for broadcast
1 parent 71ee7a5 commit cb09100

File tree

3 files changed

+29
-22
lines changed

3 files changed

+29
-22
lines changed

Sources/Realtime/RealtimeChannel+AsyncAwait.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,25 @@ extension RealtimeChannelV2 {
101101
}
102102
return stream
103103
}
104+
105+
/// Listen for broadcast messages sent by other clients within the same channel under a specific `event`.
106+
public func broadcastStream(event: String) -> AsyncStream<JSONObject> {
107+
let (stream, continuation) = AsyncStream<JSONObject>.makeStream()
108+
109+
let subscription = onBroadcast(event: event) {
110+
continuation.yield($0)
111+
}
112+
113+
continuation.onTermination = { _ in
114+
subscription.cancel()
115+
}
116+
117+
return stream
118+
}
119+
120+
/// Listen for broadcast messages sent by other clients within the same channel under a specific `event`.
121+
@available(*, deprecated, renamed: "broadcastStream(event:)")
122+
public func broadcast(event: String) -> AsyncStream<JSONObject> {
123+
broadcastStream(event: event)
124+
}
104125
}

Sources/Realtime/V2/RealtimeChannelV2.swift

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -437,30 +437,16 @@ public actor RealtimeChannelV2 {
437437
}
438438
}
439439

440-
/// Listen for broadcast messages sent by other clients within the same channel under a specific
441-
/// `event`.
442-
public func broadcastStream(event: String) -> AsyncStream<JSONObject> {
443-
let (stream, continuation) = AsyncStream<JSONObject>.makeStream()
444-
445-
let id = callbackManager.addBroadcastCallback(event: event) {
446-
continuation.yield($0)
447-
}
448-
449-
let logger = logger
450-
451-
continuation.onTermination = { [weak callbackManager] _ in
440+
/// Listen for broadcast messages sent by other clients within the same channel under a specific `event`.
441+
public func onBroadcast(
442+
event: String,
443+
callback: @escaping @Sendable (JSONObject) -> Void
444+
) -> Subscription {
445+
let id = callbackManager.addBroadcastCallback(event: event, callback: callback)
446+
return Subscription { [weak callbackManager, logger] in
452447
logger?.debug("Removing broadcast callback with id: \(id)")
453448
callbackManager?.removeCallback(id: id)
454449
}
455-
456-
return stream
457-
}
458-
459-
/// Listen for broadcast messages sent by other clients within the same channel under a specific
460-
/// `event`.
461-
@available(*, deprecated, renamed: "broadcastStream(event:)")
462-
public func broadcast(event: String) -> AsyncStream<JSONObject> {
463-
broadcastStream(event: event)
464450
}
465451

466452
@discardableResult

Sources/_Helpers/EventEmitter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public final class ObservationToken: Sendable {
1212
let _onCancel = LockIsolated((@Sendable () -> Void)?.none)
1313

1414
package init(_ onCancel: (@Sendable () -> Void)? = nil) {
15-
self._onCancel.setValue(onCancel)
15+
_onCancel.setValue(onCancel)
1616
}
1717

1818
@available(*, deprecated, renamed: "cancel")

0 commit comments

Comments
 (0)