Skip to content

Commit 711ce8d

Browse files
committed
fixes. add better objective-c support
1 parent 8365ded commit 711ce8d

File tree

5 files changed

+50
-23
lines changed

5 files changed

+50
-23
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,21 @@ socket.emit("testData", [
146146
"test": true])
147147
```
148148

149+
Objective-C Example
150+
===================
151+
```objective-c
152+
SocketIOClient* socket = [[SocketIOClient alloc] initWithSocketURL:@"localhost:8080" opts:nil];
153+
154+
[socket on: @"connect" callback: ^(NSArray* data, void (^ack)(NSArray*)) {
155+
NSLog(@"connected");
156+
[socket emitObjc:@"echo" :@[@"echo test"]];
157+
[[socket emitWithAckObjc:@"ackack" :@[@"test"]] onAck:^(NSArray* data) {
158+
NSLog(@"Got data");
159+
}];
160+
}];
161+
162+
```
163+
149164
Detailed Example
150165
================
151166
A more detailed example can be found [here](https://github.com/nuclearace/socket.io-client-swift-example)

SwiftIO/SocketAckHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424

2525
import Foundation
2626

27-
typealias AckCallback = (NSArray?) -> Void
27+
public typealias AckCallback = (NSArray?) -> Void
2828

29-
class SocketAckHandler {
29+
@objc public class SocketAckHandler {
3030
let ackNum:Int!
3131
let event:String!
3232
var callback:AckCallback?

SwiftIO/SocketEngine.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ class SocketEngine: NSObject, WebSocketDelegate {
147147
return
148148
}
149149

150-
let req = NSURLRequest(URL: NSURL(string: self.urlPolling! + "&sid=\(self.sid)")!)
150+
let req = NSMutableURLRequest(URL: NSURL(string: self.urlPolling! + "&sid=\(self.sid)")!)
151+
req.timeoutInterval = 0.0
151152
self.waitingForPoll = true
152153

153154
self.session.dataTaskWithRequest(req) {[weak self] data, res, err in
@@ -481,7 +482,6 @@ class SocketEngine: NSObject, WebSocketDelegate {
481482

482483
func sendPing() {
483484
if self.websocket {
484-
self.ws?.writePing(NSData())
485485
self.sendWebSocketMessage("", withType: PacketType.PING)
486486
} else {
487487
self.sendPollMessage("", withType: PacketType.PING)

SwiftIO/SocketEventHandler.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424

2525
import Foundation
2626

27-
typealias NormalCallback = (NSArray?, AckEmitter?) -> Void
28-
typealias AnyHandler = (event:String, items:AnyObject?)
29-
typealias AckEmitter = (AnyObject...) -> Void
27+
public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void
28+
public typealias AnyHandler = (event:String, items:AnyObject?)
29+
public typealias AckEmitter = (AnyObject...) -> Void
3030

3131
private func emitAckCallback(socket:SocketIOClient, num:Int, type:Int) -> AckEmitter {
3232
func emitter(items:AnyObject...) {

SwiftIO/SocketIOClient.swift

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
import Foundation
2626

27-
class SocketIOClient {
27+
public class SocketIOClient: NSObject {
2828
let socketURL:NSMutableString!
2929
let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding),
3030
DISPATCH_QUEUE_SERIAL)
@@ -57,7 +57,7 @@ class SocketIOClient {
5757
}
5858
var sid:String?
5959

60-
init(socketURL:String, opts:[String: AnyObject]? = nil) {
60+
public init(socketURL:String, opts:[String: AnyObject]? = nil) {
6161
var mutURL = RegexMutable(socketURL)
6262

6363
if mutURL["https://"].matches().count != 0 {
@@ -96,11 +96,13 @@ class SocketIOClient {
9696
self.reconnectAttempts = -1
9797
}
9898

99+
super.init()
100+
99101
self.engine = SocketEngine(client: self, forcePolling: self.forcePolling)
100102
}
101103

102104
// Closes the socket
103-
func close() {
105+
public func close() {
104106
self.closed = true
105107
self.connecting = false
106108
self.connected = false
@@ -109,7 +111,7 @@ class SocketIOClient {
109111
}
110112

111113
// Connects to the server
112-
func connect() {
114+
public func connect() {
113115
if self.closed {
114116
println("Warning! This socket was previously closed. This might be dangerous!")
115117
self.closed = false
@@ -119,7 +121,7 @@ class SocketIOClient {
119121
}
120122

121123
// Connect to the server using params
122-
func connectWithParams(params:[String: AnyObject]) {
124+
public func connectWithParams(params:[String: AnyObject]) {
123125
if self.closed {
124126
println("Warning! This socket was previously closed. This might be dangerous!")
125127
self.closed = false
@@ -139,6 +141,7 @@ class SocketIOClient {
139141
self.currentReconnectAttempt = 0
140142
self.reconnectTimer?.invalidate()
141143
self.reconnectTimer = nil
144+
142145
self.handleEvent("connect", data: nil, isInternalMessage: false)
143146
}
144147

@@ -155,7 +158,7 @@ class SocketIOClient {
155158
// Sends a message with multiple args
156159
// If a message contains binary we have to send those
157160
// seperately.
158-
func emit(event:String, _ args:AnyObject...) {
161+
public func emit(event:String, _ args:AnyObject...) {
159162
if !self.connected {
160163
return
161164
}
@@ -166,7 +169,12 @@ class SocketIOClient {
166169
}
167170
}
168171

169-
func emitWithAck(event:String, _ args:AnyObject...) -> SocketAckHandler {
172+
// Objc doesn't have variadics
173+
public func emitObjc(event:String, _ args:[AnyObject]) {
174+
self.emit(event, args)
175+
}
176+
177+
public func emitWithAck(event:String, _ args:AnyObject...) -> SocketAckHandler {
170178
if !self.connected {
171179
return SocketAckHandler(event: "fail")
172180
}
@@ -183,6 +191,10 @@ class SocketIOClient {
183191
return ackHandler
184192
}
185193

194+
public func emitWithAckObjc(event:String, _ args:[AnyObject]) -> SocketAckHandler {
195+
return self.emitWithAck(event, args)
196+
}
197+
186198
private func _emit(event:String, _ args:[AnyObject], ack:Bool = false) {
187199
var frame:SocketEvent
188200
var str:String
@@ -217,7 +229,7 @@ class SocketIOClient {
217229
}
218230

219231
// If the server wants to know that the client received data
220-
func emitAck(ack:Int, withData data:[AnyObject]?, withAckType ackType:Int) {
232+
internal func emitAck(ack:Int, withData data:[AnyObject]?, withAckType ackType:Int) {
221233
dispatch_async(self.ackQueue) {[weak self] in
222234
if self == nil || !self!.connected || data == nil {
223235
return
@@ -270,7 +282,7 @@ class SocketIOClient {
270282
}
271283

272284
// Handles events
273-
func handleEvent(event:String, data:AnyObject?, isInternalMessage:Bool = false,
285+
public func handleEvent(event:String, data:AnyObject?, isInternalMessage:Bool = false,
274286
wantsAck ack:Int? = nil, withAckType ackType:Int = 3) {
275287
// println("Should do event: \(event) with data: \(data)")
276288
if !self.connected && !isInternalMessage {
@@ -319,18 +331,18 @@ class SocketIOClient {
319331
}
320332

321333
// Adds handler for an event
322-
func on(name:String, callback:NormalCallback) {
334+
public func on(name:String, callback:NormalCallback) {
323335
let handler = SocketEventHandler(event: name, callback: callback)
324336
self.handlers.append(handler)
325337
}
326338

327339
// Adds a handler for any event
328-
func onAny(handler:(AnyHandler) -> Void) {
340+
public func onAny(handler:(AnyHandler) -> Void) {
329341
self.anyHandler = handler
330342
}
331343

332344
// Opens the connection to the socket
333-
func open() {
345+
public func open() {
334346
self.connect()
335347
}
336348

@@ -497,7 +509,7 @@ class SocketIOClient {
497509
}
498510

499511
// Parses messages recieved
500-
func parseSocketMessage(stringMessage:String) {
512+
internal func parseSocketMessage(stringMessage:String) {
501513
// println(message!)
502514

503515
// Check for successful namepsace connect
@@ -718,7 +730,7 @@ class SocketIOClient {
718730
}
719731

720732
// Handles binary data
721-
func parseBinaryData(data:NSData) {
733+
internal func parseBinaryData(data:NSData) {
722734
let shouldExecute = self.waitingData[0].addData(data)
723735

724736
if shouldExecute {
@@ -763,7 +775,7 @@ class SocketIOClient {
763775
}
764776

765777
// Something happened while polling
766-
func pollingDidFail(err:NSError?) {
778+
internal func pollingDidFail(err:NSError?) {
767779
if !self.reconnecting {
768780
self.connected = false
769781
self.handleEvent("reconnect", data: err?.localizedDescription, isInternalMessage: true)
@@ -772,7 +784,7 @@ class SocketIOClient {
772784
}
773785

774786
// We lost connection and should attempt to reestablish
775-
@objc func tryReconnect() {
787+
internal func tryReconnect() {
776788
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
777789
self.didForceClose()
778790
return

0 commit comments

Comments
 (0)