Tell users what namespace was connected to

This commit is contained in:
Erik 2017-07-04 08:29:02 -04:00
parent 1a42580826
commit 206e1eed4f
No known key found for this signature in database
GPG Key ID: 4930B7C5FBC1A69D
3 changed files with 27 additions and 27 deletions

View File

@ -203,12 +203,12 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
return OnAckCallback(ackNumber: currentAck, items: items, socket: self) return OnAckCallback(ackNumber: currentAck, items: items, socket: self)
} }
func didConnect() { func didConnect(toNamespace namespace: String) {
DefaultSocketLogger.Logger.log("Socket connected", type: logType) DefaultSocketLogger.Logger.log("Socket connected", type: logType)
status = .connected status = .connected
handleClientEvent(.connect, data: []) handleClientEvent(.connect, data: [namespace])
} }
func didDisconnect(reason: String) { func didDisconnect(reason: String) {

View File

@ -29,7 +29,7 @@ protocol SocketIOClientSpec : class {
var nsp: String { get set } var nsp: String { get set }
var waitingPackets: [SocketPacket] { get set } var waitingPackets: [SocketPacket] { get set }
func didConnect() func didConnect(toNamespace namespace: String)
func didDisconnect(reason: String) func didDisconnect(reason: String)
func didError(reason: String) func didError(reason: String)
func handleAck(_ ack: Int, data: [Any]) func handleAck(_ ack: Int, data: [Any])

View File

@ -31,15 +31,15 @@ extension SocketParsable where Self: SocketIOClientSpec {
private func isCorrectNamespace(_ nsp: String) -> Bool { private func isCorrectNamespace(_ nsp: String) -> Bool {
return nsp == self.nsp return nsp == self.nsp
} }
private func handleConnect(_ packetNamespace: String) { private func handleConnect(_ packetNamespace: String) {
if packetNamespace == "/" && nsp != "/" { if packetNamespace == "/" && nsp != "/" {
joinNamespace(nsp) joinNamespace(nsp)
} else { } else {
didConnect() didConnect(toNamespace: packetNamespace)
} }
} }
private func handlePacket(_ pack: SocketPacket) { private func handlePacket(_ pack: SocketPacket) {
switch pack.type { switch pack.type {
case .event where isCorrectNamespace(pack.nsp): case .event where isCorrectNamespace(pack.nsp):
@ -60,22 +60,22 @@ extension SocketParsable where Self: SocketIOClientSpec {
DefaultSocketLogger.Logger.log("Got invalid packet: %@", type: "SocketParser", args: pack.description) DefaultSocketLogger.Logger.log("Got invalid packet: %@", type: "SocketParser", args: pack.description)
} }
} }
/// Parses a messsage from the engine. Returning either a string error or a complete SocketPacket /// Parses a messsage from the engine. Returning either a string error or a complete SocketPacket
func parseString(_ message: String) -> Either<String, SocketPacket> { func parseString(_ message: String) -> Either<String, SocketPacket> {
var reader = SocketStringReader(message: message) var reader = SocketStringReader(message: message)
guard let type = Int(reader.read(count: 1)).flatMap({ SocketPacket.PacketType(rawValue: $0) }) else { guard let type = Int(reader.read(count: 1)).flatMap({ SocketPacket.PacketType(rawValue: $0) }) else {
return .left("Invalid packet type") return .left("Invalid packet type")
} }
if !reader.hasNext { if !reader.hasNext {
return .right(SocketPacket(type: type, nsp: "/")) return .right(SocketPacket(type: type, nsp: "/"))
} }
var namespace = "/" var namespace = "/"
var placeholders = -1 var placeholders = -1
if type == .binaryEvent || type == .binaryAck { if type == .binaryEvent || type == .binaryAck {
if let holders = Int(reader.readUntilOccurence(of: "-")) { if let holders = Int(reader.readUntilOccurence(of: "-")) {
placeholders = holders placeholders = holders
@ -83,17 +83,17 @@ extension SocketParsable where Self: SocketIOClientSpec {
return .left("Invalid packet") return .left("Invalid packet")
} }
} }
if reader.currentCharacter == "/" { if reader.currentCharacter == "/" {
namespace = reader.readUntilOccurence(of: ",") namespace = reader.readUntilOccurence(of: ",")
} }
if !reader.hasNext { if !reader.hasNext {
return .right(SocketPacket(type: type, nsp: namespace, placeholders: placeholders)) return .right(SocketPacket(type: type, nsp: namespace, placeholders: placeholders))
} }
var idString = "" var idString = ""
if type == .error { if type == .error {
reader.advance(by: -1) reader.advance(by: -1)
} else { } else {
@ -106,13 +106,13 @@ extension SocketParsable where Self: SocketIOClientSpec {
} }
} }
} }
var dataArray = String(message.utf16[message.utf16.index(reader.currentIndex, offsetBy: 1)..<message.utf16.endIndex])! var dataArray = String(message.utf16[message.utf16.index(reader.currentIndex, offsetBy: 1)..<message.utf16.endIndex])!
if type == .error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") { if type == .error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") {
dataArray = "[" + dataArray + "]" dataArray = "[" + dataArray + "]"
} }
switch parseData(dataArray) { switch parseData(dataArray) {
case let .left(err): case let .left(err):
return .left(err) return .left(err)
@ -121,7 +121,7 @@ extension SocketParsable where Self: SocketIOClientSpec {
nsp: namespace, placeholders: placeholders)) nsp: namespace, placeholders: placeholders))
} }
} }
// Parses data for events // Parses data for events
private func parseData(_ data: String) -> Either<String, [Any]> { private func parseData(_ data: String) -> Either<String, [Any]> {
do { do {
@ -130,13 +130,13 @@ extension SocketParsable where Self: SocketIOClientSpec {
return .left("Error parsing data for packet") return .left("Error parsing data for packet")
} }
} }
// Parses messages recieved // Parses messages recieved
func parseSocketMessage(_ message: String) { func parseSocketMessage(_ message: String) {
guard !message.isEmpty else { return } guard !message.isEmpty else { return }
DefaultSocketLogger.Logger.log("Parsing %@", type: "SocketParser", args: message) DefaultSocketLogger.Logger.log("Parsing %@", type: "SocketParser", args: message)
switch parseString(message) { switch parseString(message) {
case let .left(err): case let .left(err):
DefaultSocketLogger.Logger.error("\(err): %@", type: "SocketParser", args: message) DefaultSocketLogger.Logger.error("\(err): %@", type: "SocketParser", args: message)
@ -145,18 +145,18 @@ extension SocketParsable where Self: SocketIOClientSpec {
handlePacket(pack) handlePacket(pack)
} }
} }
func parseBinaryData(_ data: Data) { func parseBinaryData(_ data: Data) {
guard !waitingPackets.isEmpty else { guard !waitingPackets.isEmpty else {
DefaultSocketLogger.Logger.error("Got data when not remaking packet", type: "SocketParser") DefaultSocketLogger.Logger.error("Got data when not remaking packet", type: "SocketParser")
return return
} }
// Should execute event? // Should execute event?
guard waitingPackets[waitingPackets.count - 1].addData(data) else { return } guard waitingPackets[waitingPackets.count - 1].addData(data) else { return }
let packet = waitingPackets.removeLast() let packet = waitingPackets.removeLast()
if packet.type != .binaryAck { if packet.type != .binaryAck {
handleEvent(packet.event, data: packet.args, isInternalMessage: false, withAck: packet.id) handleEvent(packet.event, data: packet.args, isInternalMessage: false, withAck: packet.id)
} else { } else {