This commit is contained in:
parent
718dc27089
commit
ccc3745bb8
@ -19,7 +19,9 @@ class SocketParserTest: XCTestCase {
|
|||||||
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", [ [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], 19),
|
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", [ [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], 19),
|
||||||
"4/swift,": ("/swift", [], [], -1),
|
"4/swift,": ("/swift", [], [], -1),
|
||||||
"0/swift": ("/swift", [], [], -1),
|
"0/swift": ("/swift", [], [], -1),
|
||||||
"1/swift": ("/swift", [], [], -1)]
|
"1/swift": ("/swift", [], [], -1),
|
||||||
|
"4\"ERROR\"": ("/", ["ERROR"], [], -1),
|
||||||
|
"41": ("/", [1], [], -1)]
|
||||||
|
|
||||||
func testDisconnect() {
|
func testDisconnect() {
|
||||||
let message = "1"
|
let message = "1"
|
||||||
@ -66,6 +68,16 @@ class SocketParserTest: XCTestCase {
|
|||||||
validateParseResult(message)
|
validateParseResult(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testErrorTypeString() {
|
||||||
|
let message = "4\"ERROR\""
|
||||||
|
validateParseResult(message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testErrorTypeInt() {
|
||||||
|
let message = "41"
|
||||||
|
validateParseResult(message)
|
||||||
|
}
|
||||||
|
|
||||||
func testInvalidInput() {
|
func testInvalidInput() {
|
||||||
let message = "8"
|
let message = "8"
|
||||||
switch SocketParser.parseString(message) {
|
switch SocketParser.parseString(message) {
|
||||||
|
|||||||
@ -29,10 +29,10 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
private typealias ProbeWaitQueue = [Probe]
|
private typealias ProbeWaitQueue = [Probe]
|
||||||
|
|
||||||
private let allowedCharacterSet = NSCharacterSet(charactersInString: "!*'();:@&=+$,/?%#[]\" {}").invertedSet
|
private let allowedCharacterSet = NSCharacterSet(charactersInString: "!*'();:@&=+$,/?%#[]\" {}").invertedSet
|
||||||
private let emitQueue = dispatch_queue_create("engineEmitQueue", DISPATCH_QUEUE_SERIAL)
|
private let emitQueue = dispatch_queue_create("com.socketio.engineEmitQueue", DISPATCH_QUEUE_SERIAL)
|
||||||
private let handleQueue = dispatch_queue_create("engineHandleQueue", DISPATCH_QUEUE_SERIAL)
|
private let handleQueue = dispatch_queue_create("com.socketio.engineHandleQueue", DISPATCH_QUEUE_SERIAL)
|
||||||
private let logType = "SocketEngine"
|
private let logType = "SocketEngine"
|
||||||
private let parseQueue = dispatch_queue_create("engineParseQueue", DISPATCH_QUEUE_SERIAL)
|
private let parseQueue = dispatch_queue_create("com.socketio.engineParseQueue", DISPATCH_QUEUE_SERIAL)
|
||||||
private let session: NSURLSession!
|
private let session: NSURLSession!
|
||||||
private let workQueue = NSOperationQueue()
|
private let workQueue = NSOperationQueue()
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public final class SocketIOClient: NSObject, SocketEngineClient {
|
public final class SocketIOClient: NSObject, SocketEngineClient {
|
||||||
private let emitQueue = dispatch_queue_create("emitQueue", DISPATCH_QUEUE_SERIAL)
|
private let emitQueue = dispatch_queue_create("com.socketio.emitQueue", DISPATCH_QUEUE_SERIAL)
|
||||||
private let handleQueue: dispatch_queue_t!
|
private let handleQueue: dispatch_queue_t!
|
||||||
|
|
||||||
public let socketURL: String
|
public let socketURL: String
|
||||||
|
|||||||
@ -54,7 +54,7 @@ class SocketParser {
|
|||||||
case .Disconnect:
|
case .Disconnect:
|
||||||
socket.didDisconnect("Got Disconnect")
|
socket.didDisconnect("Got Disconnect")
|
||||||
case .Error:
|
case .Error:
|
||||||
socket.didError("Error: \(pack.data)")
|
socket.didError(pack.data)
|
||||||
default:
|
default:
|
||||||
Logger.log("Got invalid packet: %@", type: "SocketParser", args: pack.description)
|
Logger.log("Got invalid packet: %@", type: "SocketParser", args: pack.description)
|
||||||
}
|
}
|
||||||
@ -93,7 +93,11 @@ class SocketParser {
|
|||||||
|
|
||||||
var idString = ""
|
var idString = ""
|
||||||
|
|
||||||
while parser.hasNext {
|
if type == .Error {
|
||||||
|
parser.advanceIndexBy(-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
while parser.hasNext && type != .Error {
|
||||||
if let int = Int(parser.read(1)) {
|
if let int = Int(parser.read(1)) {
|
||||||
idString += String(int)
|
idString += String(int)
|
||||||
} else {
|
} else {
|
||||||
@ -107,7 +111,13 @@ class SocketParser {
|
|||||||
|
|
||||||
switch parseData(noPlaceholders) {
|
switch parseData(noPlaceholders) {
|
||||||
case .Left(let err):
|
case .Left(let err):
|
||||||
return .Left(err)
|
// If first you don't succeed, try again
|
||||||
|
if case let .Right(data) = parseData("\([noPlaceholders as AnyObject])") {
|
||||||
|
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
||||||
|
nsp: namespace ?? "/", placeholders: placeholders))
|
||||||
|
} else {
|
||||||
|
return .Left(err)
|
||||||
|
}
|
||||||
case .Right(let data):
|
case .Right(let data):
|
||||||
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
||||||
nsp: namespace ?? "/", placeholders: placeholders))
|
nsp: namespace ?? "/", placeholders: placeholders))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user