commit
						d690d9c1bf
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -50,3 +50,5 @@ Socket.IO-Test-Server/node_modules/*
 | 
				
			|||||||
.idea/
 | 
					.idea/
 | 
				
			||||||
docs/docsets/
 | 
					docs/docsets/
 | 
				
			||||||
docs/undocumented.json
 | 
					docs/undocumented.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.swiftpm
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<Workspace
 | 
				
			||||||
 | 
					   version = "1.0">
 | 
				
			||||||
 | 
					   <FileRef
 | 
				
			||||||
 | 
					      location = "self:">
 | 
				
			||||||
 | 
					   </FileRef>
 | 
				
			||||||
 | 
					</Workspace>
 | 
				
			||||||
@ -6,8 +6,8 @@
 | 
				
			|||||||
        "repositoryURL": "https://github.com/daltoniam/Starscream",
 | 
					        "repositoryURL": "https://github.com/daltoniam/Starscream",
 | 
				
			||||||
        "state": {
 | 
					        "state": {
 | 
				
			||||||
          "branch": null,
 | 
					          "branch": null,
 | 
				
			||||||
          "revision": "ac6c0fc9da221873e01bd1a0d4818498a71eef33",
 | 
					          "revision": "c6bfd1af48efcc9a9ad203665db12375ba6b145a",
 | 
				
			||||||
          "version": "4.0.6"
 | 
					          "version": "4.0.8"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ let package = Package(
 | 
				
			|||||||
        .library(name: "SocketIO", targets: ["SocketIO"])
 | 
					        .library(name: "SocketIO", targets: ["SocketIO"])
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    dependencies: [
 | 
					    dependencies: [
 | 
				
			||||||
        .package(url: "https://github.com/daltoniam/Starscream", .exactItem("4.0.6")),
 | 
					        .package(url: "https://github.com/daltoniam/Starscream", .upToNextMajor(from: "4.0.8")),
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    targets: [
 | 
					    targets: [
 | 
				
			||||||
        .target(name: "SocketIO", dependencies: ["Starscream"]),
 | 
					        .target(name: "SocketIO", dependencies: ["Starscream"]),
 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,7 @@ socket.on("currentAmount") {data, ack in
 | 
				
			|||||||
    guard let cur = data[0] as? Double else { return }
 | 
					    guard let cur = data[0] as? Double else { return }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    socket.emitWithAck("canUpdate", cur).timingOut(after: 0) {data in
 | 
					    socket.emitWithAck("canUpdate", cur).timingOut(after: 0) {data in
 | 
				
			||||||
        if data.first as? String ?? "passed" == SocketAckValue.noAck {
 | 
					        if data.first as? String ?? "passed" == SocketAckStatus.noAck {
 | 
				
			||||||
            // Handle ack timeout 
 | 
					            // Handle ack timeout 
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ Pod::Spec.new do |s|
 | 
				
			|||||||
  s.homepage     = "https://github.com/socketio/socket.io-client-swift"
 | 
					  s.homepage     = "https://github.com/socketio/socket.io-client-swift"
 | 
				
			||||||
  s.license      = { :type => 'MIT' }
 | 
					  s.license      = { :type => 'MIT' }
 | 
				
			||||||
  s.author       = { "Erik" => "nuclear.ace@gmail.com" }
 | 
					  s.author       = { "Erik" => "nuclear.ace@gmail.com" }
 | 
				
			||||||
  s.ios.deployment_target = '11.0'
 | 
					  s.ios.deployment_target = '12.0'
 | 
				
			||||||
  s.osx.deployment_target = '10.13'
 | 
					  s.osx.deployment_target = '10.13'
 | 
				
			||||||
  s.tvos.deployment_target = '12.0'
 | 
					  s.tvos.deployment_target = '12.0'
 | 
				
			||||||
  s.watchos.deployment_target = '5.0'
 | 
					  s.watchos.deployment_target = '5.0'
 | 
				
			||||||
 | 
				
			|||||||
@ -652,6 +652,7 @@
 | 
				
			|||||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
									GCC_WARN_UNUSED_VARIABLE = YES;
 | 
				
			||||||
				INFOPLIST_FILE = SocketIO/Info.plist;
 | 
									INFOPLIST_FILE = SocketIO/Info.plist;
 | 
				
			||||||
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
 | 
									INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
					"$(inherited)",
 | 
										"$(inherited)",
 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
@ -678,7 +679,7 @@
 | 
				
			|||||||
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
									SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TARGETED_DEVICE_FAMILY = "1,2,3,4,7";
 | 
									TARGETED_DEVICE_FAMILY = "1,2,3,4,7";
 | 
				
			||||||
				TVOS_DEPLOYMENT_TARGET = 10.0;
 | 
									TVOS_DEPLOYMENT_TARGET = 12.0;
 | 
				
			||||||
				VALID_ARCHS = "$(inherited)";
 | 
									VALID_ARCHS = "$(inherited)";
 | 
				
			||||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
									VERSIONING_SYSTEM = "apple-generic";
 | 
				
			||||||
				VERSION_INFO_PREFIX = "";
 | 
									VERSION_INFO_PREFIX = "";
 | 
				
			||||||
@ -728,6 +729,7 @@
 | 
				
			|||||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
									GCC_WARN_UNUSED_VARIABLE = YES;
 | 
				
			||||||
				INFOPLIST_FILE = SocketIO/Info.plist;
 | 
									INFOPLIST_FILE = SocketIO/Info.plist;
 | 
				
			||||||
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
 | 
									INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
					"$(inherited)",
 | 
										"$(inherited)",
 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
@ -752,7 +754,7 @@
 | 
				
			|||||||
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
									SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TARGETED_DEVICE_FAMILY = "1,2,3,4,7";
 | 
									TARGETED_DEVICE_FAMILY = "1,2,3,4,7";
 | 
				
			||||||
				TVOS_DEPLOYMENT_TARGET = 10.0;
 | 
									TVOS_DEPLOYMENT_TARGET = 12.0;
 | 
				
			||||||
				VALID_ARCHS = "$(inherited)";
 | 
									VALID_ARCHS = "$(inherited)";
 | 
				
			||||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
									VERSIONING_SYSTEM = "apple-generic";
 | 
				
			||||||
				VERSION_INFO_PREFIX = "";
 | 
									VERSION_INFO_PREFIX = "";
 | 
				
			||||||
@ -832,7 +834,7 @@
 | 
				
			|||||||
					"@loader_path/../Frameworks",
 | 
										"@loader_path/../Frameworks",
 | 
				
			||||||
				);
 | 
									);
 | 
				
			||||||
				LIBRARY_SEARCH_PATHS = "$(inherited)";
 | 
									LIBRARY_SEARCH_PATHS = "$(inherited)";
 | 
				
			||||||
				MACOSX_DEPLOYMENT_TARGET = 10.10;
 | 
									MACOSX_DEPLOYMENT_TARGET = 10.13;
 | 
				
			||||||
				MTL_ENABLE_DEBUG_INFO = YES;
 | 
									MTL_ENABLE_DEBUG_INFO = YES;
 | 
				
			||||||
				ONLY_ACTIVE_ARCH = YES;
 | 
									ONLY_ACTIVE_ARCH = YES;
 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
									PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
				
			||||||
@ -842,7 +844,7 @@
 | 
				
			|||||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
									SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
				
			||||||
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
									SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TVOS_DEPLOYMENT_TARGET = 10.0;
 | 
									TVOS_DEPLOYMENT_TARGET = 12.0;
 | 
				
			||||||
				VALID_ARCHS = "$(inherited)";
 | 
									VALID_ARCHS = "$(inherited)";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			name = Debug;
 | 
								name = Debug;
 | 
				
			||||||
@ -914,7 +916,7 @@
 | 
				
			|||||||
					"@loader_path/../Frameworks",
 | 
										"@loader_path/../Frameworks",
 | 
				
			||||||
				);
 | 
									);
 | 
				
			||||||
				LIBRARY_SEARCH_PATHS = "$(inherited)";
 | 
									LIBRARY_SEARCH_PATHS = "$(inherited)";
 | 
				
			||||||
				MACOSX_DEPLOYMENT_TARGET = 10.10;
 | 
									MACOSX_DEPLOYMENT_TARGET = 10.13;
 | 
				
			||||||
				MTL_ENABLE_DEBUG_INFO = NO;
 | 
									MTL_ENABLE_DEBUG_INFO = NO;
 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
									PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
@ -922,7 +924,7 @@
 | 
				
			|||||||
				SUPPORTED_PLATFORMS = "$(inherited)";
 | 
									SUPPORTED_PLATFORMS = "$(inherited)";
 | 
				
			||||||
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
									SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TVOS_DEPLOYMENT_TARGET = 10.0;
 | 
									TVOS_DEPLOYMENT_TARGET = 12.0;
 | 
				
			||||||
				VALID_ARCHS = "$(inherited)";
 | 
									VALID_ARCHS = "$(inherited)";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			name = Release;
 | 
								name = Release;
 | 
				
			||||||
 | 
				
			|||||||
@ -136,8 +136,8 @@ public final class OnAckCallback: NSObject {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        guard seconds != 0 else { return }
 | 
					        guard seconds != 0 else { return }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket, weak self] in
 | 
					        socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket] in
 | 
				
			||||||
            guard let socket = socket, let `self` = self else { return }
 | 
					            guard let socket = socket else { return }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            socket.ackHandlers.timeoutAck(self.ackNumber)
 | 
					            socket.ackHandlers.timeoutAck(self.ackNumber)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -150,7 +150,8 @@ open class SocketIOClient: NSObject, SocketIOClientSpec {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        manager.handleQueue.asyncAfter(deadline: DispatchTime.now() + timeoutAfter) {[weak self] in
 | 
					        manager.handleQueue.asyncAfter(deadline: DispatchTime.now() + timeoutAfter) {[weak self] in
 | 
				
			||||||
            guard let this = self, this.status == .connecting || this.status == .notConnected else { return }
 | 
					            guard let this = self, this.status == .connecting || this.status == .notConnected else { return }
 | 
				
			||||||
 | 
					            DefaultSocketLogger.Logger.log("Timeout: Socket not connected, so setting to disconnected", type: this.logType)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            this.status = .disconnected
 | 
					            this.status = .disconnected
 | 
				
			||||||
            this.leaveNamespace()
 | 
					            this.leaveNamespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -761,6 +761,12 @@ extension SocketEngine {
 | 
				
			|||||||
        case .disconnected(_, _):
 | 
					        case .disconnected(_, _):
 | 
				
			||||||
            wsConnected = false
 | 
					            wsConnected = false
 | 
				
			||||||
            websocketDidDisconnect(error: nil)
 | 
					            websocketDidDisconnect(error: nil)
 | 
				
			||||||
 | 
					        case .viabilityChanged(false):
 | 
				
			||||||
 | 
					            wsConnected = false
 | 
				
			||||||
 | 
					            websocketDidDisconnect(error: nil)
 | 
				
			||||||
 | 
					        case .peerClosed:
 | 
				
			||||||
 | 
					            wsConnected = false
 | 
				
			||||||
 | 
					            websocketDidDisconnect(error: nil)
 | 
				
			||||||
        case let .text(msg):
 | 
					        case let .text(msg):
 | 
				
			||||||
            parseEngineMessage(msg)
 | 
					            parseEngineMessage(msg)
 | 
				
			||||||
        case let .binary(data):
 | 
					        case let .binary(data):
 | 
				
			||||||
 | 
				
			|||||||
@ -132,7 +132,7 @@ open class SocketManager: NSObject, SocketManagerSpec, SocketParsable, SocketDat
 | 
				
			|||||||
    private(set) var reconnectAttempts = -1
 | 
					    private(set) var reconnectAttempts = -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private var _config: SocketIOClientConfiguration
 | 
					    private var _config: SocketIOClientConfiguration
 | 
				
			||||||
    private var currentReconnectAttempt = 0
 | 
					    internal var currentReconnectAttempt = 0
 | 
				
			||||||
    private var reconnecting = false
 | 
					    private var reconnecting = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // MARK: Initializers
 | 
					    // MARK: Initializers
 | 
				
			||||||
@ -186,9 +186,8 @@ open class SocketManager: NSObject, SocketManagerSpec, SocketParsable, SocketDat
 | 
				
			|||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// Override if you wish to attach a custom `SocketEngineSpec`.
 | 
					    /// Override if you wish to attach a custom `SocketEngineSpec`.
 | 
				
			||||||
    open func connect() {
 | 
					    open func connect() {
 | 
				
			||||||
        guard !status.active else {
 | 
					        if status == .connected || (status == .connecting && currentReconnectAttempt == 0) {
 | 
				
			||||||
            DefaultSocketLogger.Logger.log("Tried connecting an already active socket", type: SocketManager.logType)
 | 
					            DefaultSocketLogger.Logger.log("Tried connecting an already active socket", type: SocketManager.logType)
 | 
				
			||||||
 | 
					 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -60,6 +60,44 @@ class SocketMangerTest : XCTestCase {
 | 
				
			|||||||
        waitForExpectations(timeout: 0.3)
 | 
					        waitForExpectations(timeout: 0.3)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func testManagerDoesNotCallConnectWhenConnectingWithLessThanOneReconnect() {
 | 
				
			||||||
 | 
					        setUpSockets()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        let expect = expectation(description: "The manager should not call connect on the engine")
 | 
				
			||||||
 | 
					        expect.isInverted = true
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        let engine = TestEngine(client: manager, url: manager.socketURL, options: nil)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        engine.onConnect = {
 | 
				
			||||||
 | 
					            expect.fulfill()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        manager.setTestStatus(.connecting)
 | 
				
			||||||
 | 
					        manager.setCurrentReconnect(currentReconnect: 0)
 | 
				
			||||||
 | 
					        manager.engine = engine
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        manager.connect()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        waitForExpectations(timeout: 0.3)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func testManagerCallConnectWhenConnectingAndMoreThanOneReconnect() {
 | 
				
			||||||
 | 
					        setUpSockets()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        let expect = expectation(description: "The manager should call connect on the engine")
 | 
				
			||||||
 | 
					        let engine = TestEngine(client: manager, url: manager.socketURL, options: nil)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        engine.onConnect = {
 | 
				
			||||||
 | 
					            expect.fulfill()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        manager.setTestStatus(.connecting)
 | 
				
			||||||
 | 
					        manager.setCurrentReconnect(currentReconnect: 1)
 | 
				
			||||||
 | 
					        manager.engine = engine
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        manager.connect()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        waitForExpectations(timeout: 0.8)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    func testManagerCallsDisconnect() {
 | 
					    func testManagerCallsDisconnect() {
 | 
				
			||||||
        setUpSockets()
 | 
					        setUpSockets()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -154,6 +192,10 @@ public enum ManagerExpectation: String {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class TestManager: SocketManager {
 | 
					public class TestManager: SocketManager {
 | 
				
			||||||
 | 
					    public func setCurrentReconnect(currentReconnect: Int) {
 | 
				
			||||||
 | 
					        self.currentReconnectAttempt = currentReconnect
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    public override func disconnect() {
 | 
					    public override func disconnect() {
 | 
				
			||||||
        setTestStatus(.disconnected)
 | 
					        setTestStatus(.disconnected)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -487,7 +487,7 @@ class TestEngine: SocketEngineSpec {
 | 
				
			|||||||
    private(set) var ws: WebSocket? = nil
 | 
					    private(set) var ws: WebSocket? = nil
 | 
				
			||||||
    private(set) var version = SocketIOVersion.three
 | 
					    private(set) var version = SocketIOVersion.three
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fileprivate var onConnect: (() -> ())?
 | 
					    internal var onConnect: (() -> ())?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    required init(client: SocketEngineClient, url: URL, options: [String: Any]?) {
 | 
					    required init(client: SocketEngineClient, url: URL, options: [String: Any]?) {
 | 
				
			||||||
        self.client = client
 | 
					        self.client = client
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user