Tell users what namespace was connected to
This commit is contained in:
parent
1a42580826
commit
206e1eed4f
@ -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) {
|
||||||
|
|||||||
@ -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])
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user