Skip to content

Commit ccc3745

Browse files
committed
fix for #196
1 parent 718dc27 commit ccc3745

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

SocketIO-iOSTests/SocketParserTest.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ class SocketParserTest: XCTestCase {
1919
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", [ [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], 19),
2020
"4/swift,": ("/swift", [], [], -1),
2121
"0/swift": ("/swift", [], [], -1),
22-
"1/swift": ("/swift", [], [], -1)]
22+
"1/swift": ("/swift", [], [], -1),
23+
"4\"ERROR\"": ("/", ["ERROR"], [], -1),
24+
"41": ("/", [1], [], -1)]
2325

2426
func testDisconnect() {
2527
let message = "1"
@@ -66,6 +68,16 @@ class SocketParserTest: XCTestCase {
6668
validateParseResult(message)
6769
}
6870

71+
func testErrorTypeString() {
72+
let message = "4\"ERROR\""
73+
validateParseResult(message)
74+
}
75+
76+
func testErrorTypeInt() {
77+
let message = "41"
78+
validateParseResult(message)
79+
}
80+
6981
func testInvalidInput() {
7082
let message = "8"
7183
switch SocketParser.parseString(message) {

SocketIOClientSwift/SocketEngine.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
2929
private typealias ProbeWaitQueue = [Probe]
3030

3131
private let allowedCharacterSet = NSCharacterSet(charactersInString: "!*'();:@&=+$,/?%#[]\" {}").invertedSet
32-
private let emitQueue = dispatch_queue_create("engineEmitQueue", DISPATCH_QUEUE_SERIAL)
33-
private let handleQueue = dispatch_queue_create("engineHandleQueue", DISPATCH_QUEUE_SERIAL)
32+
private let emitQueue = dispatch_queue_create("com.socketio.engineEmitQueue", DISPATCH_QUEUE_SERIAL)
33+
private let handleQueue = dispatch_queue_create("com.socketio.engineHandleQueue", DISPATCH_QUEUE_SERIAL)
3434
private let logType = "SocketEngine"
35-
private let parseQueue = dispatch_queue_create("engineParseQueue", DISPATCH_QUEUE_SERIAL)
35+
private let parseQueue = dispatch_queue_create("com.socketio.engineParseQueue", DISPATCH_QUEUE_SERIAL)
3636
private let session: NSURLSession!
3737
private let workQueue = NSOperationQueue()
3838

SocketIOClientSwift/SocketIOClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import Foundation
2626

2727
public final class SocketIOClient: NSObject, SocketEngineClient {
28-
private let emitQueue = dispatch_queue_create("emitQueue", DISPATCH_QUEUE_SERIAL)
28+
private let emitQueue = dispatch_queue_create("com.socketio.emitQueue", DISPATCH_QUEUE_SERIAL)
2929
private let handleQueue: dispatch_queue_t!
3030

3131
public let socketURL: String

SocketIOClientSwift/SocketParser.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class SocketParser {
5454
case .Disconnect:
5555
socket.didDisconnect("Got Disconnect")
5656
case .Error:
57-
socket.didError("Error: \(pack.data)")
57+
socket.didError(pack.data)
5858
default:
5959
Logger.log("Got invalid packet: %@", type: "SocketParser", args: pack.description)
6060
}
@@ -93,7 +93,11 @@ class SocketParser {
9393

9494
var idString = ""
9595

96-
while parser.hasNext {
96+
if type == .Error {
97+
parser.advanceIndexBy(-1)
98+
}
99+
100+
while parser.hasNext && type != .Error {
97101
if let int = Int(parser.read(1)) {
98102
idString += String(int)
99103
} else {
@@ -107,7 +111,13 @@ class SocketParser {
107111

108112
switch parseData(noPlaceholders) {
109113
case .Left(let err):
110-
return .Left(err)
114+
// If first you don't succeed, try again
115+
if case let .Right(data) = parseData("\([noPlaceholders as AnyObject])") {
116+
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
117+
nsp: namespace ?? "/", placeholders: placeholders))
118+
} else {
119+
return .Left(err)
120+
}
111121
case .Right(let data):
112122
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
113123
nsp: namespace ?? "/", placeholders: placeholders))

0 commit comments

Comments
 (0)