RTMPConnection.status

This commit is contained in:
shogo4405
2024-09-02 02:50:37 +09:00
parent 0b52b342dd
commit 7105d71d38
2 changed files with 18 additions and 5 deletions
+15 -2
View File
@@ -151,6 +151,12 @@ public actor RTMPConnection {
public private(set) var uri: URL?
/// The instance connected to server(true) or not(false).
public private(set) var connected = false
/// The stream of events you receive RTMP status events from a service.
public var status: AsyncStream<RTMPStatus> {
AsyncStream { continuation in
statusContinuation = continuation
}
}
/// The object encoding for this RTMPConnection instance.
public let objectEncoding = RTMPConnection.defaultObjectEncoding
@@ -190,6 +196,7 @@ public actor RTMPConnection {
private var windowSizeS = RTMPConnection.defaultWindowSizeS
private let authenticator = RTMPAuthenticator()
private var networkMonitor: NetworkMonitor?
private var statusContinuation: AsyncStream<RTMPStatus>.Continuation?
private var currentTransactionId = RTMPConnection.connectTransactionId
/// Creates a new connection.
@@ -455,6 +462,12 @@ public actor RTMPConnection {
case let message as RTMPSetPeerBandwidthMessage:
bandWidth = message.size
case let message as RTMPCommandMessage:
let response = RTMPResponse(message)
defer {
if let status = response.status {
statusContinutation?.yield(status)
}
}
guard let responder = operations.removeValue(forKey: message.transactionId) else {
switch message.commandName {
case "close":
@@ -471,9 +484,9 @@ public actor RTMPConnection {
chunkSizeS = chunkSize
doOutput(.zero, chunkStreamId: .control, message: RTMPSetChunkSizeMessage(size: UInt32(chunkSizeS)))
}
responder.resume(returning: .init(message))
responder.resume(returning: response)
default:
responder.resume(throwing: Error.requestFailed(response: .init(message)))
responder.resume(throwing: Error.requestFailed(response: response))
}
case let message as RTMPSharedObjectMessage:
guard let remotePath = uri?.absoluteWithoutQueryString else {
+3 -3
View File
@@ -173,9 +173,9 @@ public actor RTMPStream {
public private(set) var readyState: HKStreamReadyState = .idle
/// The stream of events you receive RTMP status events from a service.
public var status: AsyncStream<RTMPStatus> {
let (stream, continutation) = AsyncStream<RTMPStatus>.makeStream()
statusContinuation = continutation
return stream
AsyncStream { continuation in
statusContinuation = continuation
}
}
/// The stream's name used for FMLE-compatible sequences.
public private(set) var fcPublishName: String?