Compare commits
8 Commits
master
...
1.0-swift4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b44bfb754 | ||
|
|
4af28c3a57 | ||
|
|
c0a4273d5b | ||
|
|
add7a83a0f | ||
|
|
4ca2710faa | ||
|
|
424ab6c944 | ||
|
|
d3aaaec9bb | ||
|
|
46d982d4df |
@ -1 +0,0 @@
|
|||||||
3.1
|
|
||||||
@ -17,6 +17,7 @@ Pod::Spec.new do |s|
|
|||||||
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v9.0.1' }
|
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v9.0.1' }
|
||||||
s.source_files = "Source/**/*.swift"
|
s.source_files = "Source/**/*.swift"
|
||||||
s.requires_arc = true
|
s.requires_arc = true
|
||||||
s.pod_target_xcconfig = {'SWIFT_VERSION' => '3.1'}
|
s.swift_version = "4.2"
|
||||||
|
|
||||||
# s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files
|
# s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files
|
||||||
end
|
end
|
||||||
|
|||||||
@ -537,9 +537,11 @@
|
|||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
572EF2181B51F16C00EEBB58 = {
|
572EF2181B51F16C00EEBB58 = {
|
||||||
CreatedOnToolsVersion = 6.4;
|
CreatedOnToolsVersion = 6.4;
|
||||||
|
LastSwiftMigration = 1010;
|
||||||
};
|
};
|
||||||
572EF2231B51F16C00EEBB58 = {
|
572EF2231B51F16C00EEBB58 = {
|
||||||
CreatedOnToolsVersion = 6.4;
|
CreatedOnToolsVersion = 6.4;
|
||||||
|
LastSwiftMigration = 0920;
|
||||||
};
|
};
|
||||||
572EF2371B51F18A00EEBB58 = {
|
572EF2371B51F18A00EEBB58 = {
|
||||||
CreatedOnToolsVersion = 6.4;
|
CreatedOnToolsVersion = 6.4;
|
||||||
@ -886,7 +888,8 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
@ -937,7 +940,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = io.socket.SocketIOClientSwift;
|
PRODUCT_BUNDLE_IDENTIFIER = io.socket.SocketIOClientSwift;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
@ -993,6 +997,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
|
PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@ -1037,6 +1043,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
|
PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@ -1094,7 +1102,7 @@
|
|||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
};
|
};
|
||||||
@ -1146,7 +1154,7 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
|
PRODUCT_BUNDLE_IDENTIFIER = "io.socket.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
};
|
};
|
||||||
@ -1305,6 +1313,7 @@
|
|||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
@ -1356,6 +1365,7 @@
|
|||||||
PRODUCT_NAME = SocketIO;
|
PRODUCT_NAME = SocketIO;
|
||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
|||||||
@ -46,7 +46,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testJSONEmit() {
|
func testJSONEmit() {
|
||||||
let expectedSendString = "2[\"test\",{\"null\":null,\"hello\":1,\"test\":\"hello\",\"foobar\":true}]"
|
let expectedSendString = "2[\"test\",{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
|
||||||
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleBinaryEmit() {
|
func testMultipleBinaryEmit() {
|
||||||
let expectedSendString = "52-[\"test\",{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
|
let expectedSendString = "52-[\"test\",{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
|
||||||
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testJSONAck() {
|
func testJSONAck() {
|
||||||
let expectedSendString = "30[{\"null\":null,\"hello\":1,\"test\":\"hello\",\"foobar\":true}]"
|
let expectedSendString = "30[{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
|
||||||
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ class SocketBasicPacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleBinaryAck() {
|
func testMultipleBinaryAck() {
|
||||||
let expectedSendString = "62-0[{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
|
let expectedSendString = "62-0[{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
|
||||||
let sendData = [["data1": data, "data2": data2]]
|
let sendData = [["data1": data, "data2": data2]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testJSONEmit() {
|
func testJSONEmit() {
|
||||||
let expectedSendString = "2/swift,[\"test\",{\"null\":null,\"test\":\"hello\",\"hello\":1,\"foobar\":true}]"
|
let expectedSendString = "2/swift,[\"test\",{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
|
||||||
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary]
|
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleBinaryEmit() {
|
func testMultipleBinaryEmit() {
|
||||||
let expectedSendString = "52-/swift,[\"test\",{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
|
let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
|
||||||
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false)
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testJSONAck() {
|
func testJSONAck() {
|
||||||
let expectedSendString = "3/swift,0[{\"null\":null,\"hello\":1,\"test\":\"hello\",\"foobar\":true}]"
|
let expectedSendString = "3/swift,0[{\"foobar\":true,\"hello\":1,\"null\":null,\"test\":\"hello\"}]"
|
||||||
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ class SocketNamespacePacketTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleBinaryAck() {
|
func testMultipleBinaryAck() {
|
||||||
let expectedSendString = "62-/swift,0[{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]"
|
let expectedSendString = "62-/swift,0[{\"data1\":{\"_placeholder\":true,\"num\":1},\"data2\":{\"_placeholder\":true,\"num\":0}}]"
|
||||||
let sendData = [["data1": data, "data2": data2]]
|
let sendData = [["data1": data, "data2": data2]]
|
||||||
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true)
|
||||||
|
|
||||||
|
|||||||
@ -225,9 +225,9 @@ public final class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePoll
|
|||||||
|
|
||||||
private func handleBase64(message: String) {
|
private func handleBase64(message: String) {
|
||||||
// binary in base64 string
|
// binary in base64 string
|
||||||
let noPrefix = message[message.index(message.startIndex, offsetBy: 2)..<message.endIndex]
|
let noPrefix = String(message[message.index(message.startIndex, offsetBy: 2)..<message.endIndex])
|
||||||
|
|
||||||
if let data = NSData(base64Encoded: noPrefix, options: .ignoreUnknownCharacters) {
|
if let data = Data(base64Encoded: noPrefix, options: .ignoreUnknownCharacters) {
|
||||||
client?.parseEngineBinaryData(data as Data)
|
client?.parseEngineBinaryData(data as Data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -535,13 +535,13 @@ public final class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePoll
|
|||||||
|
|
||||||
switch type {
|
switch type {
|
||||||
case .message:
|
case .message:
|
||||||
handleMessage(String(fixedString.characters.dropFirst()))
|
handleMessage(String(fixedString.dropFirst()))
|
||||||
case .noop:
|
case .noop:
|
||||||
handleNOOP()
|
handleNOOP()
|
||||||
case .pong:
|
case .pong:
|
||||||
handlePong(with: fixedString)
|
handlePong(with: fixedString)
|
||||||
case .open:
|
case .open:
|
||||||
handleOpen(openData: String(fixedString.characters.dropFirst()))
|
handleOpen(openData: String(fixedString.dropFirst()))
|
||||||
case .close:
|
case .close:
|
||||||
handleClose(fixedString)
|
handleClose(fixedString)
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -94,7 +94,7 @@ extension SocketEnginePollable {
|
|||||||
var postStr = ""
|
var postStr = ""
|
||||||
|
|
||||||
for packet in postWait {
|
for packet in postWait {
|
||||||
let len = packet.characters.count
|
let len = packet.count
|
||||||
|
|
||||||
postStr += "\(len):\(packet)"
|
postStr += "\(len):\(packet)"
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ extension SocketEnginePollable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func parsePollingMessage(_ str: String) {
|
func parsePollingMessage(_ str: String) {
|
||||||
guard str.characters.count != 1 else { return }
|
guard str.count != 1 else { return }
|
||||||
|
|
||||||
var reader = SocketStringReader(message: str)
|
var reader = SocketStringReader(message: str)
|
||||||
|
|
||||||
|
|||||||
@ -31,8 +31,12 @@ enum JSONError : Error {
|
|||||||
|
|
||||||
extension Array {
|
extension Array {
|
||||||
func toJSON() throws -> Data {
|
func toJSON() throws -> Data {
|
||||||
|
if #available(iOS 11.0, OSX 10.13, tvOS 11.0, *) {
|
||||||
|
return try JSONSerialization.data(withJSONObject: self, options: [.sortedKeys])
|
||||||
|
} else {
|
||||||
return try JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions(rawValue: 0))
|
return try JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions(rawValue: 0))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension CharacterSet {
|
extension CharacterSet {
|
||||||
|
|||||||
@ -107,13 +107,13 @@ extension SocketParsable where Self: SocketIOClientSpec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var dataArray = message[message.characters.index(reader.currentIndex, offsetBy: 1)..<message.endIndex]
|
var dataArray = message[message.index(reader.currentIndex, offsetBy: 1)..<message.endIndex]
|
||||||
|
|
||||||
if type == .error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") {
|
if type == .error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") {
|
||||||
dataArray = "[" + dataArray + "]"
|
dataArray = "[" + dataArray + "]"
|
||||||
}
|
}
|
||||||
|
|
||||||
switch parseData(dataArray) {
|
switch parseData(String(dataArray)) {
|
||||||
case let .left(err):
|
case let .left(err):
|
||||||
return .left(err)
|
return .left(err)
|
||||||
case let .right(data):
|
case let .right(data):
|
||||||
|
|||||||
@ -40,34 +40,33 @@ struct SocketStringReader {
|
|||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
mutating func advance(by: Int) -> String.Index {
|
mutating func advance(by: Int) -> String.Index {
|
||||||
currentIndex = message.characters.index(currentIndex, offsetBy: by)
|
currentIndex = message.index(currentIndex, offsetBy: by)
|
||||||
|
|
||||||
return currentIndex
|
return currentIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
mutating func read(count: Int) -> String {
|
mutating func read(count: Int) -> String {
|
||||||
let readString = message[currentIndex..<message.characters.index(currentIndex, offsetBy: count)]
|
let readString = message[currentIndex..<message.index(currentIndex, offsetBy: count)]
|
||||||
|
|
||||||
advance(by: count)
|
advance(by: count)
|
||||||
|
|
||||||
return readString
|
return String(readString)
|
||||||
}
|
}
|
||||||
|
|
||||||
mutating func readUntilOccurence(of string: String) -> String {
|
mutating func readUntilOccurence(of string: String) -> String {
|
||||||
let substring = message[currentIndex..<message.endIndex]
|
let substring = message.utf16[currentIndex...]
|
||||||
|
|
||||||
guard let foundRange = substring.range(of: string) else {
|
guard let foundIndex = substring.index(of: string.utf16.first!) else {
|
||||||
currentIndex = message.endIndex
|
currentIndex = message.utf16.endIndex
|
||||||
|
|
||||||
return substring
|
return String(substring)!
|
||||||
}
|
}
|
||||||
|
|
||||||
advance(by: message.characters.distance(from: message.characters.startIndex, to: foundRange.lowerBound) + 1)
|
advance(by: substring.distance(from: substring.startIndex, to: foundIndex) + 1)
|
||||||
|
|
||||||
return substring.substring(to: foundRange.lowerBound)
|
return String(substring[substring.startIndex..<foundIndex])!
|
||||||
}
|
}
|
||||||
|
|
||||||
mutating func readUntilEnd() -> String {
|
mutating func readUntilEnd() -> String {
|
||||||
return read(count: message.characters.distance(from: currentIndex, to: message.endIndex))
|
return read(count: message.distance(from: currentIndex, to: message.endIndex))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,7 +115,7 @@ open class WebSocket : NSObject, StreamDelegate {
|
|||||||
|
|
||||||
|
|
||||||
// MARK: - Block based API.
|
// MARK: - Block based API.
|
||||||
public var onConnect: ((Void) -> Void)?
|
public var onConnect: (() -> Void)?
|
||||||
public var onDisconnect: ((NSError?) -> Void)?
|
public var onDisconnect: ((NSError?) -> Void)?
|
||||||
public var onText: ((String) -> Void)?
|
public var onText: ((String) -> Void)?
|
||||||
public var onData: ((Data) -> Void)?
|
public var onData: ((Data) -> Void)?
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user