Compare commits
	
		
			8 Commits
		
	
	
		
			master
			...
			1.0-swift4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9b44bfb754 | ||
| 
						 | 
					4af28c3a57 | ||
| 
						 | 
					c0a4273d5b | ||
| 
						 | 
					add7a83a0f | ||
| 
						 | 
					4ca2710faa | ||
| 
						 | 
					424ab6c944 | ||
| 
						 | 
					d3aaaec9bb | ||
| 
						 | 
					46d982d4df | 
@ -1 +0,0 @@
 | 
			
		||||
3.1
 | 
			
		||||
@ -17,6 +17,7 @@ Pod::Spec.new do |s|
 | 
			
		||||
  s.source       = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v9.0.1' }
 | 
			
		||||
  s.source_files  = "Source/**/*.swift"
 | 
			
		||||
  s.requires_arc = true
 | 
			
		||||
  s.pod_target_xcconfig = {'SWIFT_VERSION' => '3.1'}
 | 
			
		||||
  s.swift_version = "4.2"
 | 
			
		||||
 | 
			
		||||
  # s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -537,9 +537,11 @@
 | 
			
		||||
				TargetAttributes = {
 | 
			
		||||
					572EF2181B51F16C00EEBB58 = {
 | 
			
		||||
						CreatedOnToolsVersion = 6.4;
 | 
			
		||||
						LastSwiftMigration = 1010;
 | 
			
		||||
					};
 | 
			
		||||
					572EF2231B51F16C00EEBB58 = {
 | 
			
		||||
						CreatedOnToolsVersion = 6.4;
 | 
			
		||||
						LastSwiftMigration = 0920;
 | 
			
		||||
					};
 | 
			
		||||
					572EF2371B51F18A00EEBB58 = {
 | 
			
		||||
						CreatedOnToolsVersion = 6.4;
 | 
			
		||||
@ -886,7 +888,8 @@
 | 
			
		||||
				SDKROOT = iphoneos;
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
			
		||||
				SWIFT_VERSION = 3.0;
 | 
			
		||||
				SWIFT_SWIFT3_OBJC_INFERENCE = On;
 | 
			
		||||
				SWIFT_VERSION = 4.2;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
			
		||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
			
		||||
				VERSION_INFO_PREFIX = "";
 | 
			
		||||
@ -937,7 +940,8 @@
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = io.socket.SocketIOClientSwift;
 | 
			
		||||
				SDKROOT = iphoneos;
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_VERSION = 3.0;
 | 
			
		||||
				SWIFT_SWIFT3_OBJC_INFERENCE = On;
 | 
			
		||||
				SWIFT_VERSION = 4.2;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
			
		||||
				VALIDATE_PRODUCT = YES;
 | 
			
		||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
			
		||||
@ -993,6 +997,8 @@
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SDKROOT = iphoneos;
 | 
			
		||||
				SWIFT_SWIFT3_OBJC_INFERENCE = On;
 | 
			
		||||
				SWIFT_VERSION = 4.0;
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
@ -1037,6 +1043,8 @@
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SDKROOT = iphoneos;
 | 
			
		||||
				SWIFT_SWIFT3_OBJC_INFERENCE = On;
 | 
			
		||||
				SWIFT_VERSION = 4.0;
 | 
			
		||||
				VALIDATE_PRODUCT = YES;
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
@ -1094,7 +1102,7 @@
 | 
			
		||||
				SDKROOT = macosx;
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
			
		||||
				SWIFT_VERSION = 3.0;
 | 
			
		||||
				SWIFT_VERSION = 4.0;
 | 
			
		||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
			
		||||
				VERSION_INFO_PREFIX = "";
 | 
			
		||||
			};
 | 
			
		||||
@ -1146,7 +1154,7 @@
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
			
		||||
				SDKROOT = macosx;
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_VERSION = 3.0;
 | 
			
		||||
				SWIFT_VERSION = 4.0;
 | 
			
		||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
			
		||||
				VERSION_INFO_PREFIX = "";
 | 
			
		||||
			};
 | 
			
		||||
@ -1305,6 +1313,7 @@
 | 
			
		||||
				SDKROOT = appletvos;
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
			
		||||
				SWIFT_VERSION = 4.0;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = 3;
 | 
			
		||||
				TVOS_DEPLOYMENT_TARGET = 9.0;
 | 
			
		||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
			
		||||
@ -1356,6 +1365,7 @@
 | 
			
		||||
				PRODUCT_NAME = SocketIO;
 | 
			
		||||
				SDKROOT = appletvos;
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_VERSION = 4.0;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = 3;
 | 
			
		||||
				TVOS_DEPLOYMENT_TARGET = 9.0;
 | 
			
		||||
				VALIDATE_PRODUCT = YES;
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,7 @@ class SocketBasicPacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testJSONEmit() {
 | 
			
		||||
        let expectedSendString = "2[\"test\",{\"null\":null,\"hello\":1,\"test\":\"hello\",\"foobar\":true}]"
 | 
			
		||||
        let expectedSendString = "2[\"test\",{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
 | 
			
		||||
        let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
 | 
			
		||||
        
 | 
			
		||||
@ -71,7 +71,7 @@ class SocketBasicPacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testMultipleBinaryEmit() {
 | 
			
		||||
        let expectedSendString = "52-[\"test\",{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
 | 
			
		||||
        let expectedSendString = "52-[\"test\",{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
 | 
			
		||||
        let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
 | 
			
		||||
        
 | 
			
		||||
@ -123,7 +123,7 @@ class SocketBasicPacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testJSONAck() {
 | 
			
		||||
        let expectedSendString = "30[{\"null\":null,\"hello\":1,\"test\":\"hello\",\"foobar\":true}]"
 | 
			
		||||
        let expectedSendString = "30[{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
 | 
			
		||||
        let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
 | 
			
		||||
        
 | 
			
		||||
@ -140,7 +140,7 @@ class SocketBasicPacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testMultipleBinaryAck() {
 | 
			
		||||
        let expectedSendString = "62-0[{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
 | 
			
		||||
        let expectedSendString = "62-0[{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
 | 
			
		||||
        let sendData = [["data1": data, "data2": data2]]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ class SocketNamespacePacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testJSONEmit() {
 | 
			
		||||
        let expectedSendString = "2/swift,[\"test\",{\"null\":null,\"test\":\"hello\",\"hello\":1,\"foobar\":true}]"
 | 
			
		||||
        let expectedSendString = "2/swift,[\"test\",{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
 | 
			
		||||
        let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
 | 
			
		||||
        
 | 
			
		||||
@ -64,7 +64,7 @@ class SocketNamespacePacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testMultipleBinaryEmit() {
 | 
			
		||||
        let expectedSendString = "52-/swift,[\"test\",{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
 | 
			
		||||
        let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
 | 
			
		||||
        let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
 | 
			
		||||
        
 | 
			
		||||
@ -114,7 +114,7 @@ class SocketNamespacePacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testJSONAck() {
 | 
			
		||||
        let expectedSendString = "3/swift,0[{\"null\":null,\"hello\":1,\"test\":\"hello\",\"foobar\":true}]"
 | 
			
		||||
        let expectedSendString = "3/swift,0[{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
 | 
			
		||||
        let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
 | 
			
		||||
        
 | 
			
		||||
@ -131,7 +131,7 @@ class SocketNamespacePacketTest: XCTestCase {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func testMultipleBinaryAck() {
 | 
			
		||||
        let expectedSendString = "62-/swift,0[{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
 | 
			
		||||
        let expectedSendString = "62-/swift,0[{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
 | 
			
		||||
        let sendData = [["data1": data, "data2": data2]]
 | 
			
		||||
        let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
@ -225,9 +225,9 @@ 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 = NSData(base64Encoded: noPrefix, options: .ignoreUnknownCharacters) {
 | 
			
		||||
        if let data = Data(base64Encoded: noPrefix, options: .ignoreUnknownCharacters) {
 | 
			
		||||
            client?.parseEngineBinaryData(data as Data)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -535,13 +535,13 @@ public final class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePoll
 | 
			
		||||
 | 
			
		||||
        switch type {
 | 
			
		||||
        case .message:
 | 
			
		||||
            handleMessage(String(fixedString.characters.dropFirst()))
 | 
			
		||||
            handleMessage(String(fixedString.dropFirst()))
 | 
			
		||||
        case .noop:
 | 
			
		||||
            handleNOOP()
 | 
			
		||||
        case .pong:
 | 
			
		||||
            handlePong(with: fixedString)
 | 
			
		||||
        case .open:
 | 
			
		||||
            handleOpen(openData: String(fixedString.characters.dropFirst()))
 | 
			
		||||
            handleOpen(openData: String(fixedString.dropFirst()))
 | 
			
		||||
        case .close:
 | 
			
		||||
            handleClose(fixedString)
 | 
			
		||||
        default:
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ extension SocketEnginePollable {
 | 
			
		||||
        var postStr = ""
 | 
			
		||||
 | 
			
		||||
        for packet in postWait {
 | 
			
		||||
            let len = packet.characters.count
 | 
			
		||||
            let len = packet.count
 | 
			
		||||
 | 
			
		||||
            postStr += "\(len):\(packet)"
 | 
			
		||||
        }
 | 
			
		||||
@ -209,7 +209,7 @@ extension SocketEnginePollable {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func parsePollingMessage(_ str: String) {
 | 
			
		||||
        guard str.characters.count != 1 else { return }
 | 
			
		||||
        guard str.count != 1 else { return }
 | 
			
		||||
 | 
			
		||||
        var reader = SocketStringReader(message: str)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,9 +31,13 @@ enum JSONError : Error {
 | 
			
		||||
 | 
			
		||||
extension Array {
 | 
			
		||||
    func toJSON() throws -> Data {
 | 
			
		||||
        if #available(iOS 11.0, OSX 10.13, tvOS 11.0, *) {
 | 
			
		||||
            return try JSONSerialization.data(withJSONObject: self, options: [.sortedKeys])
 | 
			
		||||
        } else {
 | 
			
		||||
            return try JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions(rawValue: 0))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extension CharacterSet {
 | 
			
		||||
    static var allowedURLCharacterSet: CharacterSet {
 | 
			
		||||
 | 
			
		||||
@ -107,13 +107,13 @@ extension SocketParsable where Self: SocketIOClientSpec {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        var dataArray = message[message.characters.index(reader.currentIndex, offsetBy: 1)..<message.endIndex]
 | 
			
		||||
        var dataArray = message[message.index(reader.currentIndex, offsetBy: 1)..<message.endIndex]
 | 
			
		||||
        
 | 
			
		||||
        if type == .error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") {
 | 
			
		||||
            dataArray = "[" + dataArray + "]"
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        switch parseData(dataArray) {
 | 
			
		||||
        switch parseData(String(dataArray)) {
 | 
			
		||||
        case let .left(err):
 | 
			
		||||
            return .left(err)
 | 
			
		||||
        case let .right(data):
 | 
			
		||||
 | 
			
		||||
@ -40,34 +40,33 @@ struct SocketStringReader {
 | 
			
		||||
    
 | 
			
		||||
    @discardableResult
 | 
			
		||||
    mutating func advance(by: Int) -> String.Index {
 | 
			
		||||
        currentIndex = message.characters.index(currentIndex, offsetBy: by)
 | 
			
		||||
        currentIndex = message.index(currentIndex, offsetBy: by)
 | 
			
		||||
        
 | 
			
		||||
        return currentIndex
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    mutating func read(count: Int) -> String {
 | 
			
		||||
        let readString = message[currentIndex..<message.characters.index(currentIndex, offsetBy: count)]
 | 
			
		||||
        
 | 
			
		||||
        let readString = message[currentIndex..<message.index(currentIndex, offsetBy: count)]
 | 
			
		||||
        advance(by: count)
 | 
			
		||||
        
 | 
			
		||||
        return readString
 | 
			
		||||
        return String(readString)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    mutating func readUntilOccurence(of string: String) -> String {
 | 
			
		||||
        let substring = message[currentIndex..<message.endIndex]
 | 
			
		||||
        let substring = message.utf16[currentIndex...]
 | 
			
		||||
        
 | 
			
		||||
        guard let foundRange = substring.range(of: string) else {
 | 
			
		||||
            currentIndex = message.endIndex
 | 
			
		||||
        guard let foundIndex = substring.index(of: string.utf16.first!) else {
 | 
			
		||||
            currentIndex = message.utf16.endIndex
 | 
			
		||||
            
 | 
			
		||||
            return substring
 | 
			
		||||
            return String(substring)!
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        advance(by: message.characters.distance(from: message.characters.startIndex, to: foundRange.lowerBound) + 1)
 | 
			
		||||
        advance(by: substring.distance(from: substring.startIndex, to: foundIndex) + 1)
 | 
			
		||||
        
 | 
			
		||||
        return substring.substring(to: foundRange.lowerBound)
 | 
			
		||||
        return String(substring[substring.startIndex..<foundIndex])!
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    mutating func readUntilEnd() -> String {
 | 
			
		||||
        return read(count: message.characters.distance(from: currentIndex, to: message.endIndex))
 | 
			
		||||
        return read(count: message.distance(from: currentIndex, to: message.endIndex))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -115,7 +115,7 @@ open class WebSocket : NSObject, StreamDelegate {
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    // MARK: - Block based API.
 | 
			
		||||
    public var onConnect: ((Void) -> Void)?
 | 
			
		||||
    public var onConnect: (() -> Void)?
 | 
			
		||||
    public var onDisconnect: ((NSError?) -> Void)?
 | 
			
		||||
    public var onText: ((String) -> Void)?
 | 
			
		||||
    public var onData: ((Data) -> Void)?
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user