mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
58 lines
1.6 KiB
Swift
58 lines
1.6 KiB
Swift
|
import Foundation
|
||
|
import SocketRocket
|
||
|
|
||
|
protocol MockWebSocketDelegate : AnyObject {
|
||
|
|
||
|
func webSocketDidConnect(_ webSocket: MockWebSocket)
|
||
|
func webSocketDidDisconnect(_ webSocket: MockWebSocket)
|
||
|
func webSocket(_ webSocket: MockWebSocket, didReceive data: String)
|
||
|
}
|
||
|
|
||
|
final class MockWebSocket : NSObject {
|
||
|
weak var delegate: MockWebSocketDelegate?
|
||
|
var socket: SRWebSocket?
|
||
|
|
||
|
var isConnected: Bool {
|
||
|
return socket != nil
|
||
|
}
|
||
|
|
||
|
func connect(url: URL) {
|
||
|
socket = SRWebSocket(url: url)
|
||
|
socket?.delegate = self
|
||
|
socket?.open()
|
||
|
}
|
||
|
|
||
|
func disconnect() {
|
||
|
socket?.close()
|
||
|
socket = nil
|
||
|
delegate?.webSocketDidDisconnect(self)
|
||
|
}
|
||
|
|
||
|
func send(data: Data) {
|
||
|
guard let socket = socket else { return }
|
||
|
socket.send(data)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension MockWebSocket : SRWebSocketDelegate {
|
||
|
|
||
|
func webSocket(_ webSocket: SRWebSocket!, didReceiveMessage message: Any!) {
|
||
|
guard let message = message as? String else { return }
|
||
|
delegate?.webSocket(self, didReceive: message)
|
||
|
}
|
||
|
|
||
|
func webSocketDidOpen(_ webSocket: SRWebSocket!) {
|
||
|
delegate?.webSocketDidConnect(self)
|
||
|
}
|
||
|
|
||
|
func webSocket(_ webSocket: SRWebSocket!, didFailWithError error: Error!) {
|
||
|
SNLog("Web socket failed with error: \(error?.localizedDescription ?? "nil").")
|
||
|
self.disconnect()
|
||
|
}
|
||
|
|
||
|
func webSocket(_ webSocket: SRWebSocket!, didCloseWithCode code: Int, reason: String!, wasClean: Bool) {
|
||
|
SNLog("Web socket closed.")
|
||
|
self.disconnect()
|
||
|
}
|
||
|
}
|