redo parsing

This commit is contained in:
Erik 2014-12-16 10:47:18 -05:00
parent 6dd40cffab
commit 013395a4c4
2 changed files with 73 additions and 24 deletions

View File

@ -25,9 +25,28 @@ socket.on("connect") {data in
])
}
socket.on("foobar") {data in
if let json = socket.toJSON(data) {
println(json["test"])
socket.on("jsonTest") {data in
if let json = data as? NSDictionary {
println(json["test"]!) // foo bar
}
}
socket.on("boolTest") {data in
if let bool = data as? Bool {
println(bool) // true
}
}
socket.on("arrayTest") {data in
if let array = data as? [Any] {
println(array[0]) // 2
println(array[1]) // "test"
}
}
socket.on("intTest") {data in
if let stringData = data as? NSString {
println(stringData.integerValue)
}
}
socket.connect()
@ -42,16 +61,12 @@ socket.emit("testObject", args: [
// Recieving data
socket.on("dataTest") {data in
var err:NSError?
var stringData = data as String
var data = stringData.dataUsingEncoding(NSUTF8StringEncoding)
var json = NSJSONSerialization.JSONObjectWithData(data!,
options: NSJSONReadingOptions.AllowFragments, error: &err) as NSDictionary
var bufData = NSData(base64EncodedString: (json["buf"] as String),
options: NSDataBase64DecodingOptions.allZeros)
if let dataAsString = NSString(data: bufData!, encoding: NSUTF8StringEncoding) {
println(dataAsString)
if let json = data as? NSDictionary {
var imageData = NSData(base64EncodedString: (json["test"] as String),
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
if let dataAsString = NSString(data: imageData!, encoding: NSUTF8StringEncoding) {
println(dataAsString)
}
}
}
```

View File

@ -190,16 +190,16 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
}
// Handles events
func handleEvent(#event:String, data:Any?) {
func handleEvent(#event:String, var data:Any?) {
// println("Should do event: \(event) with data: \(data)")
data = parseData(data)
for handler in self.handlers {
if (handler.event == event) {
if (data != nil) {
handler.executeCallback(data)
} else {
if (data == nil) {
handler.executeCallback(nil)
continue
}
handler.executeCallback(data)
}
}
}
@ -215,6 +215,36 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
self.connect()
}
// temporary until I redo how messages are parsed
private func parseData(data:Any?) -> Any? {
if (data == nil) {
return nil
}
if let json = self.toJSON(data) {
return json
}
let dataAsString = data as String
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
private func parseNSDictionary(#dict:NSDictionary) -> (NSDictionary, Bool, [NSData]?) {
var returnDict = NSMutableDictionary()
@ -275,13 +305,14 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
let messageInternals = RegexMutable(messagePart)["\\[\"(.*?)\",(.*?)?\\]$"].groups()
if (messageInternals != nil && messageInternals.count > 2) {
let event = messageInternals[1]
var data:Any!
var data:String?
if (messageInternals[2] == "") {
data = nil
} else {
data = messageInternals[2]
}
self.handleEvent(event: event, data: data)
return
}
@ -356,16 +387,19 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
}
// Helper method
func toJSON(data:Any!) -> NSDictionary? {
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 = NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.allZeros, error: &err) as NSDictionary
if (err != nil) {
println(err?.localizedDescription)
var json:AnyObject? = NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.allZeros, error: &err)
if (err != nil || json == nil) {
// println(err?.localizedDescription)
return nil
}
return json
return json as? NSDictionary
}
// Called when a message is recieved