update for latest swift 3

This commit is contained in:
Erik 2016-04-16 12:00:21 -04:00
parent 9f8db42584
commit e2db1a086d
21 changed files with 281 additions and 274 deletions

View File

@ -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])

View File

@ -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])

View File

@ -39,7 +39,7 @@
}
- (void)testOffSyntax {
[self.socket off:@"test"];
[self.socket offWithEvent:@"test"];
}
@end

View File

@ -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, "/")

View File

@ -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)
}

View File

@ -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)

View File

@ -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()) {

View File

@ -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()
}

View File

@ -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)
}

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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)
}
}
}

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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 {

View File

@ -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)})

View File

@ -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)

View File

@ -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

View File

@ -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))
}
}

View File

@ -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: [])
}

View File

@ -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)
}
}