redo parsing

This commit is contained in:
Erik 2014-12-18 15:36:39 -05:00
parent 013395a4c4
commit 8cd63463c0
2 changed files with 31 additions and 54 deletions

View File

@ -27,7 +27,7 @@ socket.on("connect") {data in
socket.on("jsonTest") {data in socket.on("jsonTest") {data in
if let json = data as? NSDictionary { if let json = data as? NSDictionary {
println(json["test"]!) // foo bar println(json["test"]!) // foo bar
} }
} }
@ -38,15 +38,15 @@ socket.on("boolTest") {data in
} }
socket.on("arrayTest") {data in socket.on("arrayTest") {data in
if let array = data as? [Any] { if let array = data as? NSArray {
println(array[0]) // 2 println(array[0]) // 2
println(array[1]) // "test" println(array[1]) // "test"
} }
} }
socket.on("intTest") {data in socket.on("intTest") {data in
if let stringData = data as? NSString { if let intData = data as? Int {
println(stringData.integerValue) println(intData)
} }
} }
socket.connect() socket.connect()

View File

@ -9,14 +9,14 @@ import Foundation
private class EventHandler: NSObject { private class EventHandler: NSObject {
let event:String! let event:String!
let callback:((data:Any?) -> Void)! let callback:((data:AnyObject?) -> Void)!
init(event:String, callback:((data:Any?) -> Void)?) { init(event:String, callback:((data:AnyObject?) -> Void)?) {
self.event = event self.event = event
self.callback = callback self.callback = callback
} }
func executeCallback(args:Any?) { func executeCallback(args:AnyObject?) {
if (args != nil) { if (args != nil) {
callback(data: args!) callback(data: args!)
} else { } else {
@ -27,11 +27,11 @@ private class EventHandler: NSObject {
private struct Event { private struct Event {
var event:String! var event:String!
var args:Any! var args:AnyObject!
var placeholders:Int! var placeholders:Int!
var currentPlace = 0 var currentPlace = 0
init(event:String, args:Any?, placeholders:Int = 0) { init(event:String, args:AnyObject?, placeholders:Int = 0) {
self.event = event self.event = event
self.args = args? self.args = args?
self.placeholders = placeholders self.placeholders = placeholders
@ -152,7 +152,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
} }
// Sends a message // Sends a message
func emit(event:String, args:Any? = nil) { func emit(event:String, args:AnyObject? = nil) {
if (!self.connected) { if (!self.connected) {
return return
} }
@ -190,9 +190,9 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
} }
// Handles events // Handles events
func handleEvent(#event:String, var data:Any?) { func handleEvent(#event:String, var data:AnyObject?) {
// println("Should do event: \(event) with data: \(data)") // println("Should do event: \(event) with data: \(data)")
data = parseData(data) // data = parseData(data as? String)
for handler in self.handlers { for handler in self.handlers {
if (handler.event == event) { if (handler.event == event) {
if (data == nil) { if (data == nil) {
@ -205,7 +205,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
} }
// Adds handlers to the socket // Adds handlers to the socket
func on(name:String, callback:((data:Any?) -> Void)?) { func on(name:String, callback:((data:AnyObject?) -> Void)?) {
let handler = EventHandler(event: name, callback: callback) let handler = EventHandler(event: name, callback: callback)
self.handlers.append(handler) self.handlers.append(handler)
} }
@ -215,34 +215,22 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
self.connect() self.connect()
} }
// temporary until I redo how messages are parsed // Parses data for events
private func parseData(data:Any?) -> Any? { private func parseData(data:String?) -> AnyObject? {
if (data == nil) { if (data == nil) {
return nil return nil
} }
var err:NSError?
if let json = self.toJSON(data) { let stringData = data!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
return json let parsed:AnyObject? = NSJSONSerialization.JSONObjectWithData(stringData!,
options: NSJSONReadingOptions.AllowFragments, error: &err)
if (err != nil) {
// println(err)
return nil
} }
let dataAsString = data as String return parsed
if (dataAsString == "true") {
return true
} else if (dataAsString == "false") {
return false
} else if (dataAsString.hasPrefix("[") && dataAsString.hasSuffix("]")) {
var trimArray = Array(dataAsString)
trimArray.removeAtIndex(0)
trimArray.removeAtIndex(trimArray.count - 1)
var ret = String(trimArray).componentsSeparatedByString(",")
var returnArray = [Any]()
for item in ret {
returnArray.append(item)
}
return returnArray
}
return data
} }
// Parses a NSDictionary, looking for NSData objects // Parses a NSDictionary, looking for NSData objects
@ -273,6 +261,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
if (message == nil) { if (message == nil) {
return return
} }
// println(message!) // println(message!)
if let stringMessage = message as? String { if let stringMessage = message as? String {
@ -310,7 +299,11 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
data = nil data = nil
} else { } else {
data = messageInternals[2] data = messageInternals[2]
}
if let json:AnyObject = self.parseData(data) {
self.handleEvent(event: event, data: json)
return
} }
self.handleEvent(event: event, data: data) self.handleEvent(event: event, data: data)
@ -365,8 +358,8 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
let shouldExecute = self.lastSocketMessage?.fillInPlaceHolder(data) let shouldExecute = self.lastSocketMessage?.fillInPlaceHolder(data)
var event = self.lastSocketMessage!.event var event = self.lastSocketMessage!.event
var args = self.lastSocketMessage!.args var args:AnyObject? = self.parseData(self.lastSocketMessage!.args as? String)
// println(args)
if (shouldExecute != nil && shouldExecute!) { if (shouldExecute != nil && shouldExecute!) {
self.handleEvent(event: event, data: args) self.handleEvent(event: event, data: args)
} }
@ -386,22 +379,6 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
selector: Selector("sendPing"), userInfo: nil, repeats: true) selector: Selector("sendPing"), userInfo: nil, repeats: true)
} }
// Helper method
func toJSON(data:Any?) -> NSDictionary? {
if (data == nil || data is Bool || data is Int) {
return nil
}
var err:NSError?
var stringData = data as String
var JSONData = stringData.dataUsingEncoding(NSUTF8StringEncoding)
var json:AnyObject? = NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.allZeros, error: &err)
if (err != nil || json == nil) {
// println(err?.localizedDescription)
return nil
}
return json as? NSDictionary
}
// Called when a message is recieved // Called when a message is recieved
func webSocket(webSocket: SRWebSocket!, didReceiveMessage message:AnyObject?) { func webSocket(webSocket: SRWebSocket!, didReceiveMessage message:AnyObject?) {
// println(message) // println(message)