work on redesign
This commit is contained in:
parent
5175791513
commit
54b2da8395
@ -32,7 +32,7 @@ extension String {
|
|||||||
|
|
||||||
private typealias PollWaitQueue = [() -> Void]
|
private typealias PollWaitQueue = [() -> Void]
|
||||||
|
|
||||||
private enum PacketType: String {
|
public enum PacketType: String {
|
||||||
case OPEN = "0"
|
case OPEN = "0"
|
||||||
case CLOSE = "1"
|
case CLOSE = "1"
|
||||||
case PING = "2"
|
case PING = "2"
|
||||||
@ -43,7 +43,7 @@ private enum PacketType: String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class SocketEngine: NSObject, WebSocketDelegate {
|
public class SocketEngine: NSObject, WebSocketDelegate {
|
||||||
unowned let client:SocketIOClient
|
unowned let client:SocketEngineClient
|
||||||
private let workQueue = NSOperationQueue()
|
private let workQueue = NSOperationQueue()
|
||||||
private let emitQueue = dispatch_queue_create(
|
private let emitQueue = dispatch_queue_create(
|
||||||
"emitQueue".cStringUsingEncoding(NSUTF8StringEncoding), DISPATCH_QUEUE_SERIAL)
|
"emitQueue".cStringUsingEncoding(NSUTF8StringEncoding), DISPATCH_QUEUE_SERIAL)
|
||||||
@ -80,7 +80,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
var ws:WebSocket?
|
var ws:WebSocket?
|
||||||
|
|
||||||
init(client:SocketIOClient, forcePolling:Bool = false, withCookies cookies:[NSHTTPCookie]?) {
|
init(client:SocketEngineClient, forcePolling:Bool = false, withCookies cookies:[NSHTTPCookie]?) {
|
||||||
self.client = client
|
self.client = client
|
||||||
self.forcePolling = forcePolling
|
self.forcePolling = forcePolling
|
||||||
self.cookies = cookies
|
self.cookies = cookies
|
||||||
@ -477,20 +477,14 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Send a message with type 4
|
||||||
|
*/
|
||||||
public func send(msg:String, datas:[NSData]? = nil) {
|
public func send(msg:String, datas:[NSData]? = nil) {
|
||||||
let _send = {[weak self] (msg:String, datas:[NSData]?) -> () -> Void in
|
let _send = {[weak self] (msg:String, datas:[NSData]?) -> () -> Void in
|
||||||
return {
|
return {
|
||||||
if self == nil || !self!.connected {
|
self?.write(msg, withType: PacketType.MESSAGE, withData: datas)
|
||||||
return
|
return
|
||||||
}
|
|
||||||
|
|
||||||
if self!.websocket {
|
|
||||||
// NSLog("sending ws: \(msg):\(datas)")
|
|
||||||
self?.sendWebSocketMessage(msg, withType: PacketType.MESSAGE, datas: datas)
|
|
||||||
} else {
|
|
||||||
// NSLog("sending poll: \(msg):\(datas)")
|
|
||||||
self?.sendPollMessage(msg, withType: PacketType.MESSAGE, datas: datas)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,7 +553,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
|
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
dispatch_async(dispatch_get_main_queue()) {
|
dispatch_async(dispatch_get_main_queue()) {
|
||||||
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self.pingInterval!), target: self,
|
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self.pingInterval!),
|
||||||
|
target: self,
|
||||||
selector: Selector("sendPing"), userInfo: nil, repeats: true)
|
selector: Selector("sendPing"), userInfo: nil, repeats: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -573,6 +568,22 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func write(msg:String, withType type:PacketType, withData data:[NSData]?) {
|
||||||
|
if !self.connected {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.websocket {
|
||||||
|
// NSLog("writing ws: \(msg):\(datas)")
|
||||||
|
self.sendWebSocketMessage(msg, withType: type, datas: data)
|
||||||
|
} else {
|
||||||
|
// NSLog("writing poll: \(msg):\(datas)")
|
||||||
|
self.sendPollMessage(msg, withType: type, datas: data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delagate methods
|
||||||
|
|
||||||
public func websocketDidConnect(socket:WebSocket) {
|
public func websocketDidConnect(socket:WebSocket) {
|
||||||
self.websocketConnected = true
|
self.websocketConnected = true
|
||||||
self.probing = true
|
self.probing = true
|
||||||
|
|||||||
41
SwiftIO/SocketEngineClient.swift
Normal file
41
SwiftIO/SocketEngineClient.swift
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
//
|
||||||
|
// SocketEngineClient.swift
|
||||||
|
// Socket.IO-Swift
|
||||||
|
//
|
||||||
|
// Created by Erik Little on 3/19/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
|
||||||
|
|
||||||
|
@objc public protocol SocketEngineClient {
|
||||||
|
var ackQueue:dispatch_queue_attr_t! {get}
|
||||||
|
var handleQueue:dispatch_queue_attr_t! {get}
|
||||||
|
var emitQueue:dispatch_queue_attr_t! {get}
|
||||||
|
var reconnecting:Bool {get}
|
||||||
|
var socketURL:String {get}
|
||||||
|
var secure:Bool {get}
|
||||||
|
|
||||||
|
func parseSocketMessage(msg:String)
|
||||||
|
func parseBinaryData(data:NSData)
|
||||||
|
func pollingDidFail(err:NSError?)
|
||||||
|
func webSocketDidCloseWithCode(code:Int, reason:String, wasClean:Bool)
|
||||||
|
func webSocketDidFailWithError(error:NSError)
|
||||||
|
}
|
||||||
@ -24,14 +24,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public class SocketIOClient: NSObject {
|
public class SocketIOClient: NSObject, SocketEngineClient {
|
||||||
let socketURL:String!
|
|
||||||
let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
|
||||||
DISPATCH_QUEUE_SERIAL)
|
|
||||||
let handleQueue = dispatch_queue_create("handleQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
|
||||||
DISPATCH_QUEUE_SERIAL)
|
|
||||||
let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
|
||||||
DISPATCH_QUEUE_SERIAL)
|
|
||||||
let reconnectAttempts:Int!
|
let reconnectAttempts:Int!
|
||||||
private lazy var params = [String: AnyObject]()
|
private lazy var params = [String: AnyObject]()
|
||||||
private var ackHandlers = [SocketAckHandler]()
|
private var ackHandlers = [SocketAckHandler]()
|
||||||
@ -51,6 +44,13 @@ public class SocketIOClient: NSObject {
|
|||||||
internal var currentAck = -1
|
internal var currentAck = -1
|
||||||
internal var waitingData = [SocketEvent]()
|
internal var waitingData = [SocketEvent]()
|
||||||
|
|
||||||
|
public let socketURL:String
|
||||||
|
public let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
||||||
|
DISPATCH_QUEUE_SERIAL)
|
||||||
|
public let handleQueue = dispatch_queue_create("handleQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
||||||
|
DISPATCH_QUEUE_SERIAL)
|
||||||
|
public let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
||||||
|
DISPATCH_QUEUE_SERIAL)
|
||||||
public var closed:Bool {
|
public var closed:Bool {
|
||||||
return self._closed
|
return self._closed
|
||||||
}
|
}
|
||||||
@ -379,16 +379,16 @@ public class SocketIOClient: NSObject {
|
|||||||
self.connect()
|
self.connect()
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseSocketMessage(msg:String) {
|
public func parseSocketMessage(msg:String) {
|
||||||
SocketParser.parseSocketMessage(msg, socket: self)
|
SocketParser.parseSocketMessage(msg, socket: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseBinaryData(data:NSData) {
|
public func parseBinaryData(data:NSData) {
|
||||||
SocketParser.parseBinaryData(data, socket: self)
|
SocketParser.parseBinaryData(data, socket: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Something happened while polling
|
// Something happened while polling
|
||||||
func pollingDidFail(err:NSError?) {
|
public func pollingDidFail(err:NSError?) {
|
||||||
if !self.reconnecting {
|
if !self.reconnecting {
|
||||||
self._connected = false
|
self._connected = false
|
||||||
self.handleEvent("reconnect", data: err?.localizedDescription, isInternalMessage: true)
|
self.handleEvent("reconnect", data: err?.localizedDescription, isInternalMessage: true)
|
||||||
@ -437,7 +437,7 @@ public class SocketIOClient: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Called when the socket is closed
|
// Called when the socket is closed
|
||||||
func webSocketDidCloseWithCode(code:Int, reason:String!, wasClean:Bool) {
|
public func webSocketDidCloseWithCode(code:Int, reason:String, wasClean:Bool) {
|
||||||
self._connected = false
|
self._connected = false
|
||||||
self._connecting = false
|
self._connecting = false
|
||||||
if self.closed || !self.reconnects {
|
if self.closed || !self.reconnects {
|
||||||
@ -449,7 +449,7 @@ public class SocketIOClient: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Called when an error occurs.
|
// Called when an error occurs.
|
||||||
func webSocketDidFailWithError(error:NSError!) {
|
public func webSocketDidFailWithError(error:NSError) {
|
||||||
self._connected = false
|
self._connected = false
|
||||||
self._connecting = false
|
self._connecting = false
|
||||||
self.handleEvent("error", data: error.localizedDescription, isInternalMessage: true)
|
self.handleEvent("error", data: error.localizedDescription, isInternalMessage: true)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user