complete use of parser

This commit is contained in:
Lukas Schmidt 2015-09-07 14:44:43 +02:00 committed by Lukas Schmidt
parent 8bae7d06d2
commit fb9b19820b
2 changed files with 15 additions and 24 deletions

View File

@ -16,7 +16,7 @@ class SocketParserTest: XCTestCase {
"2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn", ["test3", "test4"]], [], -1), "2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn", ["test3", "test4"]], [], -1),
"51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], -1), "51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], -1),
"3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"]], [], 0), "3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"]], [], 0),
"61-/swift,9[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", [ [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], 9), "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),
"10": ("/swift", [], [], -1)] "10": ("/swift", [], [], -1)]
@ -46,7 +46,7 @@ class SocketParserTest: XCTestCase {
} }
func testNameSpaceBinaryAckParse() { func testNameSpaceBinaryAckParse() {
let message = "61-/swift,9[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]" let message = "61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]"
validateParseResult(message) validateParseResult(message)
} }

View File

@ -122,9 +122,7 @@ class SocketParser {
return SocketPacket(type: type, nsp: "/") return SocketPacket(type: type, nsp: "/")
} }
var id: Int?
var nsp:String? var nsp:String?
var i = 0
var placeholders = -1 var placeholders = -1
if type == .BinaryEvent || type == .BinaryAck { if type == .BinaryEvent || type == .BinaryAck {
@ -134,41 +132,34 @@ class SocketParser {
NSLog("Error parsing \(str)") NSLog("Error parsing \(str)")
return nil return nil
} }
i = parser.currentIndex - 1
} }
if parser.currentCharacter == "/" { if parser.currentCharacter == "/" {
nsp = parser.readUntilStringOccurence(",") nsp = parser.readUntilStringOccurence(",")
i = parser.currentIndex parser.currentIndex++
} }
if parser.currentIndex + 1 >= parser.messageCharacters.count { if parser.currentIndex >= parser.messageCharacters.count {
return SocketPacket(type: type, id: id ?? -1, return SocketPacket(type: type, id: -1,
nsp: nsp ?? "/", placeholders: placeholders) nsp: nsp ?? "/", placeholders: placeholders)
} }
let next = String(messageCharacters[i + 1])
if Int(next) != nil { var idString = ""
var c = "" while parser.currentIndex < messageCharacters.count {
while ++i < messageCharacters.count { if let next = parser.read(1), let int = Int(next) {
if let int = Int(String(messageCharacters[i])) { idString += String(int)
c += String(int)
} else { } else {
--i parser.currentIndex -= 2
break break
} }
} }
id = Int(c) if parser.currentIndex < messageCharacters.count {
} let d = str[str.startIndex.advancedBy(parser.currentIndex + 1)...str.startIndex.advancedBy(str.characters.count-1)]
if ++i < messageCharacters.count {
let d = str[str.startIndex.advancedBy(i)...str.startIndex.advancedBy(str.characters.count-1)]
let noPlaceholders = d["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] ~= "\"~~$2\"" let noPlaceholders = d["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] ~= "\"~~$2\""
let data = SocketParser.parseData(noPlaceholders) as? [AnyObject] ?? [noPlaceholders] let data = SocketParser.parseData(noPlaceholders) as? [AnyObject] ?? [noPlaceholders]
return SocketPacket(type: type, data: data, id: id ?? -1, return SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
nsp: nsp ?? "/", placeholders: placeholders) nsp: nsp ?? "/", placeholders: placeholders)
} }