From 36962cc05985e3a5d928fde01bf0f00096b5e614 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 13 Aug 2021 15:22:15 +1000 Subject: [PATCH] Clean up WebSocket --- Session.xcodeproj/project.pbxproj | 8 +-- Session/Calls/CallVC.swift | 25 ++++---- SessionMessagingKit/Calls/MockWebSocket.swift | 61 ------------------- SessionMessagingKit/Calls/WebSocket.swift | 48 +++++++++++++++ 4 files changed, 66 insertions(+), 76 deletions(-) delete mode 100644 SessionMessagingKit/Calls/MockWebSocket.swift create mode 100644 SessionMessagingKit/Calls/WebSocket.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index f7f3842fb..1ae1439fe 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -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 = ""; }; B8B558F226C4CA4600693325 /* MockCallConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCallConfig.swift; sourceTree = ""; }; B8B558F826C4CE6800693325 /* CallVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallVC.swift; sourceTree = ""; }; - B8B558FA26C4D25C00693325 /* MockWebSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockWebSocket.swift; sourceTree = ""; }; + B8B558FA26C4D25C00693325 /* WebSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocket.swift; sourceTree = ""; }; B8B558FC26C4D35400693325 /* MockCallServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCallServer.swift; sourceTree = ""; }; B8B558FE26C4E05E00693325 /* CallManager+Messages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CallManager+Messages.swift"; sourceTree = ""; }; B8B5590026C4E2A400693325 /* SignalingMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalingMessage.swift; sourceTree = ""; }; @@ -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 = ""; @@ -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 */, diff --git a/Session/Calls/CallVC.swift b/Session/Calls/CallVC.swift index e2a60fbd5..489ec4adc 100644 --- a/Session/Calls/CallVC.swift +++ b/Session/Calls/CallVC.swift @@ -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.") } diff --git a/SessionMessagingKit/Calls/MockWebSocket.swift b/SessionMessagingKit/Calls/MockWebSocket.swift deleted file mode 100644 index d2c4224d0..000000000 --- a/SessionMessagingKit/Calls/MockWebSocket.swift +++ /dev/null @@ -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() - } -} diff --git a/SessionMessagingKit/Calls/WebSocket.swift b/SessionMessagingKit/Calls/WebSocket.swift new file mode 100644 index 000000000..e3139dff3 --- /dev/null +++ b/SessionMessagingKit/Calls/WebSocket.swift @@ -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() + } +}