Initial Swift4 work
This commit is contained in:
		
							parent
							
								
									e9296fd65a
								
							
						
					
					
						commit
						cd3eb37ac8
					
				@ -65,6 +65,7 @@ public final class SocketAckEmitter : NSObject {
 | 
			
		||||
    /// Call to ack receiving this event.
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter items: An array of items to send when acking. Use `[]` to send nothing.
 | 
			
		||||
    @objc
 | 
			
		||||
    public func with(_ items: [Any]) {
 | 
			
		||||
        guard ackNum != -1 else { return }
 | 
			
		||||
 | 
			
		||||
@ -104,6 +105,7 @@ public final class OnAckCallback : NSObject {
 | 
			
		||||
    /// - parameter after: The number of seconds before this emit times out if an ack hasn't been received.
 | 
			
		||||
    /// - parameter callback: The callback called when an ack is received, or when a timeout happens.
 | 
			
		||||
    ///                       To check for timeout, use `SocketAckStatus`'s `noAck` case.
 | 
			
		||||
    @objc
 | 
			
		||||
    public func timingOut(after seconds: Double, callback: @escaping AckCallback) {
 | 
			
		||||
        guard let socket = self.socket, ackNumber != -1 else { return }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,9 +29,11 @@ public final class SocketAnyEvent : NSObject {
 | 
			
		||||
    // MARK: Properties
 | 
			
		||||
 | 
			
		||||
    /// The event name.
 | 
			
		||||
    @objc
 | 
			
		||||
    public let event: String
 | 
			
		||||
 | 
			
		||||
    /// The data items for this event.
 | 
			
		||||
    @objc
 | 
			
		||||
    public let items: [Any]?
 | 
			
		||||
 | 
			
		||||
    /// The description of this event.
 | 
			
		||||
 | 
			
		||||
@ -54,25 +54,31 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// If `true` then every time `connect` is called, a new engine will be created.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var forceNew = false
 | 
			
		||||
 | 
			
		||||
    /// The queue that all interaction with the client should occur on. This is the queue that event handlers are
 | 
			
		||||
    /// called on.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var handleQueue = DispatchQueue.main
 | 
			
		||||
 | 
			
		||||
    /// The namespace for this client.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var nsp = "/"
 | 
			
		||||
 | 
			
		||||
    /// The configuration for this client.
 | 
			
		||||
    public var config: SocketIOClientConfiguration
 | 
			
		||||
 | 
			
		||||
    /// If `true`, this client will try and reconnect on any disconnects.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var reconnects = true
 | 
			
		||||
 | 
			
		||||
    /// The number of seconds to wait before attempting to reconnect.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var reconnectWait = 10
 | 
			
		||||
 | 
			
		||||
    /// The session id of this client.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var sid: String? {
 | 
			
		||||
        return engine?.sid
 | 
			
		||||
    }
 | 
			
		||||
@ -81,6 +87,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    ///
 | 
			
		||||
    /// If changed after calling `init`, `forceNew` must be set to `true`, or it will only connect to the url set in the
 | 
			
		||||
    /// init.
 | 
			
		||||
    @objc
 | 
			
		||||
    public var socketURL: URL
 | 
			
		||||
 | 
			
		||||
    var ackHandlers = SocketAckManager()
 | 
			
		||||
@ -141,6 +148,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter socketURL: The url of the socket.io server.
 | 
			
		||||
    /// - parameter config: The config for this socket.
 | 
			
		||||
    @objc
 | 
			
		||||
    public convenience init(socketURL: NSURL, config: NSDictionary?) {
 | 
			
		||||
        self.init(socketURL: socketURL as URL, config: config?.toSocketConfiguration() ?? [])
 | 
			
		||||
    }
 | 
			
		||||
@ -163,6 +171,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Connect to the server.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func connect() {
 | 
			
		||||
        connect(timeoutAfter: 0, withHandler: nil)
 | 
			
		||||
    }
 | 
			
		||||
@ -172,6 +181,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// - parameter timeoutAfter: The number of seconds after which if we are not connected we assume the connection
 | 
			
		||||
    ///                           has failed. Pass 0 to never timeout.
 | 
			
		||||
    /// - parameter withHandler: The handler to call when the client fails to connect.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func connect(timeoutAfter: Double, withHandler handler: (() -> ())?) {
 | 
			
		||||
        assert(timeoutAfter >= 0, "Invalid timeout: \(timeoutAfter)")
 | 
			
		||||
 | 
			
		||||
@ -229,6 +239,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Disconnects the socket.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func disconnect() {
 | 
			
		||||
        DefaultSocketLogger.Logger.log("Closing socket", type: SocketIOClient.logType)
 | 
			
		||||
 | 
			
		||||
@ -257,6 +268,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter event: The event to send.
 | 
			
		||||
    /// - parameter with: The items to send with this event. May be left out.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func emit(_ event: String, with items: [Any]) {
 | 
			
		||||
        guard status == .connected else {
 | 
			
		||||
            handleClientEvent(.error, data: ["Tried emitting \(event) when not connected"])
 | 
			
		||||
@ -314,6 +326,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// - parameter event: The event to send.
 | 
			
		||||
    /// - parameter with: The items to send with this event. Use `[]` to send nothing.
 | 
			
		||||
    /// - returns: An `OnAckCallback`. You must call the `timingOut(after:)` method before the event will be sent.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func emitWithAck(_ event: String, with items: [Any]) -> OnAckCallback {
 | 
			
		||||
        return createOnAck([event] + items)
 | 
			
		||||
    }
 | 
			
		||||
@ -405,6 +418,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// - parameter data: the data associated with this event.
 | 
			
		||||
    /// - parameter isInternalMessage: If `true` event handlers for this event will be called regardless of status.
 | 
			
		||||
    /// - parameter withAck: The ack number for this event. May be left out.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func handleEvent(_ event: String, data: [Any], isInternalMessage: Bool, withAck ack: Int = -1) {
 | 
			
		||||
        guard status == .connected || isInternalMessage else { return }
 | 
			
		||||
 | 
			
		||||
@ -422,6 +436,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Leaves nsp and goes back to the default namespace.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func leaveNamespace() {
 | 
			
		||||
        if nsp != "/" {
 | 
			
		||||
            engine?.send("1\(nsp)", withData: [])
 | 
			
		||||
@ -434,6 +449,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// **Do not use this to join the default namespace.** Instead call `leaveNamespace`.
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter namespace: The namespace to join.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func joinNamespace(_ namespace: String) {
 | 
			
		||||
        nsp = namespace
 | 
			
		||||
 | 
			
		||||
@ -457,6 +473,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// If you wish to remove a specific event, call the `off(id:)` with the UUID received from its `on` call.
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter event: The event to remove handlers for.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func off(_ event: String) {
 | 
			
		||||
        DefaultSocketLogger.Logger.log("Removing handler for event: \(event)", type: SocketIOClient.logType)
 | 
			
		||||
 | 
			
		||||
@ -468,6 +485,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// If you want to remove all events for an event, call the off `off(_:)` method with the event name.
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter id: The UUID of the handler you wish to remove.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func off(id: UUID) {
 | 
			
		||||
        DefaultSocketLogger.Logger.log("Removing handler with id: \(id)", type: SocketIOClient.logType)
 | 
			
		||||
 | 
			
		||||
@ -479,6 +497,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// - parameter event: The event name for this handler.
 | 
			
		||||
    /// - parameter callback: The callback that will execute when this event is received.
 | 
			
		||||
    /// - returns: A unique id for the handler that can be used to remove it.
 | 
			
		||||
    @objc
 | 
			
		||||
    @discardableResult
 | 
			
		||||
    open func on(_ event: String, callback: @escaping NormalCallback) -> UUID {
 | 
			
		||||
        DefaultSocketLogger.Logger.log("Adding handler for event: \(event)", type: SocketIOClient.logType)
 | 
			
		||||
@ -527,6 +546,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// - parameter event: The event name for this handler.
 | 
			
		||||
    /// - parameter callback: The callback that will execute when this event is received.
 | 
			
		||||
    /// - returns: A unique id for the handler that can be used to remove it.
 | 
			
		||||
    @objc
 | 
			
		||||
    @discardableResult
 | 
			
		||||
    open func once(_ event: String, callback: @escaping NormalCallback) -> UUID {
 | 
			
		||||
        DefaultSocketLogger.Logger.log("Adding once handler for event: \(event)", type: SocketIOClient.logType)
 | 
			
		||||
@ -547,6 +567,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// Adds a handler that will be called on every event.
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter handler: The callback that will execute whenever an event is received.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func onAny(_ handler: @escaping (SocketAnyEvent) -> ()) {
 | 
			
		||||
        anyHandler = handler
 | 
			
		||||
    }
 | 
			
		||||
@ -570,6 +591,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
    /// Tries to reconnect to the server.
 | 
			
		||||
    ///
 | 
			
		||||
    /// This will cause a `disconnect` event to be emitted, as well as an `reconnectAttempt` event.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func reconnect() {
 | 
			
		||||
        guard !reconnecting else { return }
 | 
			
		||||
 | 
			
		||||
@ -578,6 +600,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
 | 
			
		||||
 | 
			
		||||
    /// Removes all handlers.
 | 
			
		||||
    /// Can be used after disconnecting to break any potential remaining retain cycles.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func removeAllHandlers() {
 | 
			
		||||
        handlers.removeAll(keepingCapacity: false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -223,7 +223,7 @@ public final class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePoll
 | 
			
		||||
 | 
			
		||||
    private func handleBase64(message: String) {
 | 
			
		||||
        // binary in base64 string
 | 
			
		||||
        let noPrefix = message[message.index(message.startIndex, offsetBy: 2)..<message.endIndex]
 | 
			
		||||
        let noPrefix = String(message[message.index(message.startIndex, offsetBy: 2)..<message.endIndex])!
 | 
			
		||||
 | 
			
		||||
        if let data = Data(base64Encoded: noPrefix, options: .ignoreUnknownCharacters) {
 | 
			
		||||
            client?.parseEngineBinaryData(data)
 | 
			
		||||
 | 
			
		||||
@ -47,6 +47,7 @@ open class SocketClientManager : NSObject {
 | 
			
		||||
    // MARK: Properties.
 | 
			
		||||
 | 
			
		||||
    /// The shared manager.
 | 
			
		||||
    @objc
 | 
			
		||||
    open static let sharedManager = SocketClientManager()
 | 
			
		||||
 | 
			
		||||
    private var sockets = [String: SocketIOClient]()
 | 
			
		||||
@ -70,6 +71,7 @@ open class SocketClientManager : NSObject {
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter socket: The socket to add.
 | 
			
		||||
    /// - parameter labeledAs: The label for this socket.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func addSocket(_ socket: SocketIOClient, labeledAs label: String) {
 | 
			
		||||
        sockets[label] = socket
 | 
			
		||||
    }
 | 
			
		||||
@ -78,6 +80,7 @@ open class SocketClientManager : NSObject {
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter withLabel: The label of the socket to remove.
 | 
			
		||||
    /// - returns: The socket for the given label, if one was present.
 | 
			
		||||
    @objc
 | 
			
		||||
    @discardableResult
 | 
			
		||||
    open func removeSocket(withLabel label: String) -> SocketIOClient? {
 | 
			
		||||
        return sockets.removeValue(forKey: label)
 | 
			
		||||
@ -87,6 +90,7 @@ open class SocketClientManager : NSObject {
 | 
			
		||||
    ///
 | 
			
		||||
    /// - parameter socket: The socket to remove.
 | 
			
		||||
    /// - returns: The socket if it was in the manager.
 | 
			
		||||
    @objc
 | 
			
		||||
    @discardableResult
 | 
			
		||||
    open func removeSocket(_ socket: SocketIOClient) -> SocketIOClient? {
 | 
			
		||||
        var returnSocket: SocketIOClient?
 | 
			
		||||
@ -99,6 +103,7 @@ open class SocketClientManager : NSObject {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Removes all the sockets in the manager.
 | 
			
		||||
    @objc
 | 
			
		||||
    open func removeSockets() {
 | 
			
		||||
        sockets.removeAll()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
Subproject commit f7e28f24ae20898da5804079319da52682bb9212
 | 
			
		||||
Subproject commit 4ae6fe995316a49e7ac4ee0aaba9b3a0ba7f774d
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user