Skip to content

Commit 9708019

Browse files
authored
Merge pull request #1112 from vonox7/http-header-callback-rebased
Propagate http header callback from websocket back to client (rebased)
2 parents 7505702 + 5a6a4f0 commit 9708019

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

Source/SocketIO/Client/SocketIOClientSpec.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,4 +344,16 @@ public enum SocketClientEvent : String {
344344
/// }
345345
/// ```
346346
case statusChange
347+
348+
/// Emitted when when upgrading the http connection to a websocket connection.
349+
///
350+
/// Usage:
351+
///
352+
/// ```swift
353+
/// socket.on(clientEvent: .websocketUpgrade) {data, ack in
354+
/// let headers = (data as [Any])[0]
355+
/// // Some header logic
356+
/// }
357+
/// ```
358+
case websocketUpgrade
347359
}

Source/SocketIO/Engine/SocketEngine.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,12 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
313313
this.parseEngineMessage(message)
314314
}
315315

316+
ws?.onHttpResponseHeaders = {[weak self] headers in
317+
guard let this = self else { return }
318+
319+
this.client?.engineDidWebsocketUpgrade(headers: headers)
320+
}
321+
316322
ws?.connect()
317323
}
318324

@@ -666,7 +672,9 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
666672
connected = false
667673
polling = true
668674

669-
if let reason = error?.localizedDescription {
675+
if let error = error as? WSError {
676+
didError(reason: "\(error.message). code=\(error.code), type=\(error.type)")
677+
} else if let reason = error?.localizedDescription {
670678
didError(reason: reason)
671679
} else {
672680
client?.engineDidClose(reason: "Socket Disconnected")

Source/SocketIO/Engine/SocketEngineClient.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,9 @@ import Foundation
5959
///
6060
/// - parameter data: The data the engine received.
6161
func parseEngineBinaryData(_ data: Data)
62+
63+
/// Called when when upgrading the http connection to a websocket connection.
64+
///
65+
/// - parameter headers: The http headers.
66+
func engineDidWebsocketUpgrade(headers: [String: String])
6267
}

Source/SocketIO/Manager/SocketManager.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,18 @@ open class SocketManager : NSObject, SocketManagerSpec, SocketParsable, SocketDa
377377
}
378378
}
379379

380+
/// Called when when upgrading the http connection to a websocket connection.
381+
///
382+
/// - parameter headers: The http headers.
383+
open func engineDidWebsocketUpgrade(headers: [String: String]) {
384+
handleQueue.async {
385+
self._engineDidWebsocketUpgrade(headers: headers)
386+
}
387+
}
388+
private func _engineDidWebsocketUpgrade(headers: [String: String]) {
389+
emitAll(clientEvent: .websocketUpgrade, data: [headers])
390+
}
391+
380392
/// Called when the engine has a message that must be parsed.
381393
///
382394
/// - parameter msg: The message that needs parsing.

0 commit comments

Comments
 (0)