redo parsing
This commit is contained in:
		
							parent
							
								
									013395a4c4
								
							
						
					
					
						commit
						8cd63463c0
					
				@ -27,7 +27,7 @@ socket.on("connect") {data in
 | 
			
		||||
 | 
			
		||||
socket.on("jsonTest") {data in
 | 
			
		||||
    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
 | 
			
		||||
    if let array = data as? [Any] {
 | 
			
		||||
    if let array = data as? NSArray {
 | 
			
		||||
        println(array[0]) // 2
 | 
			
		||||
        println(array[1]) // "test"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
socket.on("intTest") {data in
 | 
			
		||||
    if let stringData = data as? NSString {
 | 
			
		||||
        println(stringData.integerValue)
 | 
			
		||||
    if let intData = data as? Int {
 | 
			
		||||
        println(intData)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
socket.connect()
 | 
			
		||||
 | 
			
		||||
@ -9,14 +9,14 @@ import Foundation
 | 
			
		||||
 | 
			
		||||
private class EventHandler: NSObject {
 | 
			
		||||
    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.callback = callback
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func executeCallback(args:Any?) {
 | 
			
		||||
    func executeCallback(args:AnyObject?) {
 | 
			
		||||
        if (args != nil) {
 | 
			
		||||
            callback(data: args!)
 | 
			
		||||
        } else {
 | 
			
		||||
@ -27,11 +27,11 @@ private class EventHandler: NSObject {
 | 
			
		||||
 | 
			
		||||
private struct Event {
 | 
			
		||||
    var event:String!
 | 
			
		||||
    var args:Any!
 | 
			
		||||
    var args:AnyObject!
 | 
			
		||||
    var placeholders:Int!
 | 
			
		||||
    var currentPlace = 0
 | 
			
		||||
    
 | 
			
		||||
    init(event:String, args:Any?, placeholders:Int = 0) {
 | 
			
		||||
    init(event:String, args:AnyObject?, placeholders:Int = 0) {
 | 
			
		||||
        self.event = event
 | 
			
		||||
        self.args = args?
 | 
			
		||||
        self.placeholders = placeholders
 | 
			
		||||
@ -152,7 +152,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Sends a message
 | 
			
		||||
    func emit(event:String, args:Any? = nil) {
 | 
			
		||||
    func emit(event:String, args:AnyObject? = nil) {
 | 
			
		||||
        if (!self.connected) {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
@ -190,9 +190,9 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Handles events
 | 
			
		||||
    func handleEvent(#event:String, var data:Any?) {
 | 
			
		||||
    func handleEvent(#event:String, var data:AnyObject?) {
 | 
			
		||||
        // println("Should do event: \(event) with data: \(data)")
 | 
			
		||||
        data = parseData(data)
 | 
			
		||||
        // data = parseData(data as? String)
 | 
			
		||||
        for handler in self.handlers {
 | 
			
		||||
            if (handler.event == event) {
 | 
			
		||||
                if (data == nil) {
 | 
			
		||||
@ -205,7 +205,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // 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)
 | 
			
		||||
        self.handlers.append(handler)
 | 
			
		||||
    }
 | 
			
		||||
@ -215,34 +215,22 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
        self.connect()
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // temporary until I redo how messages are parsed
 | 
			
		||||
    private func parseData(data:Any?) -> Any? {
 | 
			
		||||
    // Parses data for events
 | 
			
		||||
    private func parseData(data:String?) -> AnyObject? {
 | 
			
		||||
        if (data == nil) {
 | 
			
		||||
            return nil
 | 
			
		||||
        }
 | 
			
		||||
        var err:NSError?
 | 
			
		||||
        
 | 
			
		||||
        if let json = self.toJSON(data) {
 | 
			
		||||
            return json
 | 
			
		||||
        let stringData = data!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
 | 
			
		||||
        let parsed:AnyObject? = NSJSONSerialization.JSONObjectWithData(stringData!,
 | 
			
		||||
            options: NSJSONReadingOptions.AllowFragments, error: &err)
 | 
			
		||||
        if (err != nil) {
 | 
			
		||||
            // println(err)
 | 
			
		||||
            return nil
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        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
 | 
			
		||||
        return parsed
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Parses a NSDictionary, looking for NSData objects
 | 
			
		||||
@ -273,6 +261,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
        if (message == nil) {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // println(message!)
 | 
			
		||||
        
 | 
			
		||||
        if let stringMessage = message as? String {
 | 
			
		||||
@ -310,7 +299,11 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
                        data = nil
 | 
			
		||||
                    } else {
 | 
			
		||||
                        data = messageInternals[2]
 | 
			
		||||
                        
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    if let json:AnyObject = self.parseData(data) {
 | 
			
		||||
                        self.handleEvent(event: event, data: json)
 | 
			
		||||
                        return
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    self.handleEvent(event: event, data: data)
 | 
			
		||||
@ -365,8 +358,8 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
        
 | 
			
		||||
        let shouldExecute = self.lastSocketMessage?.fillInPlaceHolder(data)
 | 
			
		||||
        var event = self.lastSocketMessage!.event
 | 
			
		||||
        var args = self.lastSocketMessage!.args
 | 
			
		||||
        // println(args)
 | 
			
		||||
        var args:AnyObject? = self.parseData(self.lastSocketMessage!.args as? String)
 | 
			
		||||
        
 | 
			
		||||
        if (shouldExecute != nil && shouldExecute!) {
 | 
			
		||||
            self.handleEvent(event: event, data: args)
 | 
			
		||||
        }
 | 
			
		||||
@ -386,22 +379,6 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
 | 
			
		||||
            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
 | 
			
		||||
    func webSocket(webSocket: SRWebSocket!, didReceiveMessage message:AnyObject?) {
 | 
			
		||||
        // println(message)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user