update for latest swift 3
This commit is contained in:
parent
9f8db42584
commit
e2db1a086d
@ -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])
|
||||
|
||||
@ -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])
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
}
|
||||
|
||||
- (void)testOffSyntax {
|
||||
[self.socket off:@"test"];
|
||||
[self.socket offWithEvent:@"test"];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -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, "/")
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -52,11 +52,11 @@ private func ==(lhs: SocketAck, rhs: SocketAck) -> Bool {
|
||||
struct SocketAckManager {
|
||||
private var acks = Set<SocketAck>(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()) {
|
||||
|
||||
@ -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)..<message.endIndex]
|
||||
|
||||
if let data = NSData(base64EncodedString: noPrefix,
|
||||
|
||||
if let data = NSData(base64Encoded: noPrefix,
|
||||
options: .ignoreUnknownCharacters) {
|
||||
client?.parseEngineBinaryData(data)
|
||||
}
|
||||
@ -176,7 +176,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe
|
||||
public func connect() {
|
||||
if connected {
|
||||
DefaultSocketLogger.Logger.error("Engine tried opening while connected. Assuming this was a reconnect", type: logType)
|
||||
disconnect("reconnect")
|
||||
disconnect(reason: "reconnect")
|
||||
}
|
||||
|
||||
DefaultSocketLogger.Logger.log("Starting engine", type: logType)
|
||||
@ -204,7 +204,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe
|
||||
}
|
||||
}
|
||||
|
||||
doLongPoll(reqPolling)
|
||||
doLongPoll(for: reqPolling)
|
||||
}
|
||||
|
||||
private func createURLs() -> (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()..<fixedString.endIndex])
|
||||
handleOpen(openMessage: fixedString[fixedString.startIndex.successor()..<fixedString.endIndex])
|
||||
case .close:
|
||||
handleClose(fixedString)
|
||||
handleClose(reason: fixedString)
|
||||
default:
|
||||
DefaultSocketLogger.Logger.log("Got unknown packet type", type: logType)
|
||||
}
|
||||
@ -471,7 +471,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe
|
||||
|
||||
//Server is not responding
|
||||
if pongsMissed > 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()
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<NSData, String> {
|
||||
func createBinaryDataForSend(using data: NSData) -> Either<NSData, String> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,8 +210,8 @@ extension NSDictionary {
|
||||
var options = Set<SocketIOClientOption>()
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)})
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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<String, SocketPacket> {
|
||||
func parseString(_ message: String) -> Either<String, SocketPacket> {
|
||||
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<String, [AnyObject]> {
|
||||
let stringData = data.data(usingEncoding: NSUTF8StringEncoding, allowLossyConversion: false)
|
||||
private func parseData(_ data: String) -> Either<String, [AnyObject]> {
|
||||
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
|
||||
|
||||
@ -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..<currentIndex.advanced(by: readLength)]
|
||||
advanceIndexBy(readLength)
|
||||
mutating func read(length: Int) -> String {
|
||||
let readString = message[currentIndex..<currentIndex.advanced(by: length)]
|
||||
advance(by: length)
|
||||
|
||||
return readString
|
||||
}
|
||||
|
||||
mutating func readUntilStringOccurence(string: String) -> String {
|
||||
mutating func readUntilStringOccurence(_ string: String) -> String {
|
||||
let substring = message[currentIndex..<message.endIndex]
|
||||
guard let foundRange = substring.range(of: string) else {
|
||||
currentIndex = message.endIndex
|
||||
@ -57,12 +57,12 @@ struct SocketStringReader {
|
||||
return substring
|
||||
}
|
||||
|
||||
advanceIndexBy(message.startIndex.distance(to: foundRange.startIndex) + 1)
|
||||
advance(by: message.startIndex.distance(to: foundRange.startIndex) + 1)
|
||||
|
||||
return substring.substring(to: foundRange.startIndex)
|
||||
}
|
||||
|
||||
mutating func readUntilEnd() -> String {
|
||||
return read(currentIndex.distance(to: message.endIndex))
|
||||
return read(length: currentIndex.distance(to: message.endIndex))
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<String,String> {
|
||||
var out = Dictionary<String,String>()
|
||||
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: [])
|
||||
}
|
||||
|
||||
@ -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<UInt8>(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<UInt8>, 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<UInt8>(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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user