Clean up WebSocket

pull/560/head
Niels Andriesse 3 years ago
parent 48ef3f85c0
commit 36962cc059

@ -251,7 +251,7 @@
B8B558F126C4BB0600693325 /* CameraManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558F026C4BB0600693325 /* CameraManager.swift */; };
B8B558F326C4CA4600693325 /* MockCallConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558F226C4CA4600693325 /* MockCallConfig.swift */; };
B8B558F926C4CE6800693325 /* CallVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558F826C4CE6800693325 /* CallVC.swift */; };
B8B558FB26C4D25C00693325 /* MockWebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FA26C4D25C00693325 /* MockWebSocket.swift */; };
B8B558FB26C4D25C00693325 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FA26C4D25C00693325 /* WebSocket.swift */; };
B8B558FD26C4D35400693325 /* MockCallServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FC26C4D35400693325 /* MockCallServer.swift */; };
B8B558FF26C4E05E00693325 /* CallManager+Messages.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FE26C4E05E00693325 /* CallManager+Messages.swift */; };
B8B5590126C4E2A400693325 /* SignalingMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B5590026C4E2A400693325 /* SignalingMessage.swift */; };
@ -1227,7 +1227,7 @@
B8B558F026C4BB0600693325 /* CameraManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraManager.swift; sourceTree = "<group>"; };
B8B558F226C4CA4600693325 /* MockCallConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCallConfig.swift; sourceTree = "<group>"; };
B8B558F826C4CE6800693325 /* CallVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallVC.swift; sourceTree = "<group>"; };
B8B558FA26C4D25C00693325 /* MockWebSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockWebSocket.swift; sourceTree = "<group>"; };
B8B558FA26C4D25C00693325 /* WebSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocket.swift; sourceTree = "<group>"; };
B8B558FC26C4D35400693325 /* MockCallServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCallServer.swift; sourceTree = "<group>"; };
B8B558FE26C4E05E00693325 /* CallManager+Messages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CallManager+Messages.swift"; sourceTree = "<group>"; };
B8B5590026C4E2A400693325 /* SignalingMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalingMessage.swift; sourceTree = "<group>"; };
@ -2372,9 +2372,9 @@
B8B558FE26C4E05E00693325 /* CallManager+Messages.swift */,
B806ECA226C4A8C6008BDA44 /* MockTURNServer.swift */,
B8B558F226C4CA4600693325 /* MockCallConfig.swift */,
B8B558FA26C4D25C00693325 /* MockWebSocket.swift */,
B8B558FC26C4D35400693325 /* MockCallServer.swift */,
B8B5590026C4E2A400693325 /* SignalingMessage.swift */,
B8B558FA26C4D25C00693325 /* WebSocket.swift */,
);
path = Calls;
sourceTree = "<group>";
@ -4771,7 +4771,7 @@
C32C5BEF256DC8EE003C73A2 /* OWSDisappearingMessagesJob.m in Sources */,
C34A977425A3E34A00852C71 /* ClosedGroupControlMessage.swift in Sources */,
B88FA7B826045D100049422F /* OpenGroupAPIV2.swift in Sources */,
B8B558FB26C4D25C00693325 /* MockWebSocket.swift in Sources */,
B8B558FB26C4D25C00693325 /* WebSocket.swift in Sources */,
C32C5E97256DE0CB003C73A2 /* OWSPrimaryStorage.m in Sources */,
C32C5EB9256DE130003C73A2 /* OWSQuotedReplyModel+Conversion.swift in Sources */,
C3A71D1F25589AC30043A11F /* WebSocketResources.pb.swift in Sources */,

@ -2,7 +2,8 @@ import UIKit
import AVFoundation
import WebRTC
final class CallVC : UIViewController, CameraCaptureDelegate, CallManagerDelegate, MockWebSocketDelegate {
final class CallVC : UIViewController, CameraCaptureDelegate, CallManagerDelegate, WebSocketDelegate {
private var webSocket: WebSocket?
private let videoCallVC = VideoCallVC()
let videoCapturer: RTCVideoCapturer = RTCCameraVideoCapturer(delegate: CallManager.shared.localVideoSource)
private var messageQueue: [String] = []
@ -98,8 +99,9 @@ final class CallVC : UIViewController, CameraCaptureDelegate, CallManagerDelegat
if let messages = info.messages {
self.handle(messages)
}
MockWebSocket.shared.delegate = self
MockWebSocket.shared.connect(url: URL(string: info.wssURL)!)
let webSocket = WebSocket(url: URL(string: info.wssURL)!)
webSocket.delegate = self
self.webSocket = webSocket
}.catch2 { [weak self] error in
guard let self = self else { return }
self.isConnected = false
@ -118,8 +120,9 @@ final class CallVC : UIViewController, CameraCaptureDelegate, CallManagerDelegat
}
let message = [ "type": "bye" ]
guard let data = try? JSONSerialization.data(withJSONObject: message, options: [.prettyPrinted]) else { return }
MockWebSocket.shared.send(data)
MockWebSocket.shared.delegate = nil
webSocket?.send(data)
webSocket?.delegate = nil
webSocket = nil
currentRoomInfo = nil
isConnected = false
CallManager.shared.endCall()
@ -160,7 +163,7 @@ final class CallVC : UIViewController, CameraCaptureDelegate, CallManagerDelegat
}
// MARK: Streaming
func webSocketDidConnect(_ webSocket: MockWebSocket) {
func webSocketDidConnect(_ webSocket: WebSocket) {
guard let info = currentRoomInfo else { return }
log("Connected to web socket.")
let message = [
@ -169,21 +172,21 @@ final class CallVC : UIViewController, CameraCaptureDelegate, CallManagerDelegat
"clientid": info.clientID
]
guard let data = try? JSONSerialization.data(withJSONObject: message, options: [.prettyPrinted]) else { return }
MockWebSocket.shared.send(data)
webSocket.send(data)
if isInitiator {
CallManager.shared.initiateCall().retainUntilComplete()
}
drainMessageQueue()
}
func webSocket(_ webSocket: MockWebSocket, didReceive data: String) {
func webSocket(_ webSocket: WebSocket, didReceive message: String) {
log("Received data from web socket.")
handle(data)
handle(message)
CallManager.shared.drainMessageQueue()
}
func webSocketDidDisconnect(_ webSocket: MockWebSocket) {
MockWebSocket.shared.delegate = nil
func webSocketDidDisconnect(_ webSocket: WebSocket) {
webSocket.delegate = nil
log("Disconnecting from web socket.")
}

@ -1,61 +0,0 @@
import Foundation
import SocketRocket
public protocol MockWebSocketDelegate : AnyObject {
func webSocketDidConnect(_ webSocket: MockWebSocket)
func webSocketDidDisconnect(_ webSocket: MockWebSocket)
func webSocket(_ webSocket: MockWebSocket, didReceive data: String)
}
public final class MockWebSocket : NSObject {
public weak var delegate: MockWebSocketDelegate?
private var socket: SRWebSocket?
public var isConnected: Bool {
return socket != nil
}
private override init() { }
public static let shared = MockWebSocket()
public func connect(url: URL) {
socket = SRWebSocket(url: url)
socket?.delegate = self
socket?.open()
}
public func disconnect() {
socket?.close()
socket = nil
delegate?.webSocketDidDisconnect(self)
}
public func send(_ data: Data) {
guard let socket = socket else { return }
socket.send(data)
}
}
extension MockWebSocket : SRWebSocketDelegate {
public func webSocket(_ webSocket: SRWebSocket!, didReceiveMessage message: Any!) {
guard let message = message as? String else { return }
delegate?.webSocket(self, didReceive: message)
}
public func webSocketDidOpen(_ webSocket: SRWebSocket!) {
delegate?.webSocketDidConnect(self)
}
public func webSocket(_ webSocket: SRWebSocket!, didFailWithError error: Error!) {
SNLog("Web socket failed with error: \(error?.localizedDescription ?? "nil").")
self.disconnect()
}
public func webSocket(_ webSocket: SRWebSocket!, didCloseWithCode code: Int, reason: String!, wasClean: Bool) {
SNLog("Web socket closed.")
self.disconnect()
}
}

@ -0,0 +1,48 @@
import Foundation
import SocketRocket
public protocol WebSocketDelegate : AnyObject {
func webSocketDidConnect(_ webSocket: WebSocket)
func webSocketDidDisconnect(_ webSocket: WebSocket)
func webSocket(_ webSocket: WebSocket, didReceive 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(url: URL) {
socket.open()
}
public func send(_ data: Data) {
socket.send(data)
}
public func webSocket(_ webSocket: SRWebSocket!, didReceiveMessage message: Any!) {
guard let message = message as? String else { return }
delegate?.webSocket(self, didReceive: message)
}
public func disconnect() {
socket.close()
delegate?.webSocketDidDisconnect(self)
}
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()
}
}
Loading…
Cancel
Save