You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/SessionMessagingKit/Calls/Temp/WebSocket.swift

53 lines
1.4 KiB
Swift

import Foundation
import SocketRocket
public protocol WebSocketDelegate : AnyObject {
func handleWebSocketConnected()
func handleWebSocketDisconnected()
func handleWebSocketMessage(_ message: String)
}
public final class WebSocket : NSObject, SRWebSocketDelegate {
private let socket: SRWebSocket
public weak var delegate: WebSocketDelegate?
public init(url: URL) {
socket = SRWebSocket(url: url)
super.init()
socket.delegate = self
}
public func connect() {
socket.open()
}
public func send(_ data: Data) {
socket.send(data)
}
public func webSocketDidOpen(_ webSocket: SRWebSocket!) {
delegate?.handleWebSocketConnected()
}
public func webSocket(_ webSocket: SRWebSocket!, didReceiveMessage message: Any!) {
guard let message = message as? String else { return }
delegate?.handleWebSocketMessage(message)
}
public func disconnect() {
socket.close()
delegate?.handleWebSocketDisconnected()
}
public func webSocket(_ webSocket: SRWebSocket!, didFailWithError error: Error!) {
SNLog("Web socket failed with error: \(error?.localizedDescription ?? "nil").")
disconnect()
}
public func webSocket(_ webSocket: SRWebSocket!, didCloseWithCode code: Int, reason: String!, wasClean: Bool) {
SNLog("Web socket closed.")
disconnect()
}
}