From 67afbcbd5697d8fc572be77becb13b424b4a5feb Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 16 Sep 2015 12:46:19 -0400 Subject: [PATCH] mess around with api --- .../project.pbxproj | 22 +++++- SocketIO-iOSTests/AbstractSocketTest.swift | 13 ++-- SocketIO-iOSTests/SocketAckManagerTest.swift | 3 +- SocketIO-iOSTests/SocketTestCases.swift | 74 +++++++++---------- SocketIOClientSwift/SocketAckEmitter.swift | 48 ++++++++++++ SocketIOClientSwift/SocketAckManager.swift | 2 +- SocketIOClientSwift/SocketEventHandler.swift | 28 ++----- SocketIOClientSwift/SocketIOClient.swift | 18 +---- SocketIOClientSwift/SocketParser.swift | 4 +- SocketIOClientSwift/SocketTypes.swift | 9 +-- 10 files changed, 127 insertions(+), 94 deletions(-) create mode 100644 SocketIOClientSwift/SocketAckEmitter.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index e7468e6..20bcf61 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -83,6 +83,12 @@ 74781D5B1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; 74781D5C1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; 74781D5D1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; + 749A7F8B1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */; settings = {ASSET_TAGS = (); }; }; + 749A7F8C1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */; settings = {ASSET_TAGS = (); }; }; + 749A7F8D1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */; settings = {ASSET_TAGS = (); }; }; + 749A7F8E1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */; settings = {ASSET_TAGS = (); }; }; + 749A7F8F1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */; settings = {ASSET_TAGS = (); }; }; + 749A7F901BA9D42D00782993 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */; settings = {ASSET_TAGS = (); }; }; 74D765621B9F0D870028551C /* SocketStringReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74D765611B9F0D870028551C /* SocketStringReader.swift */; }; 74D765631B9F0D9F0028551C /* SocketStringReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74D765611B9F0D870028551C /* SocketStringReader.swift */; }; 74D765641B9F0DA40028551C /* SocketStringReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74D765611B9F0D870028551C /* SocketStringReader.swift */; }; @@ -162,6 +168,7 @@ 5764DF871B51F254004FF46E /* SwiftRegex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftRegex.swift; path = SocketIOClientSwift/SwiftRegex.swift; sourceTree = ""; }; 5764DF881B51F254004FF46E /* WebSocket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = SocketIOClientSwift/WebSocket.swift; sourceTree = ""; }; 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketIOClientStatus.swift; path = SocketIOClientSwift/SocketIOClientStatus.swift; sourceTree = ""; }; + 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketAckEmitter.swift; path = SocketIOClientSwift/SocketAckEmitter.swift; sourceTree = ""; }; 74D765611B9F0D870028551C /* SocketStringReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SocketStringReader.swift; path = SocketIOClientSwift/SocketStringReader.swift; sourceTree = ""; }; 941A4AB91B67A56C00C42318 /* TestKind.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestKind.swift; sourceTree = ""; }; 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceAcknowledgementTest.swift; sourceTree = ""; }; @@ -268,16 +275,16 @@ 572EF2281B51F16C00EEBB58 /* SocketIO-iOSTests */ = { isa = PBXGroup; children = ( - 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, + 94A20D601B99E22F00BF9E44 /* SocketAckManagerTest.swift */, 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */, + 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */, - 941A4AB91B67A56C00C42318 /* TestKind.swift */, + 949FAE8C1B9B94E600073BE9 /* SocketParserTest.swift */, 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */, 94CB8F0C1B6E66E60019ED53 /* AbstractSocketTest.swift */, - 94A20D601B99E22F00BF9E44 /* SocketAckManagerTest.swift */, + 941A4AB91B67A56C00C42318 /* TestKind.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, - 949FAE8C1B9B94E600073BE9 /* SocketParserTest.swift */, ); path = "SocketIO-iOSTests"; sourceTree = ""; @@ -327,6 +334,7 @@ 5764DF7B1B51F24A004FF46E /* Source */ = { isa = PBXGroup; children = ( + 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */, 5764DF7C1B51F254004FF46E /* SocketAckManager.swift */, 5764DF7D1B51F254004FF46E /* SocketAnyEvent.swift */, 5764DF7E1B51F254004FF46E /* SocketEngine.swift */, @@ -582,6 +590,7 @@ 74D765631B9F0D9F0028551C /* SocketStringReader.swift in Sources */, 5764DF8D1B51F254004FF46E /* SocketEngine.swift in Sources */, 5764DF9B1B51F254004FF46E /* SocketParser.swift in Sources */, + 749A7F8B1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 5764DF9D1B51F254004FF46E /* SocketTypes.swift in Sources */, 5764DF8F1B51F254004FF46E /* SocketEngineClient.swift in Sources */, 5764DF911B51F254004FF46E /* SocketEventHandler.swift in Sources */, @@ -607,6 +616,7 @@ 945B653A1B5FCEEA0081E995 /* SocketFixUTF8.swift in Sources */, 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */, 94CB8F0B1B6E48B90019ED53 /* SocketTestCases.swift in Sources */, + 749A7F8C1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */, @@ -635,6 +645,7 @@ 74D765641B9F0DA40028551C /* SocketStringReader.swift in Sources */, 5764DF8E1B51F254004FF46E /* SocketEngine.swift in Sources */, 5764DF9C1B51F254004FF46E /* SocketParser.swift in Sources */, + 749A7F8F1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 5764DF9E1B51F254004FF46E /* SocketTypes.swift in Sources */, 5764DF901B51F254004FF46E /* SocketEngineClient.swift in Sources */, 5764DF921B51F254004FF46E /* SocketEventHandler.swift in Sources */, @@ -654,6 +665,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 749A7F901BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 572EF24A1B51F18A00EEBB58 /* SocketIO_MacTests.swift in Sources */, 74781D5D1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */, ); @@ -666,6 +678,7 @@ 57425F9C1BA3A46000BDAAC1 /* SocketStringReader.swift in Sources */, 57425F9D1BA3A46000BDAAC1 /* SocketEngine.swift in Sources */, 57425F9E1BA3A46000BDAAC1 /* SocketParser.swift in Sources */, + 749A7F8D1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 57425F9F1BA3A46000BDAAC1 /* SocketTypes.swift in Sources */, 57425FA01BA3A46000BDAAC1 /* SocketEngineClient.swift in Sources */, 57425FA11BA3A46000BDAAC1 /* SocketEventHandler.swift in Sources */, @@ -691,6 +704,7 @@ 57425FDF1BA3A4F100BDAAC1 /* SocketFixUTF8.swift in Sources */, 57425FE01BA3A4F100BDAAC1 /* SocketEventHandler.swift in Sources */, 57425FE11BA3A4F100BDAAC1 /* SocketTestCases.swift in Sources */, + 749A7F8E1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 57425FE21BA3A4F100BDAAC1 /* SocketEngine.swift in Sources */, 57425FE31BA3A4F100BDAAC1 /* SocketAckManager.swift in Sources */, 57425FE41BA3A4F100BDAAC1 /* TestKind.swift in Sources */, diff --git a/SocketIO-iOSTests/AbstractSocketTest.swift b/SocketIO-iOSTests/AbstractSocketTest.swift index 1fd61c2..4169af1 100644 --- a/SocketIO-iOSTests/AbstractSocketTest.swift +++ b/SocketIO-iOSTests/AbstractSocketTest.swift @@ -45,7 +45,7 @@ class AbstractSocketTest: XCTestCase { func socketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ let finalTestname = generateTestName(testName) weak var expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?, ack:AckEmitter?) { + func didGetEmit(result:[AnyObject], ack:SocketAckEmitter?) { callback(result, ack) if let expection = expection { expection.fulfill() @@ -61,7 +61,7 @@ class AbstractSocketTest: XCTestCase { func socketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ let finalTestname = generateTestName(testName) weak var expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?, ack:AckEmitter?) { + func didGetEmit(result:[AnyObject], ack:SocketAckEmitter?) { callback(result, ack) if let expection = expection { expection.fulfill() @@ -79,11 +79,12 @@ class AbstractSocketTest: XCTestCase { waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) } + func socketAcknwoledgeMultiple(testName:String, Data:Array, callback:NormalCallback){ let finalTestname = generateTestName(testName) weak var expection = self.expectationWithDescription(finalTestname) - func didGetResult(result:NSArray?) { - callback(result, nil) + func didGetResult(result: [AnyObject]) { + callback(result, SocketAckEmitter(socket: AbstractSocketTest.socket, ackNum: -1)) if let expection = expection { expection.fulfill() } @@ -96,8 +97,8 @@ class AbstractSocketTest: XCTestCase { func socketAcknwoledge(testName:String, Data:AnyObject?, callback:NormalCallback){ let finalTestname = generateTestName(testName) weak var expection = self.expectationWithDescription(finalTestname) - func didGet(result:NSArray?) { - callback(result, nil) + func didGet(result:[AnyObject]) { + callback(result, SocketAckEmitter(socket: AbstractSocketTest.socket, ackNum: -1)) if let expection = expection { expection.fulfill() } diff --git a/SocketIO-iOSTests/SocketAckManagerTest.swift b/SocketIO-iOSTests/SocketAckManagerTest.swift index e2664d9..35b826f 100644 --- a/SocketIO-iOSTests/SocketAckManagerTest.swift +++ b/SocketIO-iOSTests/SocketAckManagerTest.swift @@ -14,9 +14,8 @@ class SocketAckManagerTest: XCTestCase { func testAddAcks() { let callbackExpection = self.expectationWithDescription("callbackExpection") let itemsArray = ["Hi", "ho"] - func callback(items: NSArray?) { + func callback(items: [AnyObject]) { callbackExpection.fulfill() - items?.isEqualToArray(itemsArray) } ackManager.addAck(1, callback: callback) ackManager.executeAck(1, items: itemsArray) diff --git a/SocketIO-iOSTests/SocketTestCases.swift b/SocketIO-iOSTests/SocketTestCases.swift index da5277c..96cf19d 100644 --- a/SocketIO-iOSTests/SocketTestCases.swift +++ b/SocketIO-iOSTests/SocketTestCases.swift @@ -14,7 +14,7 @@ class SocketTestCases: NSObject { static func testBasic(abstractSocketSend:SocketSendFunction) { let testName = "basicTest" - func didGetResult(result:NSArray?, ack:AckEmitter?) { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { } abstractSocketSend(testName: testName, emitData: nil, callback: didGetResult) @@ -22,8 +22,8 @@ class SocketTestCases: NSObject { static func testNull(abstractSocketSend:SocketSendFunction) { let testName = "testNull" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let _ = result?.firstObject as? NSNull { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let _ = result.first as? NSNull { }else { @@ -35,8 +35,8 @@ class SocketTestCases: NSObject { static func testBinary(abstractSocketSend:SocketSendFunction) { let testName = "testBinary" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let data = result?.firstObject as? NSData { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let data = result.first as? NSData { let string = NSString(data: data, encoding: NSUTF8StringEncoding)! XCTAssertEqual(string, "gakgakgak2") }else { @@ -49,8 +49,8 @@ class SocketTestCases: NSObject { static func testArray(abstractSocketSend:SocketSendFunction) { let testName = "testArray" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let array = result?.firstObject as? NSArray { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let array = result.first as? NSArray { XCTAssertEqual(array.count, 2) XCTAssertEqual((array.firstObject! as! String), "test3") XCTAssertEqual((array.lastObject! as! String), "test4") @@ -63,8 +63,8 @@ class SocketTestCases: NSObject { static func testString(abstractSocketSend:SocketSendFunction) { let testName = "testString" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let string = result?.firstObject as? String { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let string = result.first as? String { XCTAssertEqual(string, "polo") }else { XCTFail("Should have String as result") @@ -75,8 +75,8 @@ class SocketTestCases: NSObject { static func testBool(abstractSocketSend:SocketSendFunction) { let testName = "testBool" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let bool = result?.firstObject as? NSNumber { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let bool = result.first as? NSNumber { XCTAssertTrue(bool.boolValue) }else { XCTFail("Should have Boolean as result") @@ -87,8 +87,8 @@ class SocketTestCases: NSObject { static func testInteger(abstractSocketSend:SocketSendFunction) { let testName = "testInteger" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let integer = result?.firstObject as? Int { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let integer = result.first as? Int { XCTAssertEqual(integer, 20) }else { XCTFail("Should have Integer as result") @@ -99,8 +99,8 @@ class SocketTestCases: NSObject { static func testDouble(abstractSocketSend:SocketSendFunction) { let testName = "testDouble" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let double = result?.firstObject as? NSNumber { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let double = result.first as? NSNumber { XCTAssertEqual(double.floatValue, 1.2) }else { XCTFail("Should have Double as result") @@ -113,8 +113,8 @@ class SocketTestCases: NSObject { let testName = "testJSONWithBuffer" let data = "0".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let json = result?.firstObject as? NSDictionary { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let json = result.first as? NSDictionary { XCTAssertEqual((json.valueForKey("testString")! as! String), "test") XCTAssertEqual((json.valueForKey("testNumber")! as! Int), 15) XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) @@ -132,8 +132,8 @@ class SocketTestCases: NSObject { static func testJSON(abstractSocketSend:SocketSendFunction) { let testName = "testJSON" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let json = result?.firstObject as? NSDictionary { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let json = result.first as? NSDictionary { XCTAssertEqual((json.valueForKey("testString")! as! String), "test") XCTAssertEqual(json.valueForKey("testNumber")! as? Int, 15) XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) @@ -151,8 +151,8 @@ class SocketTestCases: NSObject { static func testUnicode(abstractSocketSend:SocketSendFunction) { let testName = "testUnicode" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - if let unicode = result?.firstObject as? String { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + if let unicode = result.first as? String { XCTAssertEqual(unicode, "🚄") }else { XCTFail("Should have String as result") @@ -163,37 +163,37 @@ class SocketTestCases: NSObject { static func testMultipleItemsWithBuffer(abstractSocketMultipleSend:(testName:String, emitData:Array, callback:NormalCallback)->()) { let testName = "testMultipleItemsWithBuffer" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - XCTAssertEqual(result!.count, 5) - if result!.count != 5 { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + XCTAssertEqual(result.count, 5) + if result.count != 5 { XCTFail("Fatal Fail. Lost some Data") return } - if let array = result?.firstObject as? Array { + if let array = result.first as? Array { XCTAssertEqual((array.last! as! Int), 2) XCTAssertEqual((array.first! as! Int), 1) }else { XCTFail("Should have Array as result") } - if let dict = result?[1] as? NSDictionary { + if let dict = result[1] as? NSDictionary { XCTAssertEqual((dict.valueForKey("test") as! String), "bob") }else { XCTFail("Should have NSDictionary as result") } - if let number = result?[2] as? Int { + if let number = result[2] as? Int { XCTAssertEqual(number, 25) }else { XCTFail("Should have Integer as result") } - if let string = result?[3] as? String { + if let string = result[3] as? String { XCTAssertEqual(string, "polo") }else { XCTFail("Should have Integer as result") } - if let data = result?[4] as? NSData { + if let data = result[4] as? NSData { let string = NSString(data: data, encoding: NSUTF8StringEncoding)! XCTAssertEqual(string, "gakgakgak2") }else { @@ -207,36 +207,36 @@ class SocketTestCases: NSObject { static func testMultipleItems(abstractSocketMultipleSend:(testName:String, emitData:Array, callback:NormalCallback)->()) { let testName = "testMultipleItems" - func didGetResult(result:NSArray?, ack:AckEmitter?) { - XCTAssertEqual(result!.count, 5) - if result!.count != 5 { + func didGetResult(result:[AnyObject], ack:SocketAckEmitter?) { + XCTAssertEqual(result.count, 5) + if result.count != 5 { XCTFail("Fatal Fail. Lost some Data") return } - if let array = result?.firstObject as? Array { + if let array = result.first as? Array { XCTAssertEqual((array.last! as! Int), 2) XCTAssertEqual((array.first! as! Int), 1) }else { XCTFail("Should have Array as result") } - if let dict = result?[1] as? NSDictionary { + if let dict = result[1] as? NSDictionary { XCTAssertEqual((dict.valueForKey("test") as! String), "bob") }else { XCTFail("Should have NSDictionary as result") } - if let number = result?[2] as? Int { + if let number = result[2] as? Int { XCTAssertEqual(number, 25) }else { XCTFail("Should have Integer as result") } - if let string = result?[3] as? String { + if let string = result[3] as? String { XCTAssertEqual(string, "polo") }else { XCTFail("Should have Integer as result") } - if let bool = result?[4] as? NSNumber { + if let bool = result[4] as? NSNumber { XCTAssertFalse(bool.boolValue) }else { XCTFail("Should have NSNumber as result") diff --git a/SocketIOClientSwift/SocketAckEmitter.swift b/SocketIOClientSwift/SocketAckEmitter.swift new file mode 100644 index 0000000..c456d6e --- /dev/null +++ b/SocketIOClientSwift/SocketAckEmitter.swift @@ -0,0 +1,48 @@ +// +// SocketAckEmitter.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 9/16/15. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + + +public class SocketAckEmitter: NSObject { + unowned let socket: SocketIOClient + var ackNum: Int + + public subscript(items: AnyObject...) -> Bool { + socket.emitAck(ackNum, withItems: items) + + return true + } + + public subscript(items: [AnyObject]) -> NSString { + socket.emitAck(ackNum, withItems: items) + + return "Done" + } + + init(socket: SocketIOClient, ackNum: Int) { + self.socket = socket + self.ackNum = ackNum + } +} \ No newline at end of file diff --git a/SocketIOClientSwift/SocketAckManager.swift b/SocketIOClientSwift/SocketAckManager.swift index c707a23..e48d48c 100644 --- a/SocketIOClientSwift/SocketAckManager.swift +++ b/SocketIOClientSwift/SocketAckManager.swift @@ -56,7 +56,7 @@ struct SocketAckManager { acks.insert(SocketAck(ack: ack, callback: callback)) } - mutating func executeAck(ack: Int, items: [AnyObject]?) { + mutating func executeAck(ack: Int, items: [AnyObject]) { let callback = acks.remove(SocketAck(ack: ack)) dispatch_async(dispatch_get_main_queue()) { diff --git a/SocketIOClientSwift/SocketEventHandler.swift b/SocketIOClientSwift/SocketEventHandler.swift index 05efb10..7300d5b 100644 --- a/SocketIOClientSwift/SocketEventHandler.swift +++ b/SocketIOClientSwift/SocketEventHandler.swift @@ -24,37 +24,21 @@ import Foundation -private func emitAckCallback(socket: SocketIOClient?, num: Int?) - (items: AnyObject...) -> Void { - socket?.emitAck(num ?? -1, withItems: items) -} - -private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?) - (items: NSArray) -> Void { - socket?.emitAck(num ?? -1, withItems: items as [AnyObject]) +private func emitAckCallback(socket: SocketIOClient, num: Int?) -> SocketAckEmitter? { + return num != nil ? SocketAckEmitter(socket: socket, ackNum: num!) : nil } struct SocketEventHandler { let event: String - let callback: NormalCallback? - let callBackObjectiveC: NormalCallbackObjectiveC? + let callback: NormalCallback init(event: String, callback: NormalCallback) { self.event = event self.callback = callback - self.callBackObjectiveC = nil } - init(event: String, callback: NormalCallbackObjectiveC) { - self.event = event - self.callback = nil - self.callBackObjectiveC = callback - } - - func executeCallback(items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil, - withSocket socket:SocketIOClient? = nil) { - self.callback != nil ? - self.callback?(items, emitAckCallback(socket, num: ack)) - : self.callBackObjectiveC?(items, emitAckCallbackObjectiveC(socket, num: ack)) + func executeCallback(items: [AnyObject], withAck ack: Int? = nil, withAckType type: Int? = nil, + withSocket socket: SocketIOClient) { + self.callback(items, emitAckCallback(socket, num: ack)) } } diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 0f26629..4cc9e09 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -211,7 +211,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient { // Don't handle as internal because something crazy could happen where // we disconnect before it's handled - handleEvent("connect", data: nil, isInternalMessage: false) + handleEvent("connect", data: [], isInternalMessage: false) } func didDisconnect(reason: String) { @@ -333,13 +333,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient { Logger.log("Handling ack: %@ with data: %@", type: logType, args: ack, data ?? "") ackHandlers.executeAck(ack, - items: (data as? [AnyObject]?) ?? (data != nil ? [data!] : nil)) + items: ((data as? [AnyObject]?) ?? (data != nil ? [data!] : nil))!) } /** Causes an event to be handled. Only use if you know what you're doing. */ - public func handleEvent(event: String, data: [AnyObject]?, isInternalMessage: Bool, + public func handleEvent(event: String, data: [AnyObject], isInternalMessage: Bool, wantsAck ack: Int? = nil) { guard status == .Connected || isInternalMessage else { return @@ -360,7 +360,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient { } } else { dispatch_async(handleQueue) { - handler.executeCallback(data) + handler.executeCallback(data, withAck: ack, withSocket: self) } } } @@ -414,16 +414,6 @@ public final class SocketIOClient: NSObject, SocketEngineClient { handlers.append(handler) } - /** - Adds a handler for an event. - */ - public func on(event event: String, callback: NormalCallbackObjectiveC) { - Logger.log("Adding handler for event: %@", type: logType, args: event) - - let handler = SocketEventHandler(event: event, callback: callback) - handlers.append(handler) - } - /** Removes all handlers. Can be used after disconnecting to break any potential remaining retain cycles. diff --git a/SocketIOClientSwift/SocketParser.swift b/SocketIOClientSwift/SocketParser.swift index ed4fd49..cd79bde 100644 --- a/SocketIOClientSwift/SocketParser.swift +++ b/SocketIOClientSwift/SocketParser.swift @@ -31,7 +31,7 @@ class SocketParser { private static func handleEvent(p: SocketPacket, socket: SocketIOClient) { guard isCorrectNamespace(p.nsp, socket) else { return } - socket.handleEvent(p.event, data: p.args, + socket.handleEvent(p.event, data: p.args ?? [], isInternalMessage: false, wantsAck: p.id) } @@ -166,7 +166,7 @@ class SocketParser { packet.fillInPlaceholders() if packet.type != .BinaryAck { - socket.handleEvent(packet.event, data: packet.args, + socket.handleEvent(packet.event, data: packet.args ?? [], isInternalMessage: false, wantsAck: packet.id) } else { socket.handleAck(packet.id, data: packet.args) diff --git a/SocketIOClientSwift/SocketTypes.swift b/SocketIOClientSwift/SocketTypes.swift index c32ffa4..3c07353 100644 --- a/SocketIOClientSwift/SocketTypes.swift +++ b/SocketIOClientSwift/SocketTypes.swift @@ -24,9 +24,6 @@ import Foundation -public typealias AckCallback = (NSArray?) -> Void -public typealias AckEmitter = (AnyObject...) -> Void -public typealias AckEmitterObjectiveC = (NSArray) -> Void -public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void -public typealias NormalCallbackObjectiveC = (NSArray?, AckEmitterObjectiveC?) -> Void -public typealias OnAckCallback = (timeoutAfter:UInt64, callback:AckCallback) -> Void +public typealias AckCallback = ([AnyObject]) -> Void +public typealias NormalCallback = ([AnyObject], SocketAckEmitter?) -> Void +public typealias OnAckCallback = (timeoutAfter: UInt64, callback: AckCallback) -> Void