Change how recieved data is handled
This commit is contained in:
parent
0fef6d88a1
commit
b455370466
31
README.md
31
README.md
@ -70,24 +70,27 @@ socket.on("intTest") {data in
|
|||||||
println(intData)
|
println(intData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
socket.connect()
|
|
||||||
```
|
|
||||||
|
|
||||||
Binary support is not guaranteed to work. All recieved data is encoded in base64 strings.
|
|
||||||
```swift
|
|
||||||
// Sending binary
|
|
||||||
socket.emit("testObject", args: [
|
|
||||||
"data": "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!,
|
|
||||||
"test": true])
|
|
||||||
|
|
||||||
// Recieving data
|
// Recieving data
|
||||||
socket.on("dataTest") {data in
|
socket.on("dataTest") {data in
|
||||||
if let json = data as? NSDictionary {
|
if let data = data as? NSData {
|
||||||
var textData = NSData(base64EncodedString: (json["test"] as String),
|
println("data is binary")
|
||||||
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
|
}
|
||||||
if let dataAsString = NSString(data: textData!, encoding: NSUTF8StringEncoding) {
|
}
|
||||||
println(dataAsString)
|
|
||||||
|
socket.on("objectDataTest") {data in
|
||||||
|
if let dict = data as? NSDictionary {
|
||||||
|
if let data = dict["data"] as? NSData {
|
||||||
|
let string = NSString(data: data, encoding: NSUTF8StringEncoding)
|
||||||
|
println("Got data: \(string!)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
socket.connect()
|
||||||
|
|
||||||
|
// Sending binary
|
||||||
|
socket.emit("testData", args: [
|
||||||
|
"data": "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!,
|
||||||
|
"test": true])
|
||||||
```
|
```
|
||||||
|
|||||||
@ -43,10 +43,11 @@ private class EventHandler: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class Event {
|
private class Event {
|
||||||
var event:String!
|
|
||||||
var args:AnyObject!
|
var args:AnyObject!
|
||||||
var placeholders:Int!
|
|
||||||
var currentPlace = 0
|
var currentPlace = 0
|
||||||
|
var event:String!
|
||||||
|
lazy var datas = [NSData]()
|
||||||
|
var placeholders:Int!
|
||||||
|
|
||||||
init(event:String, args:AnyObject?, placeholders:Int = 0) {
|
init(event:String, args:AnyObject?, placeholders:Int = 0) {
|
||||||
self.event = event
|
self.event = event
|
||||||
@ -54,6 +55,30 @@ private class Event {
|
|||||||
self.placeholders = placeholders
|
self.placeholders = placeholders
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addData(data:NSData) -> Bool {
|
||||||
|
func checkDoEvent() -> Bool {
|
||||||
|
if self.placeholders == self.currentPlace {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if checkDoEvent() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
self.datas.append(data)
|
||||||
|
self.currentPlace++
|
||||||
|
|
||||||
|
if checkDoEvent() {
|
||||||
|
self.currentPlace = 0
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func createMessage() -> String {
|
func createMessage() -> String {
|
||||||
var array = "42["
|
var array = "42["
|
||||||
array += "\"" + event + "\""
|
array += "\"" + event + "\""
|
||||||
@ -95,27 +120,30 @@ private class Event {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fillInPlaceHolder(data:NSData) -> Bool {
|
func fillInPlaceholders(args:AnyObject) -> AnyObject {
|
||||||
func checkDoEvent() -> Bool {
|
if let dict = args as? NSDictionary {
|
||||||
if self.placeholders == self.currentPlace {
|
var newDict = [String: AnyObject]()
|
||||||
return true
|
|
||||||
} else {
|
for (key, value) in dict {
|
||||||
return false
|
newDict[key as String] = value
|
||||||
|
|
||||||
|
// If the value is a string we need to check
|
||||||
|
// if it is a placeholder for data
|
||||||
|
if let value = value as? String {
|
||||||
|
if value == "~~\(self.currentPlace)" {
|
||||||
|
newDict[key as String] = self.datas.removeAtIndex(0)
|
||||||
|
self.currentPlace++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newDict
|
||||||
|
} else if let string = args as? String {
|
||||||
|
if string == "~~\(self.currentPlace)" {
|
||||||
|
return self.datas.removeAtIndex(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if checkDoEvent() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if let stringArgs = args as? String {
|
|
||||||
let mutStringArgs = RegexMutable(stringArgs)
|
|
||||||
let base64 = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)
|
|
||||||
let placeHolder = "~~" + String(self.currentPlace)
|
|
||||||
self.args = mutStringArgs[placeHolder] ~= "\"" + base64 + "\""
|
|
||||||
self.currentPlace++
|
|
||||||
return checkDoEvent()
|
|
||||||
}
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -395,7 +423,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
let numberOfPlaceholders = messageType["45"] ~= ""
|
let numberOfPlaceholders = messageType["45"] ~= ""
|
||||||
let event = binaryGroup[2]
|
let event = binaryGroup[2]
|
||||||
let mutMessageObject = RegexMutable(binaryGroup[3])
|
let mutMessageObject = RegexMutable(binaryGroup[3])
|
||||||
let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] ~= "~~$2"
|
let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] ~= "\"~~$2\""
|
||||||
let mes = Event(event: event, args: placeholdersRemoved,
|
let mes = Event(event: event, args: placeholdersRemoved,
|
||||||
placeholders: numberOfPlaceholders.integerValue)
|
placeholders: numberOfPlaceholders.integerValue)
|
||||||
self.lastSocketMessage = mes
|
self.lastSocketMessage = mes
|
||||||
@ -413,12 +441,15 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let shouldExecute = self.lastSocketMessage?.fillInPlaceHolder(data)
|
let shouldExecute = self.lastSocketMessage?.addData(data)
|
||||||
var event = self.lastSocketMessage!.event
|
|
||||||
var args:AnyObject? = self.parseData(self.lastSocketMessage!.args as? String)
|
|
||||||
|
|
||||||
if shouldExecute != nil && shouldExecute! {
|
if shouldExecute != nil && shouldExecute! {
|
||||||
self.handleEvent(event: event, data: args)
|
var event = self.lastSocketMessage!.event
|
||||||
|
var parsedArgs:AnyObject? = self.parseData(self.lastSocketMessage!.args as? String)
|
||||||
|
if let args:AnyObject = parsedArgs {
|
||||||
|
let filledInArgs:AnyObject = self.lastSocketMessage!.fillInPlaceholders(args)
|
||||||
|
self.handleEvent(event: event, data: filledInArgs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user