Switch to using Any instead of AnyObject
In Swift 3 AnyObject is rarely what you want to use. Objective-C API gets imported as Any and while types like Array and Dictionary can be coerced to AnyObject, they prefer Any, which doesn’t require a manual cast.
This commit is contained in:
parent
0233f383bb
commit
536367392f
@ -819,6 +819,7 @@
|
|||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRODUCT_NAME = SocketIOClientSwift;
|
PRODUCT_NAME = SocketIOClientSwift;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 3.0;
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
WATCHOS_DEPLOYMENT_TARGET = 2.0;
|
WATCHOS_DEPLOYMENT_TARGET = 2.0;
|
||||||
};
|
};
|
||||||
@ -849,6 +850,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
PRODUCT_NAME = SocketIOClientSwift;
|
PRODUCT_NAME = SocketIOClientSwift;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_VERSION = 3.0;
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
WATCHOS_DEPLOYMENT_TARGET = 2.0;
|
WATCHOS_DEPLOYMENT_TARGET = 2.0;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -15,11 +15,11 @@ class SocketAckManagerTest: XCTestCase {
|
|||||||
func testAddAcks() {
|
func testAddAcks() {
|
||||||
let callbackExpection = self.expectation(description: "callbackExpection")
|
let callbackExpection = self.expectation(description: "callbackExpection")
|
||||||
let itemsArray = ["Hi", "ho"]
|
let itemsArray = ["Hi", "ho"]
|
||||||
func callback(_ items: [AnyObject]) {
|
func callback(_ items: [Any]) {
|
||||||
callbackExpection.fulfill()
|
callbackExpection.fulfill()
|
||||||
}
|
}
|
||||||
ackManager.addAck(1, callback: callback)
|
ackManager.addAck(1, callback: callback)
|
||||||
ackManager.executeAck(1, with: itemsArray as [AnyObject], onQueue: DispatchQueue.main)
|
ackManager.executeAck(1, with: itemsArray, onQueue: DispatchQueue.main)
|
||||||
|
|
||||||
waitForExpectations(timeout: 3.0, handler: nil)
|
waitForExpectations(timeout: 3.0, handler: nil)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,15 +16,15 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testEmpyEmit() {
|
func testEmpyEmit() {
|
||||||
let expectedSendString = "2[\"test\"]"
|
let expectedSendString = "2[\"test\"]"
|
||||||
let sendData = ["test"]
|
let sendData = ["test"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testNullEmit() {
|
func testNullEmit() {
|
||||||
let expectedSendString = "2[\"test\",null]"
|
let expectedSendString = "2[\"test\",null]"
|
||||||
let sendData = ["test", NSNull()] as [Any]
|
let sendData: [Any] = ["test", NSNull()]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
@ -32,7 +32,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testStringEmit() {
|
func testStringEmit() {
|
||||||
let expectedSendString = "2[\"test\",\"foo bar\"]"
|
let expectedSendString = "2[\"test\",\"foo bar\"]"
|
||||||
let sendData = ["test", "foo bar"]
|
let sendData = ["test", "foo bar"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
@ -40,31 +40,31 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testStringEmitWithQuotes() {
|
func testStringEmitWithQuotes() {
|
||||||
let expectedSendString = "2[\"test\",\"\\\"he\\\"llo world\\\"\"]"
|
let expectedSendString = "2[\"test\",\"\\\"he\\\"llo world\\\"\"]"
|
||||||
let sendData = ["test", "\"he\"llo world\""]
|
let sendData = ["test", "\"he\"llo world\""]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testJSONEmit() {
|
func testJSONEmit() {
|
||||||
let expectedSendString = "2[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
let expectedSendString = "2[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
||||||
let sendData = ["test" as AnyObject, ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary] as [AnyObject]
|
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testArrayEmit() {
|
func testArrayEmit() {
|
||||||
let expectedSendString = "2[\"test\",[\"hello\",1,{\"test\":\"test\"}]]"
|
let expectedSendString = "2[\"test\",[\"hello\",1,{\"test\":\"test\"}]]"
|
||||||
let sendData = ["test", ["hello", 1, ["test": "test"]]] as [Any]
|
let sendData: [Any] = ["test", ["hello", 1, ["test": "test"]]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testBinaryEmit() {
|
func testBinaryEmit() {
|
||||||
let expectedSendString = "51-[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
let expectedSendString = "51-[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
||||||
let sendData = ["test", data] as [Any]
|
let sendData: [Any] = ["test", data]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data])
|
XCTAssertEqual(packet.binary, [data])
|
||||||
@ -72,8 +72,8 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
|
|
||||||
func testMultipleBinaryEmit() {
|
func testMultipleBinaryEmit() {
|
||||||
let expectedSendString = "52-[\"test\",{\"data1\":{\"_placeholder\":1,\"num\":0},\"data2\":{\"_placeholder\":1,\"num\":1}}]"
|
let expectedSendString = "52-[\"test\",{\"data1\":{\"_placeholder\":1,\"num\":0},\"data2\":{\"_placeholder\":1,\"num\":1}}]"
|
||||||
let sendData = ["test" as AnyObject, ["data1": data, "data2": data2] as NSDictionary] as [AnyObject]
|
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data, data2])
|
XCTAssertEqual(packet.binary, [data, data2])
|
||||||
@ -82,7 +82,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testEmitWithAck() {
|
func testEmitWithAck() {
|
||||||
let expectedSendString = "20[\"test\"]"
|
let expectedSendString = "20[\"test\"]"
|
||||||
let sendData = ["test"]
|
let sendData = ["test"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString,
|
XCTAssertEqual(packet.packetString,
|
||||||
|
|
||||||
@ -91,8 +91,8 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
|
|
||||||
func testEmitDataWithAck() {
|
func testEmitDataWithAck() {
|
||||||
let expectedSendString = "51-0[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
let expectedSendString = "51-0[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
||||||
let sendData = ["test" as AnyObject, data as AnyObject] as [AnyObject]
|
let sendData: [Any] = ["test", data]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data])
|
XCTAssertEqual(packet.binary, [data])
|
||||||
@ -117,7 +117,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testStringAck() {
|
func testStringAck() {
|
||||||
let expectedSendString = "30[\"test\"]"
|
let expectedSendString = "30[\"test\"]"
|
||||||
let sendData = ["test"]
|
let sendData = ["test"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
@ -125,7 +125,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testJSONAck() {
|
func testJSONAck() {
|
||||||
let expectedSendString = "30[{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
let expectedSendString = "30[{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
||||||
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testBinaryAck() {
|
func testBinaryAck() {
|
||||||
let expectedSendString = "61-0[{\"_placeholder\":1,\"num\":0}]"
|
let expectedSendString = "61-0[{\"_placeholder\":1,\"num\":0}]"
|
||||||
let sendData = [data]
|
let sendData = [data]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data])
|
XCTAssertEqual(packet.binary, [data])
|
||||||
@ -142,7 +142,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
func testMultipleBinaryAck() {
|
func testMultipleBinaryAck() {
|
||||||
let expectedSendString = "62-0[{\"data2\":{\"_placeholder\":1,\"num\":0},\"data1\":{\"_placeholder\":1,\"num\":1}}]"
|
let expectedSendString = "62-0[{\"data2\":{\"_placeholder\":1,\"num\":0},\"data1\":{\"_placeholder\":1,\"num\":1}}]"
|
||||||
let sendData = [["data1": data, "data2": data2]]
|
let sendData = [["data1": data, "data2": data2]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data2, data])
|
XCTAssertEqual(packet.binary, [data2, data])
|
||||||
|
|||||||
@ -89,14 +89,14 @@ class SocketEngineTest: XCTestCase {
|
|||||||
|
|
||||||
func testEncodeURLProperly() {
|
func testEncodeURLProperly() {
|
||||||
engine.connectParams = [
|
engine.connectParams = [
|
||||||
"created": "2016-05-04T18:31:15+0200" as AnyObject
|
"created": "2016-05-04T18:31:15+0200"
|
||||||
]
|
]
|
||||||
|
|
||||||
XCTAssertEqual(engine.urlPolling.query, "transport=polling&b64=1&created=2016-05-04T18%3A31%3A15%2B0200")
|
XCTAssertEqual(engine.urlPolling.query, "transport=polling&b64=1&created=2016-05-04T18%3A31%3A15%2B0200")
|
||||||
XCTAssertEqual(engine.urlWebSocket.query, "transport=websocket&created=2016-05-04T18%3A31%3A15%2B0200")
|
XCTAssertEqual(engine.urlWebSocket.query, "transport=websocket&created=2016-05-04T18%3A31%3A15%2B0200")
|
||||||
|
|
||||||
engine.connectParams = [
|
engine.connectParams = [
|
||||||
"forbidden": "!*'();:@&=+$,/?%#[]\" {}" as AnyObject
|
"forbidden": "!*'();:@&=+$,/?%#[]\" {}"
|
||||||
]
|
]
|
||||||
|
|
||||||
XCTAssertEqual(engine.urlPolling.query, "transport=polling&b64=1&forbidden=%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%25%23%5B%5D%22%20%7B%7D")
|
XCTAssertEqual(engine.urlPolling.query, "transport=polling&b64=1&forbidden=%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%25%23%5B%5D%22%20%7B%7D")
|
||||||
|
|||||||
@ -15,40 +15,40 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
|
|
||||||
func testEmpyEmit() {
|
func testEmpyEmit() {
|
||||||
let expectedSendString = "2/swift,[\"test\"]"
|
let expectedSendString = "2/swift,[\"test\"]"
|
||||||
let sendData = ["test"]
|
let sendData: [Any] = ["test"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testNullEmit() {
|
func testNullEmit() {
|
||||||
let expectedSendString = "2/swift,[\"test\",null]"
|
let expectedSendString = "2/swift,[\"test\",null]"
|
||||||
let sendData = ["test", NSNull()] as [Any]
|
let sendData: [Any] = ["test", NSNull()]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStringEmit() {
|
func testStringEmit() {
|
||||||
let expectedSendString = "2/swift,[\"test\",\"foo bar\"]"
|
let expectedSendString = "2/swift,[\"test\",\"foo bar\"]"
|
||||||
let sendData = ["test", "foo bar"]
|
let sendData: [Any] = ["test", "foo bar"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testJSONEmit() {
|
func testJSONEmit() {
|
||||||
let expectedSendString = "2/swift,[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
let expectedSendString = "2/swift,[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
||||||
let sendData = ["test" as AnyObject, ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary] as [AnyObject]
|
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testArrayEmit() {
|
func testArrayEmit() {
|
||||||
let expectedSendString = "2/swift,[\"test\",[\"hello\",1,{\"test\":\"test\"}]]"
|
let expectedSendString = "2/swift,[\"test\",[\"hello\",1,{\"test\":\"test\"}]]"
|
||||||
let sendData = ["test", ["hello", 1, ["test": "test"]]] as [Any]
|
let sendData: [Any] = ["test", ["hello", 1, ["test": "test"]]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
@ -56,8 +56,8 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
|
|
||||||
func testBinaryEmit() {
|
func testBinaryEmit() {
|
||||||
let expectedSendString = "51-/swift,[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
let expectedSendString = "51-/swift,[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
||||||
let sendData = ["test" as AnyObject, data as AnyObject] as [AnyObject]
|
let sendData: [Any] = ["test", data]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data])
|
XCTAssertEqual(packet.binary, [data])
|
||||||
@ -65,8 +65,8 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
|
|
||||||
func testMultipleBinaryEmit() {
|
func testMultipleBinaryEmit() {
|
||||||
let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"_placeholder\":1,\"num\":0},\"data2\":{\"_placeholder\":1,\"num\":1}}]"
|
let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"_placeholder\":1,\"num\":0},\"data2\":{\"_placeholder\":1,\"num\":1}}]"
|
||||||
let sendData = ["test" as AnyObject, ["data1": data, "data2": data2] as NSDictionary] as [AnyObject]
|
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data, data2])
|
XCTAssertEqual(packet.binary, [data, data2])
|
||||||
@ -75,15 +75,15 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
func testEmitWithAck() {
|
func testEmitWithAck() {
|
||||||
let expectedSendString = "2/swift,0[\"test\"]"
|
let expectedSendString = "2/swift,0[\"test\"]"
|
||||||
let sendData = ["test"]
|
let sendData = ["test"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testEmitDataWithAck() {
|
func testEmitDataWithAck() {
|
||||||
let expectedSendString = "51-/swift,0[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
let expectedSendString = "51-/swift,0[\"test\",{\"_placeholder\":1,\"num\":0}]"
|
||||||
let sendData = ["test" as AnyObject, data as AnyObject] as [AnyObject]
|
let sendData: [Any] = ["test", data]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data])
|
XCTAssertEqual(packet.binary, [data])
|
||||||
@ -108,7 +108,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
func testStringAck() {
|
func testStringAck() {
|
||||||
let expectedSendString = "3/swift,0[\"test\"]"
|
let expectedSendString = "3/swift,0[\"test\"]"
|
||||||
let sendData = ["test"]
|
let sendData = ["test"]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
func testJSONAck() {
|
func testJSONAck() {
|
||||||
let expectedSendString = "3/swift,0[{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
let expectedSendString = "3/swift,0[{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]"
|
||||||
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
}
|
}
|
||||||
@ -124,7 +124,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
func testBinaryAck() {
|
func testBinaryAck() {
|
||||||
let expectedSendString = "61-/swift,0[{\"_placeholder\":1,\"num\":0}]"
|
let expectedSendString = "61-/swift,0[{\"_placeholder\":1,\"num\":0}]"
|
||||||
let sendData = [data]
|
let sendData = [data]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data])
|
XCTAssertEqual(packet.binary, [data])
|
||||||
@ -133,7 +133,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
func testMultipleBinaryAck() {
|
func testMultipleBinaryAck() {
|
||||||
let expectedSendString = "62-/swift,0[{\"data2\":{\"_placeholder\":1,\"num\":0},\"data1\":{\"_placeholder\":1,\"num\":1}}]"
|
let expectedSendString = "62-/swift,0[{\"data2\":{\"_placeholder\":1,\"num\":0},\"data1\":{\"_placeholder\":1,\"num\":1}}]"
|
||||||
let sendData = [["data1": data, "data2": data2]]
|
let sendData = [["data1": data, "data2": data2]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
||||||
|
|
||||||
XCTAssertEqual(packet.packetString, expectedSendString)
|
XCTAssertEqual(packet.packetString, expectedSendString)
|
||||||
XCTAssertEqual(packet.binary, [data2, data])
|
XCTAssertEqual(packet.binary, [data2, data])
|
||||||
|
|||||||
@ -13,21 +13,21 @@ class SocketParserTest: XCTestCase {
|
|||||||
let testSocket = SocketIOClient(socketURL: URL(string: "http://localhost/")!)
|
let testSocket = SocketIOClient(socketURL: URL(string: "http://localhost/")!)
|
||||||
|
|
||||||
//Format key: message; namespace-data-binary-id
|
//Format key: message; namespace-data-binary-id
|
||||||
static let packetTypes: [String: (String, [AnyObject], [Data], Int)] = [
|
static let packetTypes: [String: (String, [Any], [Data], Int)] = [
|
||||||
"0": ("/", [], [], -1), "1": ("/", [], [], -1),
|
"0": ("/", [], [], -1), "1": ("/", [], [], -1),
|
||||||
"25[\"test\"]": ("/", ["test" as AnyObject], [], 5),
|
"25[\"test\"]": ("/", ["test"], [], 5),
|
||||||
"2[\"test\",\"~~0\"]": ("/", ["test" as AnyObject, "~~0" as AnyObject], [], -1),
|
"2[\"test\",\"~~0\"]": ("/", ["test", "~~0"], [], -1),
|
||||||
"2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn" as AnyObject, ["test3" as AnyObject, "test4" as AnyObject] as NSArray], [], -1),
|
"2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn", ["test3", "test4"] as NSArray], [], -1),
|
||||||
"51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn" as AnyObject, [1, 2] as NSArray, ["test": "bob"] as NSDictionary, 25 as AnyObject, "polo" as AnyObject, ["_placeholder": true, "num": 0] as NSDictionary], [], -1),
|
"51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2] as NSArray, ["test": "bob"] as NSDictionary, 25, "polo", ["_placeholder": true, "num": 0] as NSDictionary], [], -1),
|
||||||
"3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"] as NSArray], [], 0),
|
"3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"] as NSArray], [], 0),
|
||||||
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]":
|
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]":
|
||||||
("/swift", [ [1, 2] as NSArray, ["test": "bob"] as NSDictionary, 25 as AnyObject, "polo" as AnyObject, ["_placeholder": true, "num": 0] as NSDictionary], [], 19),
|
("/swift", [ [1, 2] as NSArray, ["test": "bob"] as NSDictionary, 25, "polo", ["_placeholder": true, "num": 0] as NSDictionary], [], 19),
|
||||||
"4/swift,": ("/swift", [], [], -1),
|
"4/swift,": ("/swift", [], [], -1),
|
||||||
"0/swift": ("/swift", [], [], -1),
|
"0/swift": ("/swift", [], [], -1),
|
||||||
"1/swift": ("/swift", [], [], -1),
|
"1/swift": ("/swift", [], [], -1),
|
||||||
"4\"ERROR\"": ("/", ["ERROR" as AnyObject], [], -1),
|
"4\"ERROR\"": ("/", ["ERROR"], [], -1),
|
||||||
"4{\"test\":2}": ("/", [["test": 2] as NSDictionary], [], -1),
|
"4{\"test\":2}": ("/", [["test": 2] as NSDictionary], [], -1),
|
||||||
"41": ("/", [1 as AnyObject], [], -1)]
|
"41": ("/", [1], [], -1)]
|
||||||
|
|
||||||
func testDisconnect() {
|
func testDisconnect() {
|
||||||
let message = "1"
|
let message = "1"
|
||||||
@ -120,7 +120,7 @@ class SocketParserTest: XCTestCase {
|
|||||||
func validateParseResult(_ message: String) {
|
func validateParseResult(_ message: String) {
|
||||||
let validValues = SocketParserTest.packetTypes[message]!
|
let validValues = SocketParserTest.packetTypes[message]!
|
||||||
let packet = testSocket.parseString(message)
|
let packet = testSocket.parseString(message)
|
||||||
let type = message.substring(with: Range<String.Index>(message.startIndex..<message.characters.index(message.startIndex, offsetBy: 1)))
|
let type = String(message.characters.prefix(1))
|
||||||
if case let .right(packet) = packet {
|
if case let .right(packet) = packet {
|
||||||
XCTAssertEqual(packet.type, SocketPacket.PacketType(rawValue: Int(type) ?? -1)!)
|
XCTAssertEqual(packet.type, SocketPacket.PacketType(rawValue: Int(type) ?? -1)!)
|
||||||
XCTAssertEqual(packet.nsp, validValues.0)
|
XCTAssertEqual(packet.nsp, validValues.0)
|
||||||
|
|||||||
@ -137,12 +137,6 @@ class SocketSideEffectTest: XCTestCase {
|
|||||||
waitForExpectations(timeout: 3, handler: nil)
|
waitForExpectations(timeout: 3, handler: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testSocketDataToAnyObject() {
|
|
||||||
let data = ["test", 1, 2.2, ["Hello": 2, "bob": 2.2], true, [1, 2], [1.1, 2]] as [SocketData]
|
|
||||||
|
|
||||||
XCTAssertEqual(data.count, data.toAnyObjectArray().count)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testHandleMultipleBinaryEvent() {
|
func testHandleMultipleBinaryEvent() {
|
||||||
let expect = expectation(description: "handled multiple binary event")
|
let expect = expectation(description: "handled multiple binary event")
|
||||||
socket.on("test") {data, ack in
|
socket.on("test") {data, ack in
|
||||||
|
|||||||
@ -149,9 +149,9 @@ public class SSLSecurity : NSObject {
|
|||||||
if self.usePublicKeys {
|
if self.usePublicKeys {
|
||||||
if let keys = self.pubKeys {
|
if let keys = self.pubKeys {
|
||||||
let serverPubKeys = publicKeyChainForTrust(trust: trust)
|
let serverPubKeys = publicKeyChainForTrust(trust: trust)
|
||||||
for serverKey in serverPubKeys as [AnyObject] {
|
for serverKey in serverPubKeys {
|
||||||
for key in keys as [AnyObject] {
|
for key in keys {
|
||||||
if serverKey.isEqual(key) {
|
if CFEqual(serverKey, key) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,10 +36,10 @@ public final class SocketAckEmitter : NSObject {
|
|||||||
public func with(_ items: SocketData...) {
|
public func with(_ items: SocketData...) {
|
||||||
guard ackNum != -1 else { return }
|
guard ackNum != -1 else { return }
|
||||||
|
|
||||||
socket.emitAck(ackNum, with: items.toAnyObjectArray())
|
socket.emitAck(ackNum, with: items)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func with(_ items: [AnyObject]) {
|
public func with(_ items: [Any]) {
|
||||||
guard ackNum != -1 else { return }
|
guard ackNum != -1 else { return }
|
||||||
|
|
||||||
socket.emitAck(ackNum, with: items)
|
socket.emitAck(ackNum, with: items)
|
||||||
|
|||||||
@ -57,7 +57,7 @@ struct SocketAckManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Should be called on handle queue
|
/// Should be called on handle queue
|
||||||
mutating func executeAck(_ ack: Int, with items: [AnyObject], onQueue: DispatchQueue) {
|
mutating func executeAck(_ ack: Int, with items: [Any], onQueue: DispatchQueue) {
|
||||||
let ack = acks.remove(SocketAck(ack: ack))
|
let ack = acks.remove(SocketAck(ack: ack))
|
||||||
|
|
||||||
onQueue.async() { ack?.callback(items) }
|
onQueue.async() { ack?.callback(items) }
|
||||||
@ -67,6 +67,6 @@ struct SocketAckManager {
|
|||||||
mutating func timeoutAck(_ ack: Int, onQueue: DispatchQueue) {
|
mutating func timeoutAck(_ ack: Int, onQueue: DispatchQueue) {
|
||||||
let ack = acks.remove(SocketAck(ack: ack))
|
let ack = acks.remove(SocketAck(ack: ack))
|
||||||
|
|
||||||
onQueue.async() { ack?.callback?(["NO ACK" as AnyObject]) }
|
onQueue.async() { ack?.callback?(["NO ACK"]) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,12 +26,12 @@ import Foundation
|
|||||||
|
|
||||||
public final class SocketAnyEvent : NSObject {
|
public final class SocketAnyEvent : NSObject {
|
||||||
public let event: String
|
public let event: String
|
||||||
public let items: [AnyObject]?
|
public let items: [Any]?
|
||||||
override public var description: String {
|
override public var description: String {
|
||||||
return "SocketAnyEvent: Event: \(event) items: \(items ?? nil)"
|
return "SocketAnyEvent: Event: \(event) items: \(items ?? nil)"
|
||||||
}
|
}
|
||||||
|
|
||||||
init(event: String, items: [AnyObject]?) {
|
init(event: String, items: [Any]?) {
|
||||||
self.event = event
|
self.event = event
|
||||||
self.items = items
|
self.items = items
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ public final class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePoll
|
|||||||
public let handleQueue = DispatchQueue(label: "com.socketio.engineHandleQueue", attributes: [])
|
public let handleQueue = DispatchQueue(label: "com.socketio.engineHandleQueue", attributes: [])
|
||||||
public let parseQueue = DispatchQueue(label: "com.socketio.engineParseQueue", attributes: [])
|
public let parseQueue = DispatchQueue(label: "com.socketio.engineParseQueue", attributes: [])
|
||||||
|
|
||||||
public var connectParams: [String: AnyObject]? {
|
public var connectParams: [String: Any]? {
|
||||||
didSet {
|
didSet {
|
||||||
(urlPolling, urlWebSocket) = createURLs()
|
(urlPolling, urlWebSocket) = createURLs()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ import Foundation
|
|||||||
weak var client: SocketEngineClient? { get set }
|
weak var client: SocketEngineClient? { get set }
|
||||||
var closed: Bool { get }
|
var closed: Bool { get }
|
||||||
var connected: Bool { get }
|
var connected: Bool { get }
|
||||||
var connectParams: [String: AnyObject]? { get set }
|
var connectParams: [String: Any]? { get set }
|
||||||
var doubleEncodeUTF8: Bool { get }
|
var doubleEncodeUTF8: Bool { get }
|
||||||
var cookies: [HTTPCookie]? { get }
|
var cookies: [HTTPCookie]? { get }
|
||||||
var extraHeaders: [String: String]? { get }
|
var extraHeaders: [String: String]? { get }
|
||||||
|
|||||||
@ -29,7 +29,7 @@ struct SocketEventHandler {
|
|||||||
let id: UUID
|
let id: UUID
|
||||||
let callback: NormalCallback
|
let callback: NormalCallback
|
||||||
|
|
||||||
func executeCallback(with items: [AnyObject], withAck ack: Int, withSocket socket: SocketIOClient) {
|
func executeCallback(with items: [Any], withAck ack: Int, withSocket socket: SocketIOClient) {
|
||||||
callback(items, SocketAckEmitter(socket: socket, ackNum: ack))
|
callback(items, SocketAckEmitter(socket: socket, ackNum: ack))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,13 +30,6 @@ enum JSONError : Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension Array {
|
extension Array {
|
||||||
/// Because Swift 3 removes a lot of implicit briding so we have to perform more casts
|
|
||||||
func toAnyObjectArray() -> [AnyObject] {
|
|
||||||
return flatMap({$0 as? AnyObject})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Array where Element: AnyObject {
|
|
||||||
func toJSON() throws -> Data {
|
func toJSON() throws -> Data {
|
||||||
return try JSONSerialization.data(withJSONObject: self as NSArray, options: JSONSerialization.WritingOptions(rawValue: 0))
|
return try JSONSerialization.data(withJSONObject: self as NSArray, options: JSONSerialization.WritingOptions(rawValue: 0))
|
||||||
}
|
}
|
||||||
@ -49,9 +42,9 @@ extension CharacterSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension NSDictionary {
|
extension NSDictionary {
|
||||||
private static func keyValueToSocketIOClientOption(key: String, value: AnyObject) -> SocketIOClientOption? {
|
private static func keyValueToSocketIOClientOption(key: String, value: Any) -> SocketIOClientOption? {
|
||||||
switch (key, value) {
|
switch (key, value) {
|
||||||
case let ("connectParams", params as [String: AnyObject]):
|
case let ("connectParams", params as [String: Any]):
|
||||||
return .connectParams(params)
|
return .connectParams(params)
|
||||||
case let ("cookies", cookies as [HTTPCookie]):
|
case let ("cookies", cookies as [HTTPCookie]):
|
||||||
return .cookies(cookies)
|
return .cookies(cookies)
|
||||||
@ -100,7 +93,7 @@ extension NSDictionary {
|
|||||||
var options = [] as SocketIOClientConfiguration
|
var options = [] as SocketIOClientConfiguration
|
||||||
|
|
||||||
for (rawKey, value) in self {
|
for (rawKey, value) in self {
|
||||||
if let key = rawKey as? String, let opt = NSDictionary.keyValueToSocketIOClientOption(key: key, value: value as AnyObject) {
|
if let key = rawKey as? String, let opt = NSDictionary.keyValueToSocketIOClientOption(key: key, value: value) {
|
||||||
options.insert(opt)
|
options.insert(opt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -110,9 +103,9 @@ extension NSDictionary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension String {
|
extension String {
|
||||||
func toArray() throws -> [AnyObject] {
|
func toArray() throws -> [Any] {
|
||||||
guard let stringData = data(using: .utf8, allowLossyConversion: false) else { return [] }
|
guard let stringData = data(using: .utf8, allowLossyConversion: false) else { return [] }
|
||||||
guard let array = try JSONSerialization.jsonObject(with: stringData, options: .mutableContainers) as? [AnyObject] else {
|
guard let array = try JSONSerialization.jsonObject(with: stringData, options: .mutableContainers) as? [Any] else {
|
||||||
throw JSONError.notArray
|
throw JSONError.notArray
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -160,7 +160,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func createOnAck(_ items: [AnyObject]) -> OnAckCallback {
|
private func createOnAck(_ items: [Any]) -> OnAckCallback {
|
||||||
currentAck += 1
|
currentAck += 1
|
||||||
|
|
||||||
return {[weak self, ack = currentAck] timeout, callback in
|
return {[weak self, ack = currentAck] timeout, callback in
|
||||||
@ -201,7 +201,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
|
|
||||||
// Make sure the engine is actually dead.
|
// Make sure the engine is actually dead.
|
||||||
engine?.disconnect(reason: reason)
|
engine?.disconnect(reason: reason)
|
||||||
handleEvent("disconnect", data: [reason as AnyObject], isInternalMessage: true)
|
handleEvent("disconnect", data: [reason], isInternalMessage: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Disconnects the socket.
|
/// Disconnects the socket.
|
||||||
@ -215,34 +215,34 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
|
|
||||||
/// Send a message to the server
|
/// Send a message to the server
|
||||||
public func emit(_ event: String, _ items: SocketData...) {
|
public func emit(_ event: String, _ items: SocketData...) {
|
||||||
emit(event, with: items.toAnyObjectArray())
|
emit(event, with: items)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Same as emit, but meant for Objective-C
|
/// Same as emit, but meant for Objective-C
|
||||||
public func emit(_ event: String, with items: [AnyObject]) {
|
public func emit(_ event: String, with items: [Any]) {
|
||||||
guard status == .connected else {
|
guard status == .connected else {
|
||||||
handleEvent("error", data: ["Tried emitting \(event) when not connected" as AnyObject], isInternalMessage: true)
|
handleEvent("error", data: ["Tried emitting \(event) when not connected"], isInternalMessage: true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_emit([event as AnyObject] + items)
|
_emit([event] + items)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sends a message to the server, requesting an ack. Use the onAck method of SocketAckHandler to add
|
/// Sends a message to the server, requesting an ack. Use the onAck method of SocketAckHandler to add
|
||||||
/// an ack.
|
/// an ack.
|
||||||
public func emitWithAck(_ event: String, _ items: SocketData...) -> OnAckCallback {
|
public func emitWithAck(_ event: String, _ items: SocketData...) -> OnAckCallback {
|
||||||
return emitWithAck(event, with: items.toAnyObjectArray())
|
return emitWithAck(event, with: items)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Same as emitWithAck, but for Objective-C
|
/// Same as emitWithAck, but for Objective-C
|
||||||
public func emitWithAck(_ event: String, with items: [AnyObject]) -> OnAckCallback {
|
public func emitWithAck(_ event: String, with items: [Any]) -> OnAckCallback {
|
||||||
return createOnAck([event as AnyObject] + items)
|
return createOnAck([event] + items)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func _emit(_ data: [AnyObject], ack: Int? = nil) {
|
private func _emit(_ data: [Any], ack: Int? = nil) {
|
||||||
emitQueue.async {
|
emitQueue.async {
|
||||||
guard self.status == .connected else {
|
guard self.status == .connected else {
|
||||||
self.handleEvent("error", data: ["Tried emitting when not connected" as AnyObject], isInternalMessage: true)
|
self.handleEvent("error", data: ["Tried emitting when not connected"], isInternalMessage: true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the server wants to know that the client received data
|
// If the server wants to know that the client received data
|
||||||
func emitAck(_ ack: Int, with items: [AnyObject]) {
|
func emitAck(_ ack: Int, with items: [Any]) {
|
||||||
emitQueue.async {
|
emitQueue.async {
|
||||||
if self.status == .connected {
|
if self.status == .connected {
|
||||||
let packet = SocketPacket.packetFromEmit(items, id: ack, nsp: self.nsp, ack: true)
|
let packet = SocketPacket.packetFromEmit(items, id: ack, nsp: self.nsp, ack: true)
|
||||||
@ -288,7 +288,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
public func engineDidError(reason: String) {
|
public func engineDidError(reason: String) {
|
||||||
DefaultSocketLogger.Logger.error("%@", type: logType, args: reason)
|
DefaultSocketLogger.Logger.error("%@", type: logType, args: reason)
|
||||||
|
|
||||||
handleEvent("error", data: [reason as AnyObject], isInternalMessage: true)
|
handleEvent("error", data: [reason], isInternalMessage: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func engineDidOpen(reason: String) {
|
public func engineDidOpen(reason: String) {
|
||||||
@ -296,7 +296,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Called when the socket gets an ack for something it sent
|
// Called when the socket gets an ack for something it sent
|
||||||
func handleAck(_ ack: Int, data: [AnyObject]) {
|
func handleAck(_ ack: Int, data: [Any]) {
|
||||||
guard status == .connected else { return }
|
guard status == .connected else { return }
|
||||||
|
|
||||||
DefaultSocketLogger.Logger.log("Handling ack: %@ with data: %@", type: logType, args: ack, data)
|
DefaultSocketLogger.Logger.log("Handling ack: %@ with data: %@", type: logType, args: ack, data)
|
||||||
@ -307,7 +307,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Causes an event to be handled. Only use if you know what you're doing.
|
/// 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: [Any], isInternalMessage: Bool, withAck ack: Int = -1) {
|
||||||
guard status == .connected || isInternalMessage else { return }
|
guard status == .connected || isInternalMessage else { return }
|
||||||
|
|
||||||
DefaultSocketLogger.Logger.log("Handling event: %@ with data: %@", type: logType, args: event, data)
|
DefaultSocketLogger.Logger.log("Handling event: %@ with data: %@", type: logType, args: event, data)
|
||||||
@ -416,7 +416,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
guard reconnecting else { return }
|
guard reconnecting else { return }
|
||||||
|
|
||||||
DefaultSocketLogger.Logger.log("Starting reconnect", type: logType)
|
DefaultSocketLogger.Logger.log("Starting reconnect", type: logType)
|
||||||
handleEvent("reconnect", data: [reason as AnyObject], isInternalMessage: true)
|
handleEvent("reconnect", data: [reason], isInternalMessage: true)
|
||||||
|
|
||||||
_tryReconnect()
|
_tryReconnect()
|
||||||
}
|
}
|
||||||
@ -429,7 +429,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
}
|
}
|
||||||
|
|
||||||
DefaultSocketLogger.Logger.log("Trying to reconnect", type: logType)
|
DefaultSocketLogger.Logger.log("Trying to reconnect", type: logType)
|
||||||
handleEvent("reconnectAttempt", data: [(reconnectAttempts - currentReconnectAttempt) as AnyObject],
|
handleEvent("reconnectAttempt", data: [(reconnectAttempts - currentReconnectAttempt)],
|
||||||
isInternalMessage: true)
|
isInternalMessage: true)
|
||||||
|
|
||||||
currentReconnectAttempt += 1
|
currentReconnectAttempt += 1
|
||||||
@ -454,7 +454,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
|
|||||||
self.engine = engine
|
self.engine = engine
|
||||||
}
|
}
|
||||||
|
|
||||||
func emitTest(event: String, _ data: AnyObject...) {
|
func emitTest(event: String, _ data: Any...) {
|
||||||
_emit([event as AnyObject] + data)
|
_emit([event] + data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,11 +25,11 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol ClientOption : CustomStringConvertible, Equatable {
|
protocol ClientOption : CustomStringConvertible, Equatable {
|
||||||
func getSocketIOOptionValue() -> AnyObject
|
func getSocketIOOptionValue() -> Any
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SocketIOClientOption : ClientOption {
|
public enum SocketIOClientOption : ClientOption {
|
||||||
case connectParams([String: AnyObject])
|
case connectParams([String: Any])
|
||||||
case cookies([HTTPCookie])
|
case cookies([HTTPCookie])
|
||||||
case doubleEncodeUTF8(Bool)
|
case doubleEncodeUTF8(Bool)
|
||||||
case extraHeaders([String: String])
|
case extraHeaders([String: String])
|
||||||
@ -99,50 +99,50 @@ public enum SocketIOClientOption : ClientOption {
|
|||||||
return description
|
return description
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSocketIOOptionValue() -> AnyObject {
|
func getSocketIOOptionValue() -> Any {
|
||||||
let value: AnyObject
|
let value: Any
|
||||||
|
|
||||||
switch self {
|
switch self {
|
||||||
case let .connectParams(params):
|
case let .connectParams(params):
|
||||||
value = params as AnyObject
|
value = params
|
||||||
case let .cookies(cookies):
|
case let .cookies(cookies):
|
||||||
value = cookies as AnyObject
|
value = cookies
|
||||||
case let .doubleEncodeUTF8(encode):
|
case let .doubleEncodeUTF8(encode):
|
||||||
value = encode as AnyObject
|
value = encode
|
||||||
case let .extraHeaders(headers):
|
case let .extraHeaders(headers):
|
||||||
value = headers as AnyObject
|
value = headers
|
||||||
case let .forceNew(force):
|
case let .forceNew(force):
|
||||||
value = force as AnyObject
|
value = force
|
||||||
case let .forcePolling(force):
|
case let .forcePolling(force):
|
||||||
value = force as AnyObject
|
value = force
|
||||||
case let .forceWebsockets(force):
|
case let .forceWebsockets(force):
|
||||||
value = force as AnyObject
|
value = force
|
||||||
case let .handleQueue(queue):
|
case let .handleQueue(queue):
|
||||||
value = queue as AnyObject
|
value = queue
|
||||||
case let .log(log):
|
case let .log(log):
|
||||||
value = log as AnyObject
|
value = log
|
||||||
case let .logger(logger):
|
case let .logger(logger):
|
||||||
value = logger as AnyObject
|
value = logger
|
||||||
case let .nsp(nsp):
|
case let .nsp(nsp):
|
||||||
value = nsp as AnyObject
|
value = nsp
|
||||||
case let .path(path):
|
case let .path(path):
|
||||||
value = path as AnyObject
|
value = path
|
||||||
case let .reconnects(reconnects):
|
case let .reconnects(reconnects):
|
||||||
value = reconnects as AnyObject
|
value = reconnects
|
||||||
case let .reconnectAttempts(attempts):
|
case let .reconnectAttempts(attempts):
|
||||||
value = attempts as AnyObject
|
value = attempts
|
||||||
case let .reconnectWait(wait):
|
case let .reconnectWait(wait):
|
||||||
value = wait as AnyObject
|
value = wait
|
||||||
case let .secure(secure):
|
case let .secure(secure):
|
||||||
value = secure as AnyObject
|
value = secure
|
||||||
case let .security(security):
|
case let .security(security):
|
||||||
value = security
|
value = security
|
||||||
case let .selfSigned(signed):
|
case let .selfSigned(signed):
|
||||||
value = signed as AnyObject
|
value = signed
|
||||||
case let .sessionDelegate(delegate):
|
case let .sessionDelegate(delegate):
|
||||||
value = delegate as AnyObject
|
value = delegate
|
||||||
case let .voipEnabled(enabled):
|
case let .voipEnabled(enabled):
|
||||||
value = enabled as AnyObject
|
value = enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|||||||
@ -29,8 +29,8 @@ protocol SocketIOClientSpec : class {
|
|||||||
func didConnect()
|
func didConnect()
|
||||||
func didDisconnect(reason: String)
|
func didDisconnect(reason: String)
|
||||||
func didError(reason: String)
|
func didError(reason: String)
|
||||||
func handleAck(_ ack: Int, data: [AnyObject])
|
func handleAck(_ ack: Int, data: [Any])
|
||||||
func handleEvent(_ event: String, data: [AnyObject], isInternalMessage: Bool, withAck ack: Int)
|
func handleEvent(_ event: String, data: [Any], isInternalMessage: Bool, withAck ack: Int)
|
||||||
func joinNamespace(_ namespace: String)
|
func joinNamespace(_ namespace: String)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +38,6 @@ extension SocketIOClientSpec {
|
|||||||
func didError(reason: String) {
|
func didError(reason: String) {
|
||||||
DefaultSocketLogger.Logger.error("%@", type: "SocketIOClient", args: reason)
|
DefaultSocketLogger.Logger.error("%@", type: "SocketIOClient", args: reason)
|
||||||
|
|
||||||
handleEvent("error", data: [reason as AnyObject], isInternalMessage: true, withAck: -1)
|
handleEvent("error", data: [reason], isInternalMessage: true, withAck: -1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,9 +39,9 @@ struct SocketPacket {
|
|||||||
let type: PacketType
|
let type: PacketType
|
||||||
|
|
||||||
var binary: [Data]
|
var binary: [Data]
|
||||||
var data: [AnyObject]
|
var data: [Any]
|
||||||
|
|
||||||
var args: [AnyObject] {
|
var args: [Any] {
|
||||||
if type == .event || type == .binaryEvent && data.count != 0 {
|
if type == .event || type == .binaryEvent && data.count != 0 {
|
||||||
return Array(data.dropFirst())
|
return Array(data.dropFirst())
|
||||||
} else {
|
} else {
|
||||||
@ -62,7 +62,7 @@ struct SocketPacket {
|
|||||||
return createPacketString()
|
return createPacketString()
|
||||||
}
|
}
|
||||||
|
|
||||||
init(type: PacketType, data: [AnyObject] = [AnyObject](), id: Int = -1,
|
init(type: PacketType, data: [Any] = [Any](), id: Int = -1,
|
||||||
nsp: String, placeholders: Int = 0, binary: [Data] = [Data]()) {
|
nsp: String, placeholders: Int = 0, binary: [Data] = [Data]()) {
|
||||||
self.data = data
|
self.data = data
|
||||||
self.id = id
|
self.id = id
|
||||||
@ -132,19 +132,19 @@ struct SocketPacket {
|
|||||||
// If object is a collection it will recurse
|
// If object is a collection it will recurse
|
||||||
// Returns the object if it is not a placeholder or the corresponding
|
// Returns the object if it is not a placeholder or the corresponding
|
||||||
// binary data
|
// binary data
|
||||||
private func _fillInPlaceholders(_ object: AnyObject) -> AnyObject {
|
private func _fillInPlaceholders(_ object: Any) -> Any {
|
||||||
switch object {
|
switch object {
|
||||||
case let dict as NSDictionary:
|
case let dict as NSDictionary:
|
||||||
if dict["_placeholder"] as? Bool ?? false {
|
if dict["_placeholder"] as? Bool ?? false {
|
||||||
return binary[dict["num"] as! Int] as AnyObject
|
return binary[dict["num"] as! Int]
|
||||||
} else {
|
} else {
|
||||||
return dict.reduce(NSMutableDictionary(), {cur, keyValue in
|
return dict.reduce(NSMutableDictionary(), {cur, keyValue in
|
||||||
cur[keyValue.0 as! NSCopying] = _fillInPlaceholders(keyValue.1 as AnyObject)
|
cur[keyValue.0 as! NSCopying] = _fillInPlaceholders(keyValue.1)
|
||||||
return cur
|
return cur
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
case let arr as [AnyObject]:
|
case let arr as [Any]:
|
||||||
return arr.map(_fillInPlaceholders) as AnyObject
|
return arr.map(_fillInPlaceholders)
|
||||||
default:
|
default:
|
||||||
return object
|
return object
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ extension SocketPacket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static func packetFromEmit(_ items: [AnyObject], id: Int, nsp: String, ack: Bool) -> SocketPacket {
|
static func packetFromEmit(_ items: [Any], id: Int, nsp: String, ack: Bool) -> SocketPacket {
|
||||||
let (parsedData, binary) = deconstructData(items)
|
let (parsedData, binary) = deconstructData(items)
|
||||||
let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData,
|
let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData,
|
||||||
id: id, nsp: nsp, binary: binary)
|
id: id, nsp: nsp, binary: binary)
|
||||||
@ -178,18 +178,18 @@ extension SocketPacket {
|
|||||||
|
|
||||||
private extension SocketPacket {
|
private extension SocketPacket {
|
||||||
// Recursive function that looks for NSData in collections
|
// Recursive function that looks for NSData in collections
|
||||||
static func shred(_ data: AnyObject, binary: inout [Data]) -> AnyObject {
|
static func shred(_ data: Any, binary: inout [Data]) -> Any {
|
||||||
let placeholder = ["_placeholder": true, "num": binary.count as AnyObject] as [String : Any]
|
let placeholder = ["_placeholder": true, "num": binary.count] as [String : Any]
|
||||||
|
|
||||||
switch data {
|
switch data {
|
||||||
case let bin as Data:
|
case let bin as Data:
|
||||||
binary.append(bin)
|
binary.append(bin)
|
||||||
return placeholder as AnyObject
|
return placeholder
|
||||||
case let arr as [AnyObject]:
|
case let arr as [Any]:
|
||||||
return arr.map({shred($0, binary: &binary)}) as AnyObject
|
return arr.map({shred($0, binary: &binary)})
|
||||||
case let dict as NSDictionary:
|
case let dict as NSDictionary:
|
||||||
return dict.reduce(NSMutableDictionary(), {cur, keyValue in
|
return dict.reduce(NSMutableDictionary(), {cur, keyValue in
|
||||||
cur[keyValue.0 as! NSCopying] = shred(keyValue.1 as AnyObject, binary: &binary)
|
cur[keyValue.0 as! NSCopying] = shred(keyValue.1, binary: &binary)
|
||||||
return cur
|
return cur
|
||||||
})
|
})
|
||||||
default:
|
default:
|
||||||
@ -199,7 +199,7 @@ private extension SocketPacket {
|
|||||||
|
|
||||||
// Removes binary data from emit data
|
// Removes binary data from emit data
|
||||||
// Returns a type containing the de-binaryed data and the binary
|
// Returns a type containing the de-binaryed data and the binary
|
||||||
static func deconstructData(_ data: [AnyObject]) -> ([AnyObject], [Data]) {
|
static func deconstructData(_ data: [Any]) -> ([Any], [Data]) {
|
||||||
var binary = [Data]()
|
var binary = [Data]()
|
||||||
|
|
||||||
return (data.map({shred($0, binary: &binary)}), binary)
|
return (data.map({shred($0, binary: &binary)}), binary)
|
||||||
|
|||||||
@ -65,7 +65,7 @@ extension SocketParsable {
|
|||||||
func parseString(_ message: String) -> Either<String, SocketPacket> {
|
func parseString(_ message: String) -> Either<String, SocketPacket> {
|
||||||
var reader = SocketStringReader(message: message)
|
var reader = SocketStringReader(message: message)
|
||||||
|
|
||||||
guard let type = SocketPacket.PacketType(rawValue: Int(reader.read(count: 1)) ?? -1) else {
|
guard let type = Int(reader.read(count: 1)).flatMap({ SocketPacket.PacketType(rawValue: $0) }) else {
|
||||||
return .left("Invalid packet type")
|
return .left("Invalid packet type")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ extension SocketParsable {
|
|||||||
switch parseData(d) {
|
switch parseData(d) {
|
||||||
case let .left(err):
|
case let .left(err):
|
||||||
// Errors aren't always enclosed in an array
|
// Errors aren't always enclosed in an array
|
||||||
if case let .right(data) = parseData("\([d as AnyObject])") {
|
if case let .right(data) = parseData("[\(d)]") {
|
||||||
return .right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
return .right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
||||||
nsp: namespace, placeholders: placeholders))
|
nsp: namespace, placeholders: placeholders))
|
||||||
} else {
|
} else {
|
||||||
@ -125,7 +125,7 @@ extension SocketParsable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parses data for events
|
// Parses data for events
|
||||||
private func parseData(_ data: String) -> Either<String, [AnyObject]> {
|
private func parseData(_ data: String) -> Either<String, [Any]> {
|
||||||
do {
|
do {
|
||||||
return .right(try data.toArray())
|
return .right(try data.toArray())
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@ -39,8 +39,8 @@ extension NSString : SocketData {}
|
|||||||
extension NSNull : SocketData {}
|
extension NSNull : SocketData {}
|
||||||
extension String : SocketData {}
|
extension String : SocketData {}
|
||||||
|
|
||||||
public typealias AckCallback = ([AnyObject]) -> Void
|
public typealias AckCallback = ([Any]) -> Void
|
||||||
public typealias NormalCallback = ([AnyObject], SocketAckEmitter) -> Void
|
public typealias NormalCallback = ([Any], SocketAckEmitter) -> Void
|
||||||
public typealias OnAckCallback = (_ timeoutAfter: UInt64, _ callback: AckCallback) -> Void
|
public typealias OnAckCallback = (_ timeoutAfter: UInt64, _ callback: AckCallback) -> Void
|
||||||
|
|
||||||
typealias Probe = (msg: String, type: SocketEnginePacketType, data: [Data])
|
typealias Probe = (msg: String, type: SocketEnginePacketType, data: [Data])
|
||||||
|
|||||||
@ -368,7 +368,7 @@ public class WebSocket: NSObject, StreamDelegate {
|
|||||||
public func stream(aStream: Stream, handleEvent eventCode: Stream.Event) {
|
public func stream(aStream: Stream, handleEvent eventCode: Stream.Event) {
|
||||||
|
|
||||||
if let sec = security , !certValidated && [.hasBytesAvailable, .hasSpaceAvailable].contains(eventCode) {
|
if let sec = security , !certValidated && [.hasBytesAvailable, .hasSpaceAvailable].contains(eventCode) {
|
||||||
let possibleTrust = aStream.property(forKey: kCFStreamPropertySSLPeerTrust as Stream.PropertyKey) as AnyObject
|
let possibleTrust = aStream.property(forKey: kCFStreamPropertySSLPeerTrust as Stream.PropertyKey)
|
||||||
let domain = aStream.property(forKey: kCFStreamSSLPeerName as Stream.PropertyKey) as? String
|
let domain = aStream.property(forKey: kCFStreamSSLPeerName as Stream.PropertyKey) as? String
|
||||||
if sec.isValid(possibleTrust as! SecTrust, domain: domain) {
|
if sec.isValid(possibleTrust as! SecTrust, domain: domain) {
|
||||||
certValidated = true
|
certValidated = true
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user