From 15b903717f2a796db4947536e1ca5ab687ff94df Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 6 Jan 2025 20:48:54 +0900 Subject: [PATCH] Implement --- Sources/LiveKit/Core/Room+SignalClientDelegate.swift | 8 ++++++-- Sources/LiveKit/Core/Room.swift | 4 ++++ Sources/LiveKit/Core/SignalClient.swift | 1 - Tests/LiveKitTests/RoomTests.swift | 7 ++++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Sources/LiveKit/Core/Room+SignalClientDelegate.swift b/Sources/LiveKit/Core/Room+SignalClientDelegate.swift index 6f6d5618c..fe3c37b35 100644 --- a/Sources/LiveKit/Core/Room+SignalClientDelegate.swift +++ b/Sources/LiveKit/Core/Room+SignalClientDelegate.swift @@ -103,9 +103,14 @@ extension Room: SignalClientDelegate { _state.mutate { $0.sid = Room.Sid(from: joinResponse.room.sid) $0.name = joinResponse.room.name + $0.serverInfo = joinResponse.serverInfo + $0.creationTime = Date(timeIntervalSince1970: TimeInterval(joinResponse.room.creationTime)) + $0.maxParticipants = Int(joinResponse.room.maxParticipants) + $0.metadata = joinResponse.room.metadata $0.isRecording = joinResponse.room.activeRecording - $0.serverInfo = joinResponse.serverInfo + $0.numParticipants = Int(joinResponse.room.numParticipants) + $0.numPublishers = Int(joinResponse.room.numPublishers) localParticipant.set(info: joinResponse.participant, connectionState: $0.connectionState) @@ -122,7 +127,6 @@ extension Room: SignalClientDelegate { _state.mutate { $0.metadata = room.metadata $0.isRecording = room.activeRecording - $0.maxParticipants = Int(room.maxParticipants) $0.numParticipants = Int(room.numParticipants) $0.numPublishers = Int(room.numPublishers) } diff --git a/Sources/LiveKit/Core/Room.swift b/Sources/LiveKit/Core/Room.swift index 65c2b9dab..953a8f439 100644 --- a/Sources/LiveKit/Core/Room.swift +++ b/Sources/LiveKit/Core/Room.swift @@ -62,6 +62,9 @@ public class Room: NSObject, ObservableObject, Loggable { @objc public var activeSpeakers: [Participant] { _state.activeSpeakers } + @objc + public var creationTime: Date? { _state.creationTime } + /// If the current room has a participant with `recorder:true` in its JWT grant. @objc public var isRecording: Bool { _state.isRecording } @@ -125,6 +128,7 @@ public class Room: NSObject, ObservableObject, Loggable { var remoteParticipants = [Participant.Identity: RemoteParticipant]() var activeSpeakers = [Participant]() + var creationTime: Date? var isRecording: Bool = false var maxParticipants: Int = 0 diff --git a/Sources/LiveKit/Core/SignalClient.swift b/Sources/LiveKit/Core/SignalClient.swift index 2f4f543a6..f8b21f04a 100644 --- a/Sources/LiveKit/Core/SignalClient.swift +++ b/Sources/LiveKit/Core/SignalClient.swift @@ -271,7 +271,6 @@ private extension SignalClient { _lastJoinResponse = joinResponse _delegate.notifyDetached { await $0.signalClient(self, didReceiveConnectResponse: .join(joinResponse)) } _connectResponseCompleter.resume(returning: .join(joinResponse)) - print("creationTime: \(joinResponse.room.creationTime)") await _restartPingTimer() case let .reconnect(response): diff --git a/Tests/LiveKitTests/RoomTests.swift b/Tests/LiveKitTests/RoomTests.swift index cca72626d..430f8369b 100644 --- a/Tests/LiveKitTests/RoomTests.swift +++ b/Tests/LiveKitTests/RoomTests.swift @@ -18,14 +18,19 @@ import XCTest class RoomTests: XCTestCase { - func testResolveSid() async throws { + func testRoomProperties() async throws { try await withRooms([RoomTestingOptions()]) { rooms in // Alias to Room let room1 = rooms[0] + // SID let sid = try await room1.sid() print("Room.sid(): \(String(describing: sid))") XCTAssert(sid.stringValue.starts(with: "RM_")) + + // creationTime + XCTAssert(room1.creationTime != nil) + print("Room.creationTime: \(String(describing: room1.creationTime))") } }