tweaks to string reading

This commit is contained in:
Erik 2015-09-12 21:26:09 -04:00
parent ec76704631
commit f5f2a15133
4 changed files with 9 additions and 5 deletions

View File

@ -72,7 +72,7 @@ class SocketParserTest: XCTestCase {
} }
func testGenericParser() { func testGenericParser() {
var parser = SocketStringReader(message: "61-/swift,", currentIndex: "61-/swift,".startIndex) var parser = SocketStringReader(message: "61-/swift,")
XCTAssertEqual(parser.read(1), "6") XCTAssertEqual(parser.read(1), "6")
XCTAssertEqual(parser.currentCharacter, "1") XCTAssertEqual(parser.currentCharacter, "1")
XCTAssertEqual(parser.readUntilStringOccurence("-"), "1") XCTAssertEqual(parser.readUntilStringOccurence("-"), "1")

View File

@ -484,13 +484,12 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
doRequest(reqPolling) doRequest(reqPolling)
} }
// Translatation of engine.io-parser#decodePayload
private func parsePollingMessage(str: String) { private func parsePollingMessage(str: String) {
guard str.characters.count != 1 else { guard str.characters.count != 1 else {
return return
} }
var reader = SocketStringReader(message: str, currentIndex: str.startIndex) var reader = SocketStringReader(message: str)
while reader.hasNext { while reader.hasNext {
let n = reader.readUntilStringOccurence(":") let n = reader.readUntilStringOccurence(":")

View File

@ -57,9 +57,8 @@ class SocketParser {
} }
} }
// Translation of socket.io-client#decodeString
static func parseString(message: String) -> SocketPacket? { static func parseString(message: String) -> SocketPacket? {
var parser = SocketStringReader(message: message, currentIndex: message.startIndex) var parser = SocketStringReader(message: message)
guard let type = SocketPacket.PacketType(str: parser.read(1)) guard let type = SocketPacket.PacketType(str: parser.read(1))
else {return nil} else {return nil}
@ -89,6 +88,7 @@ class SocketParser {
} }
var idString = "" var idString = ""
while parser.hasNext { while parser.hasNext {
if let int = Int(parser.read(1)) { if let int = Int(parser.read(1)) {
idString += String(int) idString += String(int)

View File

@ -19,6 +19,11 @@ struct SocketStringReader {
return String(message[currentIndex]) return String(message[currentIndex])
} }
init(message: String) {
self.message = message
currentIndex = message.startIndex
}
mutating func advanceIndexBy(n: Int) { mutating func advanceIndexBy(n: Int) {
currentIndex = currentIndex.advancedBy(n) currentIndex = currentIndex.advancedBy(n)
} }