@@ -22,6 +22,22 @@ open class Realtime : Service {
2222 private var reconnectAttempts = 0
2323 private var subscriptionsCounter = 0
2424 private var reconnect = true
25+
26+ private var onErrorCallbacks : [ ( ( Swift . Error ? , HTTPResponseStatus ? ) -> Void ) ] = [ ]
27+ private var onCloseCallbacks : [ ( ( ) -> Void ) ] = [ ]
28+ private var onOpenCallbacks : [ ( ( ) -> Void ) ] = [ ]
29+
30+ public func onError( _ callback: @escaping ( Swift . Error ? , HTTPResponseStatus ? ) -> Void ) {
31+ self . onErrorCallbacks. append ( callback)
32+ }
33+
34+ public func onClose( _ callback: @escaping ( ) -> Void ) {
35+ self . onCloseCallbacks. append ( callback)
36+ }
37+
38+ public func onOpen( _ callback: @escaping ( ) -> Void ) {
39+ self . onOpenCallbacks. append ( callback)
40+ }
2541
2642 private func startHeartbeat( ) {
2743 stopHeartbeat ( )
@@ -191,6 +207,7 @@ extension Realtime: WebSocketClientDelegate {
191207
192208 public func onOpen( channel: Channel ) {
193209 self . reconnectAttempts = 0
210+ onOpenCallbacks. forEach { $0 ( ) }
194211 startHeartbeat ( )
195212 }
196213
@@ -210,6 +227,8 @@ extension Realtime: WebSocketClientDelegate {
210227
211228 public func onClose( channel: Channel , data: Data ) async throws {
212229 stopHeartbeat ( )
230+
231+ onCloseCallbacks. forEach { $0 ( ) }
213232
214233 if ( !reconnect) {
215234 reconnect = true
@@ -230,6 +249,8 @@ extension Realtime: WebSocketClientDelegate {
230249 public func onError( error: Swift . Error ? , status: HTTPResponseStatus ? ) {
231250 stopHeartbeat ( )
232251 print ( error? . localizedDescription ?? " Unknown error " )
252+
253+ onErrorCallbacks. forEach { $0 ( error, status) }
233254 }
234255
235256 func handleResponseError( from json: [ String : Any ] ) throws {
0 commit comments