diff --git a/Source/SocketIO/Client/SocketIOClientSpec.swift b/Source/SocketIO/Client/SocketIOClientSpec.swift index 5015e44..3835412 100644 --- a/Source/SocketIO/Client/SocketIOClientSpec.swift +++ b/Source/SocketIO/Client/SocketIOClientSpec.swift @@ -26,7 +26,7 @@ import Dispatch import Foundation /// Defines the interface for a SocketIOClient. -public protocol SocketIOClientSpec : class { +public protocol SocketIOClientSpec : AnyObject { // MARK: Properties /// A handler that will be called on any event. diff --git a/Source/SocketIO/Engine/SocketEngine.swift b/Source/SocketIO/Engine/SocketEngine.swift index a1a80a1..738bf30 100644 --- a/Source/SocketIO/Engine/SocketEngine.swift +++ b/Source/SocketIO/Engine/SocketEngine.swift @@ -281,7 +281,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So private func createWebSocketAndConnect() { var req = URLRequest(url: urlWebSocketWithSid) - addHeaders(to: &req) + addHeaders(to: &req, includingCookies: session?.configuration.httpCookieStorage?.cookies) ws = WebSocket(request: req) ws?.callbackQueue = engineQueue diff --git a/Source/SocketIO/Engine/SocketEngineSpec.swift b/Source/SocketIO/Engine/SocketEngineSpec.swift index fa08519..4078535 100644 --- a/Source/SocketIO/Engine/SocketEngineSpec.swift +++ b/Source/SocketIO/Engine/SocketEngineSpec.swift @@ -155,11 +155,14 @@ extension SocketEngineSpec { return com.url! } - func addHeaders(to req: inout URLRequest) { - if let cookies = cookies { - req.allHTTPHeaderFields = HTTPCookie.requestHeaderFields(with: cookies) + func addHeaders(to req: inout URLRequest, includingCookies additionalCookies: [HTTPCookie]? = nil) { + var cookiesToAdd: [HTTPCookie] = cookies ?? [] + cookiesToAdd += additionalCookies ?? [] + + if !cookiesToAdd.isEmpty { + req.allHTTPHeaderFields = HTTPCookie.requestHeaderFields(with: cookiesToAdd) } - + if let extraHeaders = extraHeaders { for (headerName, value) in extraHeaders { req.setValue(value, forHTTPHeaderField: headerName) diff --git a/Source/SocketIO/Manager/SocketManager.swift b/Source/SocketIO/Manager/SocketManager.swift index cf88240..126aec1 100644 --- a/Source/SocketIO/Manager/SocketManager.swift +++ b/Source/SocketIO/Manager/SocketManager.swift @@ -392,7 +392,7 @@ open class SocketManager : NSObject, SocketManagerSpec, SocketParsable, SocketDa private func _parseEngineMessage(_ msg: String) { guard let packet = parseSocketMessage(msg) else { return } - guard packet.type != .binaryAck && packet.type != .binaryEvent else { + guard !packet.type.isBinary else { waitingPackets.append(packet) return diff --git a/Source/SocketIO/Manager/SocketManagerSpec.swift b/Source/SocketIO/Manager/SocketManagerSpec.swift index 79f0e98..4440193 100644 --- a/Source/SocketIO/Manager/SocketManagerSpec.swift +++ b/Source/SocketIO/Manager/SocketManagerSpec.swift @@ -46,7 +46,7 @@ import Foundation /// or call one of the `disconnectSocket` methods on this class. /// @objc -public protocol SocketManagerSpec : class, SocketEngineClient { +public protocol SocketManagerSpec : AnyObject, SocketEngineClient { // MARK: Properties /// Returns the socket associated with the default namespace ("/"). diff --git a/Source/SocketIO/Parse/SocketPacket.swift b/Source/SocketIO/Parse/SocketPacket.swift index 4b316fc..e715d04 100644 --- a/Source/SocketIO/Parse/SocketPacket.swift +++ b/Source/SocketIO/Parse/SocketPacket.swift @@ -116,7 +116,7 @@ public struct SocketPacket : CustomStringConvertible { private func createPacketString() -> String { let typeString = String(type.rawValue) // Binary count? - let binaryCountString = typeString + (type == .binaryEvent || type == .binaryAck ? "\(String(binary.count))-" : "") + let binaryCountString = typeString + (type.isBinary ? "\(String(binary.count))-" : "") // Namespace? let nspString = binaryCountString + (nsp != "/" ? "\(nsp)," : "") // Ack number? @@ -181,6 +181,13 @@ public extension SocketPacket { /// Binary Ack: 6 case binaryAck + + // MARK: Properties + + /// Whether or not this type is binary + public var isBinary: Bool { + return self == .binaryAck || self == .binaryEvent + } } } diff --git a/Source/SocketIO/Parse/SocketParsable.swift b/Source/SocketIO/Parse/SocketParsable.swift index 5763e35..1c8b963 100644 --- a/Source/SocketIO/Parse/SocketParsable.swift +++ b/Source/SocketIO/Parse/SocketParsable.swift @@ -23,7 +23,7 @@ import Foundation /// Defines that a type will be able to parse socket.io-protocol messages. -public protocol SocketParsable : class { +public protocol SocketParsable : AnyObject { // MARK: Methods /// Called when the engine has received some binary data that should be attached to a packet. @@ -57,7 +57,7 @@ public enum SocketParsableError : Error { } /// Says that a type will be able to buffer binary data before all data for an event has come in. -public protocol SocketDataBufferable : class { +public protocol SocketDataBufferable : AnyObject { // MARK: Properties /// A list of packets that are waiting for binary data. @@ -77,7 +77,7 @@ public extension SocketParsable where Self: SocketManagerSpec & SocketDataBuffer internal func parseString(_ message: String) throws -> SocketPacket { var reader = SocketStringReader(message: message) - guard let type = Int(reader.read(count: 1)).flatMap({ SocketPacket.PacketType(rawValue: $0) }) else { + guard let type = Int(reader.read(count: 1)).flatMap({ SocketPacket.PacketType(rawValue: $0) }) else { throw SocketParsableError.invalidPacketType } @@ -88,7 +88,7 @@ public extension SocketParsable where Self: SocketManagerSpec & SocketDataBuffer var namespace = "/" var placeholders = -1 - if type == .binaryEvent || type == .binaryAck { + if type.isBinary { if let holders = Int(reader.readUntilOccurence(of: "-")) { placeholders = holders } else { diff --git a/Source/SocketIO/Util/SocketLogger.swift b/Source/SocketIO/Util/SocketLogger.swift index 46e3f1b..69293fb 100644 --- a/Source/SocketIO/Util/SocketLogger.swift +++ b/Source/SocketIO/Util/SocketLogger.swift @@ -25,7 +25,7 @@ import Foundation /// Represents a class will log client events. -public protocol SocketLogger : class { +public protocol SocketLogger : AnyObject { // MARK: Properties /// Whether to log or not