diff --git a/SocketIOClientSwift/SocketEngine.swift b/SocketIOClientSwift/SocketEngine.swift index bf0c70d..ff7b1fd 100644 --- a/SocketIOClientSwift/SocketEngine.swift +++ b/SocketIOClientSwift/SocketEngine.swift @@ -69,11 +69,11 @@ public final class SocketEngine: NSObject, WebSocketDelegate { var urlWebSocket: String? var ws: WebSocket? - public enum PacketType: Int { + @objc public enum PacketType: Int { case Open, Close, Ping, Pong, Message, Upgrade, Noop - init?(str: String?) { - if let value = Int(str ?? ""), raw = PacketType(rawValue: value) { + init?(str: String) { + if let value = Int(str), raw = PacketType(rawValue: value) { self = raw } else { return nil @@ -547,7 +547,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate { fixDoubleUTF8(&message) } - let type = PacketType(str: (message["^(\\d)"].groups()?[1])) ?? { + let type = PacketType(str: (message["^(\\d)"].groups()?[1]) ?? "") ?? { self.checkIfMessageIsBase64Binary(message) return PacketType.Noop }() @@ -687,23 +687,6 @@ public final class SocketEngine: NSObject, WebSocketDelegate { } } - /** - Write a message, independent of transport. For Objective-C. withData should be an NSArray of NSData - */ - public func writeObjc(msg: String, withType type: Int, withData data: NSArray?) { - if let pType = PacketType(rawValue: type) { - var arr = [NSData]() - - if let data = data { - for d in data { - arr.append(d as! NSData) - } - } - - write(msg, withType: pType, withData: arr) - } - } - // Delagate methods public func websocketDidConnect(socket:WebSocket) { diff --git a/SocketIOClientSwift/SocketGenericParser.swift b/SocketIOClientSwift/SocketGenericParser.swift index 037ebd5..af50c9a 100644 --- a/SocketIOClientSwift/SocketGenericParser.swift +++ b/SocketIOClientSwift/SocketGenericParser.swift @@ -36,9 +36,11 @@ struct SocketGenericParser { let range = Range(start: startIndex, end: message.endIndex) let subString = message.substringWithRange(range) as NSString let foundRange = subString.rangeOfString(string) + if foundRange.location == Int.max { return nil } + currentIndex = currentIndex + foundRange.location return subString.substringToIndex(foundRange.location) diff --git a/SocketIOClientSwift/SocketParser.swift b/SocketIOClientSwift/SocketParser.swift index fc637a6..1c06328 100644 --- a/SocketIOClientSwift/SocketParser.swift +++ b/SocketIOClientSwift/SocketParser.swift @@ -30,6 +30,7 @@ class SocketParser { private static func handleEvent(p: SocketPacket, socket: SocketIOClient) { guard isCorrectNamespace(p.nsp, socket) else { return } + socket.handleEvent(p.event, data: p.args, isInternalMessage: false, wantsAck: p.id) } @@ -59,10 +60,9 @@ class SocketParser { // Translation of socket.io-client#decodeString static func parseString(message: String) -> SocketPacket? { var parser = SocketGenericParser(message: message, currentIndex: 0) - guard let typeString = parser.read(1), - let type = SocketPacket.PacketType(str: typeString) else { - return nil - } + + guard let typeString = parser.read(1), type = SocketPacket.PacketType(str: typeString) + else {return nil} if parser.messageCharacters.count == 1 { return SocketPacket(type: type, nsp: "/") @@ -129,6 +129,7 @@ class SocketParser { Logger.error("Parsing message", type: "SocketParser", args: message) return } + Logger.log("Decoded packet as: %@", type: "SocketParser", args: pack.description) switch pack.type {