From e2db1a086d6ee7e65c3d873ee626ca1a38825e2d Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 16 Apr 2016 12:00:21 -0400 Subject: [PATCH] update for latest swift 3 --- SocketIO-MacTests/SocketBasicPacketTest.swift | 36 ++--- .../SocketNamespacePacketTest.swift | 34 ++--- SocketIO-MacTests/SocketObjectiveCTest.m | 2 +- SocketIO-MacTests/SocketParserTest.swift | 30 ++-- SocketIO-MacTests/SocketSideEffectTest.swift | 8 +- Source/SocketAckEmitter.swift | 4 +- Source/SocketAckManager.swift | 6 +- Source/SocketEngine.swift | 72 ++++----- Source/SocketEngineClient.swift | 4 +- Source/SocketEnginePollable.swift | 34 ++--- Source/SocketEngineSpec.swift | 14 +- Source/SocketEngineWebsocket.swift | 10 +- Source/SocketIOClient.swift | 60 ++++---- Source/SocketIOClientOption.swift | 4 +- Source/SocketIOClientSpec.swift | 6 +- Source/SocketLogger.swift | 10 +- Source/SocketPacket.swift | 12 +- Source/SocketParsable.swift | 30 ++-- Source/SocketStringReader.swift | 16 +- Source/SwiftRegex.swift | 26 ++-- Source/WebSocket.swift | 137 +++++++++--------- 21 files changed, 281 insertions(+), 274 deletions(-) diff --git a/SocketIO-MacTests/SocketBasicPacketTest.swift b/SocketIO-MacTests/SocketBasicPacketTest.swift index d9ed590..c8ef466 100644 --- a/SocketIO-MacTests/SocketBasicPacketTest.swift +++ b/SocketIO-MacTests/SocketBasicPacketTest.swift @@ -10,13 +10,13 @@ import XCTest @testable import SocketIOClientSwift class SocketBasicPacketTest: XCTestCase { - let data = "test".data(usingEncoding: NSUTF8StringEncoding)! - let data2 = "test2".data(usingEncoding: NSUTF8StringEncoding)! + let data = "test".data(using: NSUTF8StringEncoding)! + let data2 = "test2".data(using: NSUTF8StringEncoding)! func testEmpyEmit() { let expectedSendString = "2[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -24,7 +24,7 @@ class SocketBasicPacketTest: XCTestCase { func testNullEmit() { let expectedSendString = "2[\"test\",null]" let sendData = ["test", NSNull()] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -32,7 +32,7 @@ class SocketBasicPacketTest: XCTestCase { func testStringEmit() { let expectedSendString = "2[\"test\",\"foo bar\"]" let sendData = ["test", "foo bar"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -40,7 +40,7 @@ class SocketBasicPacketTest: XCTestCase { func testStringEmitWithQuotes() { let expectedSendString = "2[\"test\",\"\\\"he\\\"llo world\\\"\"]" let sendData = ["test", "\"he\"llo world\""] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -48,7 +48,7 @@ class SocketBasicPacketTest: XCTestCase { func testJSONEmit() { let expectedSendString = "2[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" let sendData = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -56,7 +56,7 @@ class SocketBasicPacketTest: XCTestCase { func testArrayEmit() { let expectedSendString = "2[\"test\",[\"hello\",1,{\"test\":\"test\"}]]" let sendData = ["test", ["hello", 1, ["test": "test"]]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -64,7 +64,7 @@ class SocketBasicPacketTest: XCTestCase { func testBinaryEmit() { let expectedSendString = "51-[\"test\",{\"num\":0,\"_placeholder\":true}]" let sendData = ["test", data] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) @@ -73,7 +73,7 @@ class SocketBasicPacketTest: XCTestCase { func testMultipleBinaryEmit() { let expectedSendString = "52-[\"test\",{\"data1\":{\"num\":0,\"_placeholder\":true},\"data2\":{\"num\":1,\"_placeholder\":true}}]" let sendData = ["test", ["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data, data2]) @@ -82,7 +82,7 @@ class SocketBasicPacketTest: XCTestCase { func testEmitWithAck() { let expectedSendString = "20[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -90,7 +90,7 @@ class SocketBasicPacketTest: XCTestCase { func testEmitDataWithAck() { let expectedSendString = "51-0[\"test\",{\"num\":0,\"_placeholder\":true}]" let sendData = ["test", data] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) @@ -99,7 +99,7 @@ class SocketBasicPacketTest: XCTestCase { // Acks func testEmptyAck() { let expectedSendString = "30[]" - let packet = SocketPacket.packetFromEmit([], id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(items: [], id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -107,7 +107,7 @@ class SocketBasicPacketTest: XCTestCase { func testNullAck() { let expectedSendString = "30[null]" let sendData = [NSNull()] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -115,7 +115,7 @@ class SocketBasicPacketTest: XCTestCase { func testStringAck() { let expectedSendString = "30[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -123,7 +123,7 @@ class SocketBasicPacketTest: XCTestCase { func testJSONAck() { let expectedSendString = "30[{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -131,7 +131,7 @@ class SocketBasicPacketTest: XCTestCase { func testBinaryAck() { let expectedSendString = "61-0[{\"num\":0,\"_placeholder\":true}]" let sendData = [data] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) @@ -140,7 +140,7 @@ class SocketBasicPacketTest: XCTestCase { func testMultipleBinaryAck() { let expectedSendString = "62-0[{\"data2\":{\"num\":0,\"_placeholder\":true},\"data1\":{\"num\":1,\"_placeholder\":true}}]" let sendData = [["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data2, data]) diff --git a/SocketIO-MacTests/SocketNamespacePacketTest.swift b/SocketIO-MacTests/SocketNamespacePacketTest.swift index 54f72e9..4f5315b 100644 --- a/SocketIO-MacTests/SocketNamespacePacketTest.swift +++ b/SocketIO-MacTests/SocketNamespacePacketTest.swift @@ -10,13 +10,13 @@ import XCTest @testable import SocketIOClientSwift class SocketNamespacePacketTest: XCTestCase { - let data = "test".data(usingEncoding: NSUTF8StringEncoding)! - let data2 = "test2".data(usingEncoding: NSUTF8StringEncoding)! + let data = "test".data(using: NSUTF8StringEncoding)! + let data2 = "test2".data(using: NSUTF8StringEncoding)! func testEmpyEmit() { let expectedSendString = "2/swift,[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -24,7 +24,7 @@ class SocketNamespacePacketTest: XCTestCase { func testNullEmit() { let expectedSendString = "2/swift,[\"test\",null]" let sendData = ["test", NSNull()] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -32,7 +32,7 @@ class SocketNamespacePacketTest: XCTestCase { func testStringEmit() { let expectedSendString = "2/swift,[\"test\",\"foo bar\"]" let sendData = ["test", "foo bar"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -40,7 +40,7 @@ class SocketNamespacePacketTest: XCTestCase { func testJSONEmit() { let expectedSendString = "2/swift,[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" let sendData = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -48,7 +48,7 @@ class SocketNamespacePacketTest: XCTestCase { func testArrayEmit() { let expectedSendString = "2/swift,[\"test\",[\"hello\",1,{\"test\":\"test\"}]]" let sendData = ["test", ["hello", 1, ["test": "test"]]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -56,7 +56,7 @@ class SocketNamespacePacketTest: XCTestCase { func testBinaryEmit() { let expectedSendString = "51-/swift,[\"test\",{\"num\":0,\"_placeholder\":true}]" let sendData = ["test", data] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) @@ -65,7 +65,7 @@ class SocketNamespacePacketTest: XCTestCase { func testMultipleBinaryEmit() { let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"num\":0,\"_placeholder\":true},\"data2\":{\"num\":1,\"_placeholder\":true}}]" let sendData = ["test", ["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data, data2]) @@ -74,7 +74,7 @@ class SocketNamespacePacketTest: XCTestCase { func testEmitWithAck() { let expectedSendString = "2/swift,0[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -82,7 +82,7 @@ class SocketNamespacePacketTest: XCTestCase { func testEmitDataWithAck() { let expectedSendString = "51-/swift,0[\"test\",{\"num\":0,\"_placeholder\":true}]" let sendData = ["test", data] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) @@ -91,7 +91,7 @@ class SocketNamespacePacketTest: XCTestCase { // Acks func testEmptyAck() { let expectedSendString = "3/swift,0[]" - let packet = SocketPacket.packetFromEmit([], id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(items: [], id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -99,7 +99,7 @@ class SocketNamespacePacketTest: XCTestCase { func testNullAck() { let expectedSendString = "3/swift,0[null]" let sendData = [NSNull()] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -107,7 +107,7 @@ class SocketNamespacePacketTest: XCTestCase { func testStringAck() { let expectedSendString = "3/swift,0[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -115,7 +115,7 @@ class SocketNamespacePacketTest: XCTestCase { func testJSONAck() { let expectedSendString = "3/swift,0[{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -123,7 +123,7 @@ class SocketNamespacePacketTest: XCTestCase { func testBinaryAck() { let expectedSendString = "61-/swift,0[{\"num\":0,\"_placeholder\":true}]" let sendData = [data] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) @@ -132,7 +132,7 @@ class SocketNamespacePacketTest: XCTestCase { func testMultipleBinaryAck() { let expectedSendString = "62-/swift,0[{\"data2\":{\"num\":0,\"_placeholder\":true},\"data1\":{\"num\":1,\"_placeholder\":true}}]" let sendData = [["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(items: sendData, id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data2, data]) diff --git a/SocketIO-MacTests/SocketObjectiveCTest.m b/SocketIO-MacTests/SocketObjectiveCTest.m index 6fbbcbe..95b49be 100644 --- a/SocketIO-MacTests/SocketObjectiveCTest.m +++ b/SocketIO-MacTests/SocketObjectiveCTest.m @@ -39,7 +39,7 @@ } - (void)testOffSyntax { - [self.socket off:@"test"]; + [self.socket offWithEvent:@"test"]; } @end diff --git a/SocketIO-MacTests/SocketParserTest.swift b/SocketIO-MacTests/SocketParserTest.swift index 7cbe982..44a8fca 100644 --- a/SocketIO-MacTests/SocketParserTest.swift +++ b/SocketIO-MacTests/SocketParserTest.swift @@ -30,72 +30,72 @@ class SocketParserTest: XCTestCase { func testDisconnect() { let message = "1" - validateParseResult(message) + validateParseResult(message: message) } func testConnect() { let message = "0" - validateParseResult(message) + validateParseResult(message: message) } func testDisconnectNameSpace() { let message = "1/swift" - validateParseResult(message) + validateParseResult(message: message) } func testConnecttNameSpace() { let message = "0/swift" - validateParseResult(message) + validateParseResult(message: message) } func testIdEvent() { let message = "25[\"test\"]" - validateParseResult(message) + validateParseResult(message: message) } func testBinaryPlaceholderAsString() { let message = "2[\"test\",\"~~0\"]" - validateParseResult(message) + validateParseResult(message: message) } func testNameSpaceArrayParse() { let message = "2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]" - validateParseResult(message) + validateParseResult(message: message) } func testNameSpaceArrayAckParse() { let message = "3/swift,0[[\"test3\",\"test4\"]]" - validateParseResult(message) + validateParseResult(message: message) } func testNameSpaceBinaryEventParse() { let message = "51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]" - validateParseResult(message) + validateParseResult(message: message) } func testNameSpaceBinaryAckParse() { let message = "61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]" - validateParseResult(message) + validateParseResult(message: message) } func testNamespaceErrorParse() { let message = "4/swift," - validateParseResult(message) + validateParseResult(message: message) } func testErrorTypeString() { let message = "4\"ERROR\"" - validateParseResult(message) + validateParseResult(message: message) } func testErrorTypeDictionary() { let message = "4{\"test\":2}" - validateParseResult(message) + validateParseResult(message: message) } func testErrorTypeInt() { let message = "41" - validateParseResult(message) + validateParseResult(message: message) } func testInvalidInput() { @@ -110,7 +110,7 @@ class SocketParserTest: XCTestCase { func testGenericParser() { var parser = SocketStringReader(message: "61-/swift,") - XCTAssertEqual(parser.read(1), "6") + XCTAssertEqual(parser.read(length: 1), "6") XCTAssertEqual(parser.currentCharacter, "1") XCTAssertEqual(parser.readUntilStringOccurence("-"), "1") XCTAssertEqual(parser.currentCharacter, "/") diff --git a/SocketIO-MacTests/SocketSideEffectTest.swift b/SocketIO-MacTests/SocketSideEffectTest.swift index 2f3db98..a536693 100644 --- a/SocketIO-MacTests/SocketSideEffectTest.swift +++ b/SocketIO-MacTests/SocketSideEffectTest.swift @@ -10,8 +10,8 @@ import XCTest @testable import SocketIOClientSwift class SocketSideEffectTest: XCTestCase { - let data = "test".data(usingEncoding: NSUTF8StringEncoding)! - let data2 = "test2".data(usingEncoding: NSUTF8StringEncoding)! + let data = "test".data(using: NSUTF8StringEncoding)! + let data2 = "test2".data(using: NSUTF8StringEncoding)! private var socket: SocketIOClient! override func setUp() { @@ -83,7 +83,7 @@ class SocketSideEffectTest: XCTestCase { func testHandleOnceEvent() { let expect = expectation(withDescription: "handled event") - socket.once("test") {data, ack in + socket.once(event: "test") {data, ack in XCTAssertEqual(data[0] as? String, "hello world") XCTAssertEqual(self.socket.testHandlers.count, 0) expect.fulfill() @@ -98,7 +98,7 @@ class SocketSideEffectTest: XCTestCase { XCTAssertEqual(socket.testHandlers.count, 1) socket.on("test") {data, ack in } XCTAssertEqual(socket.testHandlers.count, 2) - socket.off("test") + socket.off(event: "test") XCTAssertEqual(socket.testHandlers.count, 0) } diff --git a/Source/SocketAckEmitter.swift b/Source/SocketAckEmitter.swift index aab2c84..980a678 100644 --- a/Source/SocketAckEmitter.swift +++ b/Source/SocketAckEmitter.swift @@ -33,13 +33,13 @@ public final class SocketAckEmitter : NSObject { self.ackNum = ackNum } - public func with(items: AnyObject...) { + public func with(_ items: AnyObject...) { guard ackNum != -1 else { return } socket.emitAck(ackNum, with: items) } - public func with(items: [AnyObject]) { + public func with(_ items: [AnyObject]) { guard ackNum != -1 else { return } socket.emitAck(ackNum, with: items) diff --git a/Source/SocketAckManager.swift b/Source/SocketAckManager.swift index 972e1da..341013c 100644 --- a/Source/SocketAckManager.swift +++ b/Source/SocketAckManager.swift @@ -52,11 +52,11 @@ private func ==(lhs: SocketAck, rhs: SocketAck) -> Bool { struct SocketAckManager { private var acks = Set(minimumCapacity: 1) - mutating func addAck(ack: Int, callback: AckCallback) { + mutating func addAck(_ ack: Int, callback: AckCallback) { acks.insert(SocketAck(ack: ack, callback: callback)) } - mutating func executeAck(ack: Int, items: [AnyObject]) { + mutating func executeAck(_ ack: Int, items: [AnyObject]) { let callback = acks.remove(SocketAck(ack: ack)) dispatch_async(dispatch_get_main_queue()) { @@ -64,7 +64,7 @@ struct SocketAckManager { } } - mutating func timeoutAck(ack: Int) { + mutating func timeoutAck(_ ack: Int) { let callback = acks.remove(SocketAck(ack: ack)) dispatch_async(dispatch_get_main_queue()) { diff --git a/Source/SocketEngine.swift b/Source/SocketEngine.swift index 978680d..1583792 100644 --- a/Source/SocketEngine.swift +++ b/Source/SocketEngine.swift @@ -128,8 +128,8 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe stopPolling() } - private func checkAndHandleEngineError(msg: String) { - guard let stringData = msg.data(usingEncoding: NSUTF8StringEncoding, + private func checkAndHandleEngineError(_ msg: String) { + guard let stringData = msg.data(using: NSUTF8StringEncoding, allowLossyConversion: false) else { return } do { @@ -140,28 +140,28 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe switch code { case 0: // Unknown transport - didError(error) + didError(error: error) case 1: // Unknown sid. - didError(error) + didError(error: error) case 2: // Bad handshake request - didError(error) + didError(error: error) case 3: // Bad request - didError(error) + didError(error: error) default: - didError(error) + didError(error: error) } } } catch { - didError("Got unknown error from server \(msg)") + didError(error: "Got unknown error from server \(msg)") } } - private func checkIfMessageIsBase64Binary(message: String) -> Bool { + private func checkIfMessageIsBase64Binary(_ message: String) -> Bool { if message.hasPrefix("b4") { // binary in base64 string let noPrefix = message[message.startIndex.advanced(by: 2).. (NSURL, NSURL) { @@ -267,12 +267,12 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe public func didError(error: String) { DefaultSocketLogger.Logger.error(error, type: logType) - client?.engineDidError(error) - disconnect(error) + client?.engineDidError(reason: error) + disconnect(reason: error) } public func disconnect(reason: String) { - func postSendClose(data: NSData?, _ res: NSURLResponse?, _ err: NSError?) { + func postSendClose(_ data: NSData?, _ res: NSURLResponse?, _ err: NSError?) { sid = "" closed = true invalidated = true @@ -280,7 +280,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe ws?.disconnect() stopPolling() - client?.engineDidClose(reason) + client?.engineDidClose(reason: reason) } DefaultSocketLogger.Logger.log("Engine is being closed.", type: logType) @@ -298,7 +298,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe dispatch_sync(emitQueue) { self.postWait.append(String(SocketEnginePacketType.close.rawValue)) let req = self.createRequestForPostWithPostWait() - self.doRequest(req, callbackWith: postSendClose) + self.doRequest(for: req, callbackWith: postSendClose) } } } @@ -339,17 +339,17 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe guard let ws = self.ws else { return } for msg in postWait { - ws.writeString(fixDoubleUTF8(msg)) + ws.writeString(str: fixDoubleUTF8(string: msg)) } postWait.removeAll(keepingCapacity: true) } private func handleClose(reason: String) { - client?.engineDidClose(reason) + client?.engineDidClose(reason: reason) } - private func handleMessage(message: String) { + private func handleMessage(_ message: String) { client?.parseEngineMessage(message) } @@ -357,8 +357,8 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe doPoll() } - private func handleOpen(openData: String) { - let mesData = openData.data(usingEncoding: NSUTF8StringEncoding, allowLossyConversion: false)! + private func handleOpen(openMessage: String) { + let mesData = openMessage.data(using: NSUTF8StringEncoding, allowLossyConversion: false)! do { let json = try NSJSONSerialization.jsonObject(with: mesData, options: NSJSONReadingOptions.allowFragments) as? NSDictionary @@ -389,10 +389,10 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe doPoll() } - client?.engineDidOpen?("Connect") + client?.engineDidOpen?(reason: "Connect") } } catch { - didError("Error parsing open packet") + didError(error: "Error parsing open packet") return } } @@ -406,12 +406,12 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } } - public func parseEngineData(data: NSData) { + public func parseEngineData(_ data: NSData) { DefaultSocketLogger.Logger.log("Got binary data: %@", type: "SocketEngine", args: data) client?.parseEngineBinaryData(data.subdata(with: NSMakeRange(1, data.length - 1))) } - public func parseEngineMessage(message: String, fromPolling: Bool) { + public func parseEngineMessage(_ message: String, fromPolling: Bool) { DefaultSocketLogger.Logger.log("Got message: %@", type: logType, args: message) let reader = SocketStringReader(message: message) @@ -426,7 +426,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } if fromPolling && type != .noop && doubleEncodeUTF8 { - fixedString = fixDoubleUTF8(message) + fixedString = fixDoubleUTF8(string: message) } else { fixedString = message } @@ -437,11 +437,11 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe case .noop: handleNOOP() case .pong: - handlePong(fixedString) + handlePong(pongMessage: fixedString) case .open: - handleOpen(fixedString[fixedString.startIndex.successor().. pongsMissedMax { - client?.engineDidClose("Ping timeout") + client?.engineDidClose(reason: "Ping timeout") return } @@ -498,7 +498,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } /// Write a message, independent of transport. - public func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData]) { + public func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [NSData]) { dispatch_async(emitQueue) { guard self.connected else { return } @@ -532,7 +532,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe probing = false if closed { - client?.engineDidClose("Disconnect") + client?.engineDidClose(reason: "Disconnect") return } @@ -543,10 +543,10 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe let reason = error?.localizedDescription ?? "Socket Disconnected" if error != nil { - didError(reason) + didError(error: reason) } - client?.engineDidClose(reason) + client?.engineDidClose(reason: reason) } else { flushProbeWait() } diff --git a/Source/SocketEngineClient.swift b/Source/SocketEngineClient.swift index a1db7f6..76f22de 100644 --- a/Source/SocketEngineClient.swift +++ b/Source/SocketEngineClient.swift @@ -29,6 +29,6 @@ import Foundation func engineDidError(reason: String) func engineDidClose(reason: String) optional func engineDidOpen(reason: String) - func parseEngineMessage(msg: String) - func parseEngineBinaryData(data: NSData) + func parseEngineMessage(_ msg: String) + func parseEngineBinaryData(_ data: NSData) } diff --git a/Source/SocketEnginePollable.swift b/Source/SocketEnginePollable.swift index 5fe3c1c..022d8f9 100644 --- a/Source/SocketEnginePollable.swift +++ b/Source/SocketEnginePollable.swift @@ -39,13 +39,13 @@ public protocol SocketEnginePollable : SocketEngineSpec { var waitingForPost: Bool { get set } func doPoll() - func sendPollMessage(message: String, withType type: SocketEnginePacketType, withData datas: [NSData]) + func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [NSData]) func stopPolling() } // Default polling methods extension SocketEnginePollable { - private func addHeaders(req: NSMutableURLRequest) { + private func addHeaders(for req: NSMutableURLRequest) { if cookies != nil { let headers = NSHTTPCookie.requestHeaderFields(with: cookies!) req.allHTTPHeaderFields = headers @@ -73,12 +73,12 @@ extension SocketEnginePollable { let req = NSMutableURLRequest(url: urlPollingWithSid) - addHeaders(req) + addHeaders(for: req) req.httpMethod = "POST" req.setValue("text/plain; charset=UTF-8", forHTTPHeaderField: "Content-Type") - let postData = postStr.data(usingEncoding: NSUTF8StringEncoding, + let postData = postStr.data(using: NSUTF8StringEncoding, allowLossyConversion: false)! req.httpBody = postData @@ -95,11 +95,11 @@ extension SocketEnginePollable { waitingForPoll = true let req = NSMutableURLRequest(url: urlPollingWithSid) - addHeaders(req) - doLongPoll(req) + addHeaders(for: req) + doLongPoll(for: req) } - func doRequest(req: NSURLRequest, callbackWith callback: (NSData?, NSURLResponse?, NSError?) -> Void) { + func doRequest(for req: NSURLRequest, callbackWith callback: (NSData?, NSURLResponse?, NSError?) -> Void) { if !polling || closed || invalidated || fastUpgrade { DefaultSocketLogger.Logger.error("Tried to do polling request when not supposed to", type: "SocketEnginePolling") return @@ -110,15 +110,15 @@ extension SocketEnginePollable { session?.dataTask(with: req, completionHandler: callback).resume() } - func doLongPoll(req: NSURLRequest) { - doRequest(req) {[weak self] data, res, err in + func doLongPoll(for req: NSURLRequest) { + doRequest(for: req) {[weak self] data, res, err in guard let this = self where this.polling else { return } if err != nil || data == nil { DefaultSocketLogger.Logger.error(err?.localizedDescription ?? "Error", type: "SocketEnginePolling") if this.polling { - this.didError(err?.localizedDescription ?? "Error") + this.didError(error: err?.localizedDescription ?? "Error") } return @@ -156,14 +156,14 @@ extension SocketEnginePollable { DefaultSocketLogger.Logger.log("POSTing", type: "SocketEnginePolling") - doRequest(req) {[weak self] data, res, err in + doRequest(for: req) {[weak self] data, res, err in guard let this = self else { return } if err != nil { DefaultSocketLogger.Logger.error(err?.localizedDescription ?? "Error", type: "SocketEnginePolling") if this.polling { - this.didError(err?.localizedDescription ?? "Error") + this.didError(error: err?.localizedDescription ?? "Error") } return @@ -180,14 +180,14 @@ extension SocketEnginePollable { } } - func parsePollingMessage(str: String) { + func parsePollingMessage(_ str: String) { guard str.characters.count != 1 else { return } var reader = SocketStringReader(message: str) while reader.hasNext { if let n = Int(reader.readUntilStringOccurence(":")) { - let str = reader.read(n) + let str = reader.read(length: n) dispatch_async(handleQueue) { self.parseEngineMessage(str, fromPolling: true) @@ -203,12 +203,12 @@ extension SocketEnginePollable { /// Send polling message. /// Only call on emitQueue - public func sendPollMessage(message: String, withType type: SocketEnginePacketType, withData datas: [NSData]) { + public func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [NSData]) { DefaultSocketLogger.Logger.log("Sending poll: %@ as type: %@", type: "SocketEnginePolling", args: message, type.rawValue) let fixedMessage: String if doubleEncodeUTF8 { - fixedMessage = doubleEncodeUTF8(message) + fixedMessage = doubleEncodeUTF8(string: message) } else { fixedMessage = message } @@ -218,7 +218,7 @@ extension SocketEnginePollable { postWait.append(strMsg) for data in datas { - if case let .Right(bin) = createBinaryDataForSend(data) { + if case let .Right(bin) = createBinaryDataForSend(using: data) { postWait.append(bin) } } diff --git a/Source/SocketEngineSpec.swift b/Source/SocketEngineSpec.swift index 418400d..f1224bd 100644 --- a/Source/SocketEngineSpec.swift +++ b/Source/SocketEngineSpec.swift @@ -55,9 +55,9 @@ import Foundation func disconnect(reason: String) func doFastUpgrade() func flushWaitingForPostToWebSocket() - func parseEngineData(data: NSData) - func parseEngineMessage(message: String, fromPolling: Bool) - func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData]) + func parseEngineData(_ data: NSData) + func parseEngineMessage(_ message: String, fromPolling: Bool) + func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [NSData]) } extension SocketEngineSpec { @@ -75,7 +75,7 @@ extension SocketEngineSpec { return com.url! } - func createBinaryDataForSend(data: NSData) -> Either { + func createBinaryDataForSend(using data: NSData) -> Either { if websocket { var byteArray = [UInt8](repeating: 0x4, count: 1) let mutData = NSMutableData(bytes: &byteArray, length: 1) @@ -91,7 +91,7 @@ extension SocketEngineSpec { } func doubleEncodeUTF8(string: String) -> String { - if let latin1 = string.data(usingEncoding: NSUTF8StringEncoding), + if let latin1 = string.data(using: NSUTF8StringEncoding), utf8 = NSString(data: latin1, encoding: NSISOLatin1StringEncoding) { return utf8 as String } else { @@ -100,7 +100,7 @@ extension SocketEngineSpec { } func fixDoubleUTF8(string: String) -> String { - if let utf8 = string.data(usingEncoding: NSISOLatin1StringEncoding), + if let utf8 = string.data(using: NSISOLatin1StringEncoding), latin1 = NSString(data: utf8, encoding: NSUTF8StringEncoding) { return latin1 as String } else { @@ -109,7 +109,7 @@ extension SocketEngineSpec { } /// Send an engine message (4) - func send(msg: String, withData datas: [NSData]) { + func send(_ msg: String, withData datas: [NSData]) { write(msg, withType: .message, withData: datas) } } diff --git a/Source/SocketEngineWebsocket.swift b/Source/SocketEngineWebsocket.swift index d6c777a..1360a67 100644 --- a/Source/SocketEngineWebsocket.swift +++ b/Source/SocketEngineWebsocket.swift @@ -29,7 +29,7 @@ import Foundation public protocol SocketEngineWebsocket : SocketEngineSpec, WebSocketDelegate { var ws: WebSocket? { get } - func sendWebSocketMessage(str: String, withType type: SocketEnginePacketType, withData datas: [NSData]) + func sendWebSocketMessage(_ str: String, withType type: SocketEnginePacketType, withData datas: [NSData]) } // WebSocket methods @@ -42,14 +42,14 @@ extension SocketEngineWebsocket { /// Send message on WebSockets /// Only call on emitQueue - public func sendWebSocketMessage(str: String, withType type: SocketEnginePacketType, withData datas: [NSData]) { + public func sendWebSocketMessage(_ str: String, withType type: SocketEnginePacketType, withData datas: [NSData]) { DefaultSocketLogger.Logger.log("Sending ws: %@ as type: %@", type: "SocketEngine", args: str, type.rawValue) - ws?.writeString("\(type.rawValue)\(str)") + ws?.writeString(str: "\(type.rawValue)\(str)") for data in datas { - if case let .Left(bin) = createBinaryDataForSend(data) { - ws?.writeData(bin) + if case let .Left(bin) = createBinaryDataForSend(using: data) { + ws?.writeData(data: bin) } } } diff --git a/Source/SocketIOClient.swift b/Source/SocketIOClient.swift index 9e3f3d4..cc5fa0e 100644 --- a/Source/SocketIOClient.swift +++ b/Source/SocketIOClient.swift @@ -71,7 +71,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable self.socketURL = socketURL if socketURL.absoluteString.hasPrefix("https://") { - self.options.insertIgnore(.secure(true)) + self.options.insertIgnore(element: .secure(true)) } for option in options { @@ -97,7 +97,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } } - self.options.insertIgnore(.path("/socket.io/")) + self.options.insertIgnore(element: .path("/socket.io/")) super.init() } @@ -110,7 +110,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable deinit { DefaultSocketLogger.Logger.log("Client is being released", type: logType) - engine?.disconnect("Client Deinit") + engine?.disconnect(reason: "Client Deinit") } private func addEngine() -> SocketEngineSpec { @@ -127,7 +127,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } /// Connect to the server. If we aren't connected after timeoutAfter, call handler - public func connect(timeoutAfter timeoutAfter: Int, handleWith handler: (() -> Void)?) { + public func connect(timeoutAfter: Int, handleWith handler: (() -> Void)?) { assert(timeoutAfter >= 0, "Invalid timeout: \(timeoutAfter)") guard status != .connected else { @@ -151,7 +151,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable dispatch_after(time, handleQueue) {[weak self] in if let this = self where this.status != .connected && this.status != .closed { this.status = .closed - this.engine?.disconnect("Connect timeout") + this.engine?.disconnect(reason: "Connect timeout") handler?() } @@ -164,7 +164,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable return {[weak self, ack = currentAck] timeout, callback in if let this = self { this.ackHandlers.addAck(ack, callback: callback) - this._emit(items, ack: ack) + this._emit(data: items, ack: ack) if timeout != 0 { let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC)) @@ -195,7 +195,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable reconnects = false // Make sure the engine is actually dead. - engine?.disconnect(reason) + engine?.disconnect(reason: reason) handleEvent("disconnect", data: [reason], isInternalMessage: true) } @@ -205,33 +205,33 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable DefaultSocketLogger.Logger.log("Closing socket", type: logType) reconnects = false - didDisconnect("Disconnect") + didDisconnect(reason: "Disconnect") } /// Send a message to the server - public func emit(event: String, _ items: AnyObject...) { + public func emit(_ event: String, _ items: AnyObject...) { emit(event, with: items) } /// Same as emit, but meant for Objective-C - public func emit(event: String, with items: [AnyObject]) { + public func emit(_ event: String, with items: [AnyObject]) { guard status == .connected else { handleEvent("error", data: ["Tried emitting \(event) when not connected"], isInternalMessage: true) return } - _emit([event] + items) + _emit(data: [event] + items) } /// Sends a message to the server, requesting an ack. Use the onAck method of SocketAckHandler to add /// an ack. - public func emitWithAck(event: String, _ items: AnyObject...) -> OnAckCallback { + public func emitWithAck(_ event: String, _ items: AnyObject...) -> OnAckCallback { return emitWithAck(event, with: items) } /// Same as emitWithAck, but for Objective-C - public func emitWithAck(event: String, with items: [AnyObject]) -> OnAckCallback { - return createOnAck([event] + items) + public func emitWithAck(_ event: String, with items: [AnyObject]) -> OnAckCallback { + return createOnAck(items: [event] + items) } private func _emit(data: [AnyObject], ack: Int? = nil) { @@ -241,7 +241,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable return } - let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: self.nsp, ack: false) + let packet = SocketPacket.packetFromEmit(items: data, id: ack ?? -1, nsp: self.nsp, ack: false) let str = packet.packetString DefaultSocketLogger.Logger.log("Emitting: %@", type: self.logType, args: str) @@ -251,10 +251,10 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } // If the server wants to know that the client received data - func emitAck(ack: Int, with items: [AnyObject]) { + func emitAck(_ ack: Int, with items: [AnyObject]) { dispatch_async(emitQueue) { if self.status == .connected { - let packet = SocketPacket.packetFromEmit(items, id: ack ?? -1, nsp: self.nsp, ack: true) + let packet = SocketPacket.packetFromEmit(items: items, id: ack ?? -1, nsp: self.nsp, ack: true) let str = packet.packetString DefaultSocketLogger.Logger.log("Emitting Ack: %@", type: self.logType, args: str) @@ -272,7 +272,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } if status == .closed || !reconnects { - didDisconnect(reason) + didDisconnect(reason: reason) } else if !reconnecting { reconnecting = true tryReconnect(reason: reason) @@ -287,7 +287,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } // Called when the socket gets an ack for something it sent - func handleAck(ack: Int, data: [AnyObject]) { + func handleAck(_ ack: Int, data: [AnyObject]) { guard status == .connected else { return } DefaultSocketLogger.Logger.log("Handling ack: %@ with data: %@", type: logType, args: ack, data ?? "") @@ -296,7 +296,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } /// Causes an event to be handled. Only use if you know what you're doing. - public func handleEvent(event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int = -1) { + public func handleEvent(_ event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int = -1) { guard status == .connected || isInternalMessage else { return } @@ -307,7 +307,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable self.anyHandler?(SocketAnyEvent(event: event, items: data)) for handler in self.handlers where handler.event == event { - handler.executeCallback(data, withAck: ack, withSocket: self) + handler.executeCallback(items: data, withAck: ack, withSocket: self) } } } @@ -321,7 +321,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } /// Joins namespace - public func joinNamespace(namespace: String) { + public func joinNamespace(_ namespace: String) { nsp = namespace if nsp != "/" { @@ -338,7 +338,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } /// Removes a handler with the specified UUID gotten from an `on` or `once` - public func off(id id: NSUUID) { + public func off(id: NSUUID) { DefaultSocketLogger.Logger.log("Removing handler with id: %@", type: logType, args: id) handlers = handlers.filter { $0.id != id } @@ -346,7 +346,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable /// Adds a handler for an event. /// Returns: A unique id for the handler - public func on(event: String, callback: NormalCallback) -> NSUUID { + public func on(_ event: String, callback: NormalCallback) -> NSUUID { DefaultSocketLogger.Logger.log("Adding handler for event: %@", type: logType, args: event) let handler = SocketEventHandler(event: event, id: NSUUID(), callback: callback) @@ -378,7 +378,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable anyHandler = handler } - public func parseEngineMessage(msg: String) { + public func parseEngineMessage(_ msg: String) { DefaultSocketLogger.Logger.log("Should parse message: %@", type: "SocketIOClient", args: msg) dispatch_async(parseQueue) { @@ -386,7 +386,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } } - public func parseEngineBinaryData(data: NSData) { + public func parseEngineBinaryData(_ data: NSData) { dispatch_async(parseQueue) { self.parseBinaryData(data) } @@ -396,7 +396,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable public func reconnect() { guard !reconnecting else { return } - engine?.disconnect("manual reconnect") + engine?.disconnect(reason: "manual reconnect") } /// Removes all handlers. @@ -405,7 +405,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable handlers.removeAll(keepingCapacity: false) } - private func tryReconnect(reason reason: String) { + private func tryReconnect(reason: String) { if reconnecting { DefaultSocketLogger.Logger.log("Starting reconnect", type: logType) handleEvent("reconnect", data: [reason], isInternalMessage: true) @@ -420,7 +420,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts || !reconnects { - return didDisconnect("Reconnect Failed") + return didDisconnect(reason: "Reconnect Failed") } DefaultSocketLogger.Logger.log("Trying to reconnect", type: logType) @@ -451,6 +451,6 @@ extension SocketIOClient { } func emitTest(event: String, _ data: AnyObject...) { - self._emit([event] + data) + self._emit(data: [event] + data) } } diff --git a/Source/SocketIOClientOption.swift b/Source/SocketIOClientOption.swift index 70d572b..6142e88 100644 --- a/Source/SocketIOClientOption.swift +++ b/Source/SocketIOClientOption.swift @@ -210,8 +210,8 @@ extension NSDictionary { var options = Set() for (rawKey, value) in self { - if let key = rawKey as? String, opt = NSDictionary.keyValueToSocketIOClientOption(key, value: value) { - options.insertIgnore(opt) + if let key = rawKey as? String, opt = NSDictionary.keyValueToSocketIOClientOption(key: key, value: value) { + options.insertIgnore(element: opt) } } diff --git a/Source/SocketIOClientSpec.swift b/Source/SocketIOClientSpec.swift index 8b33cf9..f3dd863 100644 --- a/Source/SocketIOClientSpec.swift +++ b/Source/SocketIOClientSpec.swift @@ -29,9 +29,9 @@ protocol SocketIOClientSpec : class { func didConnect() func didDisconnect(reason: String) func didError(reason: String) - func handleAck(ack: Int, data: [AnyObject]) - func handleEvent(event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int) - func joinNamespace(namespace: String) + func handleAck(_ ack: Int, data: [AnyObject]) + func handleEvent(_ event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int) + func joinNamespace(_ namespace: String) } extension SocketIOClientSpec { diff --git a/Source/SocketLogger.swift b/Source/SocketLogger.swift index c0f205a..bc4cf37 100644 --- a/Source/SocketLogger.swift +++ b/Source/SocketLogger.swift @@ -29,22 +29,22 @@ public protocol SocketLogger : class { var log: Bool { get set } /// Normal log messages - func log(message: String, type: String, args: AnyObject...) + func log(_ message: String, type: String, args: AnyObject...) /// Error Messages - func error(message: String, type: String, args: AnyObject...) + func error(_ message: String, type: String, args: AnyObject...) } public extension SocketLogger { - func log(message: String, type: String, args: AnyObject...) { + func log(_ message: String, type: String, args: AnyObject...) { abstractLog("LOG", message: message, type: type, args: args) } - func error(message: String, type: String, args: AnyObject...) { + func error(_ message: String, type: String, args: AnyObject...) { abstractLog("ERROR", message: message, type: type, args: args) } - private func abstractLog(logType: String, message: String, type: String, args: [AnyObject]) { + private func abstractLog(_ logType: String, message: String, type: String, args: [AnyObject]) { guard log else { return } let newArgs = args.map({arg -> CVarArg in String(arg)}) diff --git a/Source/SocketPacket.swift b/Source/SocketPacket.swift index 0cc436e..8008909 100644 --- a/Source/SocketPacket.swift +++ b/Source/SocketPacket.swift @@ -71,7 +71,7 @@ struct SocketPacket { self.binary = binary } - mutating func addData(data: NSData) -> Bool { + mutating func addData(_ data: NSData) -> Bool { if placeholders == binary.count { return true } @@ -86,7 +86,7 @@ struct SocketPacket { } } - private func completeMessage(message: String) -> String { + private func completeMessage(_ message: String) -> String { let restOfMessage: String if data.count == 0 { @@ -191,7 +191,7 @@ struct SocketPacket { // If object is a collection it will recurse // Returns the object if it is not a placeholder string or the corresponding // binary data - private func _fillInPlaceholders(object: AnyObject) -> AnyObject { + private func _fillInPlaceholders(_ object: AnyObject) -> AnyObject { switch object { case let string as String where string["~~(\\d)"].groups() != nil: return binary[Int(string["~~(\\d)"].groups()![1])!] @@ -226,7 +226,7 @@ extension SocketPacket { static func packetFromEmit(items: [AnyObject], id: Int, nsp: String, ack: Bool) -> SocketPacket { let (parsedData, binary) = deconstructData(items) - let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData, + let packet = SocketPacket(type: findType(binCount: binary.count, ack: ack), data: parsedData, id: id, nsp: nsp, placeholders: -1, binary: binary) return packet @@ -235,7 +235,7 @@ extension SocketPacket { private extension SocketPacket { // Recursive function that looks for NSData in collections - static func shred(data: AnyObject, binary: inout [NSData]) -> AnyObject { + static func shred(_ data: AnyObject, binary: inout [NSData]) -> AnyObject { let placeholder = ["_placeholder": true, "num": binary.count] switch data { @@ -256,7 +256,7 @@ private extension SocketPacket { // Removes binary data from emit data // Returns a type containing the de-binaryed data and the binary - static func deconstructData(data: [AnyObject]) -> ([AnyObject], [NSData]) { + static func deconstructData(_ data: [AnyObject]) -> ([AnyObject], [NSData]) { var binary = [NSData]() return (data.map({shred($0, binary: &binary)}), binary) diff --git a/Source/SocketParsable.swift b/Source/SocketParsable.swift index a890fe9..2f93895 100644 --- a/Source/SocketParsable.swift +++ b/Source/SocketParsable.swift @@ -23,16 +23,16 @@ import Foundation protocol SocketParsable : SocketIOClientSpec { - func parseBinaryData(data: NSData) - func parseSocketMessage(message: String) + func parseBinaryData(_ data: NSData) + func parseSocketMessage(_ message: String) } extension SocketParsable { - private func isCorrectNamespace(nsp: String) -> Bool { + private func isCorrectNamespace(_ nsp: String) -> Bool { return nsp == self.nsp } - private func handleConnect(p: SocketPacket) { + private func handleConnect(_ p: SocketPacket) { if p.nsp == "/" && nsp != "/" { joinNamespace(nsp) } else if p.nsp != "/" && nsp == "/" { @@ -42,7 +42,7 @@ extension SocketParsable { } } - private func handlePacket(pack: SocketPacket) { + private func handlePacket(_ pack: SocketPacket) { switch pack.type { case .Event where isCorrectNamespace(pack.nsp): handleEvent(pack.event, data: pack.args, isInternalMessage: false, withAck: pack.id) @@ -55,7 +55,7 @@ extension SocketParsable { case .Connect: handleConnect(pack) case .Disconnect: - didDisconnect("Got Disconnect") + didDisconnect(reason: "Got Disconnect") case .Error: handleEvent("error", data: pack.data, isInternalMessage: true, withAck: pack.id) default: @@ -64,10 +64,10 @@ extension SocketParsable { } /// Parses a messsage from the engine. Returning either a string error or a complete SocketPacket - func parseString(message: String) -> Either { + func parseString(_ message: String) -> Either { var parser = SocketStringReader(message: message) - guard let type = SocketPacket.PacketType(rawValue: Int(parser.read(1)) ?? -1) else { + guard let type = SocketPacket.PacketType(rawValue: Int(parser.read(length: 1)) ?? -1) else { return .Left("Invalid packet type") } @@ -98,14 +98,14 @@ extension SocketParsable { var idString = "" if type == .Error { - parser.advanceIndexBy(-1) + parser.advance(by: -1) } while parser.hasNext && type != .Error { - if let int = Int(parser.read(1)) { + if let int = Int(parser.read(length: 1)) { idString += String(int) } else { - parser.advanceIndexBy(-2) + parser.advance(by: -2) break } } @@ -129,8 +129,8 @@ extension SocketParsable { } // Parses data for events - private func parseData(data: String) -> Either { - let stringData = data.data(usingEncoding: NSUTF8StringEncoding, allowLossyConversion: false) + private func parseData(_ data: String) -> Either { + let stringData = data.data(using: NSUTF8StringEncoding, allowLossyConversion: false) do { if let arr = try NSJSONSerialization.jsonObject(with: stringData!, options: NSJSONReadingOptions.mutableContainers) as? [AnyObject] { @@ -144,7 +144,7 @@ extension SocketParsable { } // Parses messages recieved - func parseSocketMessage(message: String) { + func parseSocketMessage(_ message: String) { guard !message.isEmpty else { return } DefaultSocketLogger.Logger.log("Parsing %@", type: "SocketParser", args: message) @@ -158,7 +158,7 @@ extension SocketParsable { } } - func parseBinaryData(data: NSData) { + func parseBinaryData(_ data: NSData) { guard !waitingPackets.isEmpty else { DefaultSocketLogger.Logger.error("Got data when not remaking packet", type: "SocketParser") return diff --git a/Source/SocketStringReader.swift b/Source/SocketStringReader.swift index 26883ac..7bea0f4 100644 --- a/Source/SocketStringReader.swift +++ b/Source/SocketStringReader.swift @@ -38,18 +38,18 @@ struct SocketStringReader { currentIndex = message.startIndex } - mutating func advanceIndexBy(n: Int) { - currentIndex = currentIndex.advanced(by: n) + mutating func advance(by: Int) { + currentIndex = currentIndex.advanced(by: by) } - mutating func read(readLength: Int) -> String { - let readString = message[currentIndex.. String { + let readString = message[currentIndex.. String { + mutating func readUntilStringOccurence(_ string: String) -> String { let substring = message[currentIndex.. String { - return read(currentIndex.distance(to: message.endIndex)) + return read(length: currentIndex.distance(to: message.endIndex)) } } diff --git a/Source/SwiftRegex.swift b/Source/SwiftRegex.swift index 8668179..67c6f13 100644 --- a/Source/SwiftRegex.swift +++ b/Source/SwiftRegex.swift @@ -31,7 +31,7 @@ internal final class SwiftRegex : NSObject, Boolean { NSRegularExpressionOptions.dotMatchesLineSeparators) self.regex = regex } catch let error as NSError { - SwiftRegex.failure("Error in pattern: \(pattern) - \(error)") + SwiftRegex.failure(message: "Error in pattern: \(pattern) - \(error)") self.regex = NSRegularExpression() } @@ -48,7 +48,7 @@ internal final class SwiftRegex : NSObject, Boolean { swiftRegexCache[pattern] = regex self.regex = regex } catch let error as NSError { - SwiftRegex.failure("Error in pattern: \(pattern) - \(error)") + SwiftRegex.failure(message: "Error in pattern: \(pattern) - \(error)") self.regex = NSRegularExpression() } } @@ -73,7 +73,7 @@ internal final class SwiftRegex : NSObject, Boolean { } func doesMatch(options: NSMatchingOptions!) -> Bool { - return range(options).location != NSNotFound + return range(options: options).location != NSNotFound } func range(options: NSMatchingOptions) -> NSRange { @@ -81,11 +81,11 @@ internal final class SwiftRegex : NSObject, Boolean { } func match(options: NSMatchingOptions) -> String? { - return substring(range(options)) + return substring(range: range(options: options)) } func groups() -> [String]? { - return groupsForMatch(regex.firstMatch(in: target as String, options: + return groupsForMatch(match: regex.firstMatch(in: target as String, options: NSMatchingOptions.withoutAnchoringBounds, range: targetRange)) } @@ -95,7 +95,7 @@ internal final class SwiftRegex : NSObject, Boolean { } var groups = [String]() for groupno in 0...regex.numberOfCaptureGroups { - if let group = substring(match.range(at: groupno)) { + if let group = substring(range: match.range(at: groupno)) { groups += [group] } else { groups += ["_"] // avoids bridging problems @@ -138,17 +138,17 @@ internal final class SwiftRegex : NSObject, Boolean { } func matches() -> [String] { - return matchResults().map( { self.substring($0.range)!}) + return matchResults().map( { self.substring(range: $0.range)!}) } func allGroups() -> [[String]?] { - return matchResults().map { self.groupsForMatch($0) } + return matchResults().map { self.groupsForMatch(match: $0) } } func dictionary(options: NSMatchingOptions!) -> Dictionary { var out = Dictionary() for match in matchResults() { - out[substring(match.range(at: 1))!] = substring(match.range(at: 2))! + out[substring(range: match.range(at: 1))!] = substring(range: match.range(at: 2))! } return out } @@ -160,18 +160,18 @@ internal final class SwiftRegex : NSObject, Boolean { regex.enumerateMatches(in: target as String, options: options, range: targetRange ) {match, flags, stop in let matchRange = match!.range - out.append( self.substring(NSRange(location:pos, length:matchRange.location-pos))!) + out.append( self.substring(range: NSRange(location:pos, length:matchRange.location-pos))!) out.append( substitution(match!, stop) ) pos = matchRange.location + matchRange.length } - out.append(substring(NSRange(location:pos, length:targetRange.length-pos))!) + out.append(substring(range: NSRange(location:pos, length:targetRange.length-pos))!) return out as String } var boolValue: Bool { - return doesMatch(nil) + return doesMatch(options: nil) } } @@ -188,7 +188,7 @@ extension String { } func <~ (left: SwiftRegex, right: String) -> String { - return left.substituteMatches({match, stop in + return left.substituteMatches(substitution: {match, stop in return left.regex.replacementString(for: match, in: left.target as String, offset: 0, template: right ) }, options: []) } diff --git a/Source/WebSocket.swift b/Source/WebSocket.swift index ed3642c..c91ec04 100644 --- a/Source/WebSocket.swift +++ b/Source/WebSocket.swift @@ -60,7 +60,10 @@ public class WebSocket : NSObject, NSStreamDelegate { case MessageTooBig = 1009 } + #if swift(>=3) + #else public static let ErrorDomain = "WebSocket" + #endif enum InternalErrorCode : UInt16 { // 0-999 WebSocket status codes not used @@ -167,18 +170,18 @@ public class WebSocket : NSObject, NSStreamDelegate { - Parameter forceTimeout: Maximum time to wait for the server to close the socket. */ - public func disconnect(forceTimeout forceTimeout: NSTimeInterval? = nil) { + public func disconnect(forceTimeout: NSTimeInterval? = nil) { switch forceTimeout { case .some(let seconds) where seconds > 0: dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))), queue) { [weak self] in - self?.disconnectStream(nil) + self?.disconnectStream(error: nil) } fallthrough case .none: - writeError(CloseCode.Normal.rawValue) + writeError(code: CloseCode.Normal.rawValue) default: - self.disconnectStream(nil) + self.disconnectStream(error: nil) break } } @@ -192,7 +195,7 @@ public class WebSocket : NSObject, NSStreamDelegate { */ public func writeString(str: String, completion: (() -> ())? = nil) { guard isConnected else { return } - dequeueWrite(str.data(usingEncoding: NSUTF8StringEncoding)!, code: .TextFrame, writeCompletion: completion) + dequeueWrite(data: str.data(using: NSUTF8StringEncoding)!, code: .TextFrame, writeCompletion: completion) } /** @@ -204,14 +207,14 @@ public class WebSocket : NSObject, NSStreamDelegate { */ public func writeData(data: NSData, completion: (() -> ())? = nil) { guard isConnected else { return } - dequeueWrite(data, code: .BinaryFrame, writeCompletion: completion) + dequeueWrite(data: data, code: .BinaryFrame, writeCompletion: completion) } //write a ping to the websocket. This sends it as a control frame. //yodel a sound to the planet. This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s public func writePing(data: NSData, completion: (() -> ())? = nil) { guard isConnected else { return } - dequeueWrite(data, code: .Ping, writeCompletion: completion) + dequeueWrite(data: data, code: .Ping, writeCompletion: completion) } //private method that starts the connection @@ -228,23 +231,23 @@ public class WebSocket : NSObject, NSStreamDelegate { port = 80 } } - addHeader(urlRequest, key: headerWSUpgradeName, val: headerWSUpgradeValue) - addHeader(urlRequest, key: headerWSConnectionName, val: headerWSConnectionValue) + addHeader(urlRequest: urlRequest, key: headerWSUpgradeName, val: headerWSUpgradeValue) + addHeader(urlRequest: urlRequest, key: headerWSConnectionName, val: headerWSConnectionValue) if let protocols = optionalProtocols { - addHeader(urlRequest, key: headerWSProtocolName, val: protocols.joined(separator: ",")) + addHeader(urlRequest: urlRequest, key: headerWSProtocolName, val: protocols.joined(separator: ",")) } - addHeader(urlRequest, key: headerWSVersionName, val: headerWSVersionValue) - addHeader(urlRequest, key: headerWSKeyName, val: generateWebSocketKey()) + addHeader(urlRequest: urlRequest, key: headerWSVersionName, val: headerWSVersionValue) + addHeader(urlRequest: urlRequest, key: headerWSKeyName, val: generateWebSocketKey()) if let origin = origin { - addHeader(urlRequest, key: headerOriginName, val: origin) + addHeader(urlRequest: urlRequest, key: headerOriginName, val: origin) } - addHeader(urlRequest, key: headerWSHostName, val: "\(url.host!):\(port!)") + addHeader(urlRequest: urlRequest, key: headerWSHostName, val: "\(url.host!):\(port!)") for (key,value) in headers { - addHeader(urlRequest, key: key, val: value) + addHeader(urlRequest: urlRequest, key: key, val: value) } if let cfHTTPMessage = CFHTTPMessageCopySerializedMessage(urlRequest) { let serializedRequest = cfHTTPMessage.takeRetainedValue() - initStreamsWithData(serializedRequest, Int(port!)) + initStreamsWithData(data: serializedRequest, Int(port!)) } } @@ -261,7 +264,7 @@ public class WebSocket : NSObject, NSStreamDelegate { let uni = UnicodeScalar(UInt32(97 + arc4random_uniform(25))) key += "\(Character(uni))" } - let data = key.data(usingEncoding: NSUTF8StringEncoding) + let data = key.data(using: NSUTF8StringEncoding) let baseKey = data?.base64EncodedString(NSDataBase64EncodingOptions(rawValue: 0)) return baseKey! } @@ -291,7 +294,7 @@ public class WebSocket : NSObject, NSStreamDelegate { outStream.setProperty(NSStreamNetworkServiceTypeVoIP, forKey: NSStreamNetworkServiceType) } if selfSignedSSL { - let settings: [NSObject: NSObject] = [kCFStreamSSLValidatesCertificateChain: NSNumber(bool:false), kCFStreamSSLPeerName: kCFNull] + let settings: [NSObject: NSObject] = [kCFStreamSSLValidatesCertificateChain: NSNumber(value: false), kCFStreamSSLPeerName: kCFNull] inStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as String) outStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as String) } @@ -332,7 +335,7 @@ public class WebSocket : NSObject, NSStreamDelegate { timeout -= 100 if timeout < 0 { self?.cleanupStream() - self?.doDisconnect(self?.errorWithDetail("write wait timed out", code: 2)) + self?.doDisconnect(error: self?.errorWithDetail(detail: "write wait timed out", code: 2)) return } else if outStream.streamError != nil { return //disconnectStream will be called. @@ -364,9 +367,9 @@ public class WebSocket : NSObject, NSStreamDelegate { processInputStream() } } else if eventCode == .errorOccurred { - disconnectStream(aStream.streamError) + disconnectStream(error: aStream.streamError) } else if eventCode == .endEncountered { - disconnectStream(nil) + disconnectStream(error: nil) } } //disconnect the stream object @@ -377,7 +380,7 @@ public class WebSocket : NSObject, NSStreamDelegate { writeQueue.cancelAllOperations() } cleanupStream() - doDisconnect(error) + doDisconnect(error: error) } private func cleanupStream() { @@ -426,9 +429,9 @@ public class WebSocket : NSObject, NSStreamDelegate { let buffer = UnsafePointer(work.bytes) let length = work.length if !connected { - processTCPHandshake(buffer, bufferLen: length) + processTCPHandshake(buffer: buffer, bufferLen: length) } else { - processRawMessage(buffer, bufferLen: length) + processRawMessage(buffer: buffer, bufferLen: length) } inputQueue = inputQueue.filter{$0 != data} dequeueInput() @@ -436,7 +439,7 @@ public class WebSocket : NSObject, NSStreamDelegate { //handle checking the inital connection status private func processTCPHandshake(buffer: UnsafePointer, bufferLen: Int) { - let code = processHTTP(buffer, bufferLen: bufferLen) + let code = processHTTP(buffer: buffer, bufferLen: bufferLen) switch code { case 0: connected = true @@ -444,13 +447,13 @@ public class WebSocket : NSObject, NSStreamDelegate { dispatch_async(queue) { [weak self] in guard let s = self else { return } s.onConnect?() - s.delegate?.websocketDidConnect(s) + s.delegate?.websocketDidConnect(socket: s) } case -1: fragBuffer = NSData(bytes: buffer, length: bufferLen) break //do nothing, we are going to collect more data default: - doDisconnect(errorWithDetail("Invalid HTTP upgrade", code: UInt16(code))) + doDisconnect(error: errorWithDetail(detail: "Invalid HTTP upgrade", code: UInt16(code))) } } ///Finds the HTTP Packet in the TCP stream, by looking for the CRLF. @@ -470,14 +473,14 @@ public class WebSocket : NSObject, NSStreamDelegate { } } if totalSize > 0 { - let code = validateResponse(buffer, bufferLen: totalSize) + let code = validateResponse(buffer: buffer, bufferLen: totalSize) if code != 0 { return code } totalSize += 1 //skip the last \n let restSize = bufferLen - totalSize if restSize > 0 { - processRawMessage((buffer+totalSize),bufferLen: restSize) + processRawMessage(buffer: (buffer+totalSize),bufferLen: restSize) } return 0 //success } @@ -546,10 +549,10 @@ public class WebSocket : NSObject, NSStreamDelegate { } response.bytesLeft -= len response.buffer?.append(NSData(bytes: buffer, length: len)) - processResponse(response) + processResponse(response: response) let offset = bufferLen - extra if extra > 0 { - processExtra((buffer+offset), bufferLen: extra) + processExtra(buffer: (buffer+offset), bufferLen: extra) } return } else { @@ -560,22 +563,22 @@ public class WebSocket : NSObject, NSStreamDelegate { var offset = 2 if (isMasked > 0 || (RSVMask & buffer[0]) > 0) && receivedOpcode != .Pong { let errCode = CloseCode.ProtocolError.rawValue - doDisconnect(errorWithDetail("masked and rsv data is not currently supported", code: errCode)) - writeError(errCode) + doDisconnect(error: errorWithDetail(detail: "masked and rsv data is not currently supported", code: errCode)) + writeError(code: errCode) return } let isControlFrame = (receivedOpcode == .ConnectionClose || receivedOpcode == .Ping) if !isControlFrame && (receivedOpcode != .BinaryFrame && receivedOpcode != .ContinueFrame && receivedOpcode != .TextFrame && receivedOpcode != .Pong) { let errCode = CloseCode.ProtocolError.rawValue - doDisconnect(errorWithDetail("unknown opcode: \(receivedOpcode)", code: errCode)) - writeError(errCode) + doDisconnect(error: errorWithDetail(detail: "unknown opcode: \(receivedOpcode)", code: errCode)) + writeError(code: errCode) return } if isControlFrame && isFin == 0 { let errCode = CloseCode.ProtocolError.rawValue - doDisconnect(errorWithDetail("control frames can't be fragmented", code: errCode)) - writeError(errCode) + doDisconnect(error: errorWithDetail(detail: "control frames can't be fragmented", code: errCode)) + writeError(code: errCode) return } if receivedOpcode == .ConnectionClose { @@ -583,7 +586,7 @@ public class WebSocket : NSObject, NSStreamDelegate { if payloadLen == 1 { code = CloseCode.ProtocolError.rawValue } else if payloadLen > 1 { - code = WebSocket.readUint16(buffer, offset: offset) + code = WebSocket.readUint16(buffer: buffer, offset: offset) if code < 1000 || (code > 1003 && code < 1007) || (code > 1011 && code < 3000) { code = CloseCode.ProtocolError.rawValue } @@ -599,20 +602,20 @@ public class WebSocket : NSObject, NSStreamDelegate { } } } - doDisconnect(errorWithDetail("connection closed by server", code: code)) - writeError(code) + doDisconnect(error: errorWithDetail(detail: "connection closed by server", code: code)) + writeError(code: code) return } if isControlFrame && payloadLen > 125 { - writeError(CloseCode.ProtocolError.rawValue) + writeError(code: CloseCode.ProtocolError.rawValue) return } var dataLength = UInt64(payloadLen) if dataLength == 127 { - dataLength = WebSocket.readUint64(buffer, offset: offset) + dataLength = WebSocket.readUint64(buffer: buffer, offset: offset) offset += sizeof(UInt64) } else if dataLength == 126 { - dataLength = UInt64(WebSocket.readUint16(buffer, offset: offset)) + dataLength = UInt64(WebSocket.readUint16(buffer: buffer, offset: offset)) offset += sizeof(UInt16) } if bufferLen < offset || UInt64(bufferLen - offset) < dataLength { @@ -635,13 +638,13 @@ public class WebSocket : NSObject, NSStreamDelegate { dispatch_async(queue) { [weak self] in guard let s = self else { return } s.onPong?() - s.pongDelegate?.websocketDidReceivePong(s) + s.pongDelegate?.websocketDidReceivePong(socket: s) } } let step = Int(offset+numericCast(len)) let extra = bufferLen-step if extra > 0 { - processRawMessage((buffer+step), bufferLen: extra) + processRawMessage(buffer: (buffer+step), bufferLen: extra) } return } @@ -651,17 +654,17 @@ public class WebSocket : NSObject, NSStreamDelegate { } if isFin == 0 && receivedOpcode == .ContinueFrame && response == nil { let errCode = CloseCode.ProtocolError.rawValue - doDisconnect(errorWithDetail("continue frame before a binary or text frame", code: errCode)) - writeError(errCode) + doDisconnect(error: errorWithDetail(detail: "continue frame before a binary or text frame", code: errCode)) + writeError(code: errCode) return } var isNew = false if response == nil { if receivedOpcode == .ContinueFrame { let errCode = CloseCode.ProtocolError.rawValue - doDisconnect(errorWithDetail("first frame can't be a continue frame", + doDisconnect(error: errorWithDetail(detail: "first frame can't be a continue frame", code: errCode)) - writeError(errCode) + writeError(code: errCode) return } isNew = true @@ -674,9 +677,9 @@ public class WebSocket : NSObject, NSStreamDelegate { response!.bytesLeft = Int(dataLength) } else { let errCode = CloseCode.ProtocolError.rawValue - doDisconnect(errorWithDetail("second and beyond of fragment message must be a continue frame", + doDisconnect(error: errorWithDetail(detail: "second and beyond of fragment message must be a continue frame", code: errCode)) - writeError(errCode) + writeError(code: errCode) return } response!.buffer!.append(data) @@ -688,13 +691,13 @@ public class WebSocket : NSObject, NSStreamDelegate { if isNew { readStack.append(response) } - processResponse(response) + processResponse(response: response) } let step = Int(offset+numericCast(len)) let extra = bufferLen-step if extra > 0 { - processExtra((buffer+step), bufferLen: extra) + processExtra(buffer: (buffer+step), bufferLen: extra) } } @@ -705,7 +708,7 @@ public class WebSocket : NSObject, NSStreamDelegate { if bufferLen < 2 { fragBuffer = NSData(bytes: buffer, length: bufferLen) } else { - processRawMessage(buffer, bufferLen: bufferLen) + processRawMessage(buffer: buffer, bufferLen: bufferLen) } } @@ -714,18 +717,18 @@ public class WebSocket : NSObject, NSStreamDelegate { if response.isFin && response.bytesLeft <= 0 { if response.code == .Ping { let data = response.buffer! //local copy so it is perverse for writing - dequeueWrite(data, code: OpCode.Pong) + dequeueWrite(data: data, code: OpCode.Pong) } else if response.code == .TextFrame { let str: NSString? = NSString(data: response.buffer!, encoding: NSUTF8StringEncoding) if str == nil { - writeError(CloseCode.Encoding.rawValue) + writeError(code: CloseCode.Encoding.rawValue) return false } if canDispatch { dispatch_async(queue) { [weak self] in guard let s = self else { return } s.onText?(str! as String) - s.delegate?.websocketDidReceiveMessage(s, text: str! as String) + s.delegate?.websocketDidReceiveMessage(socket: s, text: str! as String) } } } else if response.code == .BinaryFrame { @@ -734,7 +737,7 @@ public class WebSocket : NSObject, NSStreamDelegate { dispatch_async(queue) { [weak self] in guard let s = self else { return } s.onData?(data) - s.delegate?.websocketDidReceiveData(s, data: data) + s.delegate?.websocketDidReceiveData(socket: s, data: data) } } } @@ -748,15 +751,19 @@ public class WebSocket : NSObject, NSStreamDelegate { private func errorWithDetail(detail: String, code: UInt16) -> NSError { var details = [String: String]() details[NSLocalizedDescriptionKey] = detail + #if swift(>=3) + return NSError(domain: "April 12 build of Swift 3 broke this property", code: Int(code), userInfo: details) + #else return NSError(domain: WebSocket.ErrorDomain, code: Int(code), userInfo: details) + #endif } ///write a an error to the socket private func writeError(code: UInt16) { let buf = NSMutableData(capacity: sizeof(UInt16)) let buffer = UnsafeMutablePointer(buf!.bytes) - WebSocket.writeUint16(buffer, offset: 0, value: code) - dequeueWrite(NSData(bytes: buffer, length: sizeof(UInt16)), code: .ConnectionClose) + WebSocket.writeUint16(buffer: buffer, offset: 0, value: code) + dequeueWrite(data: NSData(bytes: buffer, length: sizeof(UInt16)), code: .ConnectionClose) } ///used to write things to the stream private func dequeueWrite(data: NSData, code: OpCode, writeCompletion: (() -> ())? = nil) { @@ -773,11 +780,11 @@ public class WebSocket : NSObject, NSStreamDelegate { buffer[1] = CUnsignedChar(dataLength) } else if dataLength <= Int(UInt16.max) { buffer[1] = 126 - WebSocket.writeUint16(buffer, offset: offset, value: UInt16(dataLength)) + WebSocket.writeUint16(buffer: buffer, offset: offset, value: UInt16(dataLength)) offset += sizeof(UInt16) } else { buffer[1] = 127 - WebSocket.writeUint64(buffer, offset: offset, value: UInt64(dataLength)) + WebSocket.writeUint64(buffer: buffer, offset: offset, value: UInt64(dataLength)) offset += sizeof(UInt64) } buffer[1] |= s.MaskMask @@ -800,9 +807,9 @@ public class WebSocket : NSObject, NSStreamDelegate { error = streamError } else { let errCode = InternalErrorCode.OutputStreamWriteError.rawValue - error = s.errorWithDetail("output stream error during write", code: errCode) + error = s.errorWithDetail(detail: "output stream error during write", code: errCode) } - s.doDisconnect(error) + s.doDisconnect(error: error) break } else { total += len @@ -830,7 +837,7 @@ public class WebSocket : NSObject, NSStreamDelegate { dispatch_async(queue) { [weak self] in guard let s = self else { return } s.onDisconnect?(error) - s.delegate?.websocketDidDisconnect(s, error: error) + s.delegate?.websocketDidDisconnect(socket: s, error: error) } }