mirror of
https://github.com/HaishinKit/HaishinKit.swift.git
synced 2026-05-07 20:12:28 +00:00
65 lines
1.7 KiB
Swift
65 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
public enum MoQTSetupParameterType: Int, Sendable {
|
|
case role = 0x00
|
|
case path = 0x01
|
|
case maxSubscribeId = 0x02
|
|
}
|
|
|
|
public enum MoQTSetupRole: Int, Sendable {
|
|
case publisher = 0x01
|
|
case subscriber = 0x02
|
|
case pubSub = 0x03
|
|
}
|
|
|
|
public struct MoQTSetupParameter: Sendable {
|
|
enum Error: Swift.Error {
|
|
case missionSetupParameterType
|
|
}
|
|
|
|
public let key: MoQTSetupParameterType
|
|
public let value: (any Sendable)
|
|
|
|
var payload: Data {
|
|
get throws {
|
|
switch value {
|
|
case let value as String:
|
|
var payload = MoQTPayload()
|
|
payload.putInt(key.rawValue)
|
|
payload.putString(value)
|
|
return payload.data
|
|
case let value as MoQTSetupRole:
|
|
var payload = MoQTPayload()
|
|
payload.putInt(key.rawValue)
|
|
payload.putInt(1)
|
|
payload.putInt(value.rawValue)
|
|
return payload.data
|
|
default:
|
|
throw MoQTControlMessageError.notImplemented
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension MoQTSetupParameter {
|
|
init(_ payload: inout MoQTPayload) throws {
|
|
let type = try payload.getInt()
|
|
let length = try payload.getInt()
|
|
|
|
switch MoQTSetupParameterType(rawValue: type) {
|
|
case .path:
|
|
key = .path
|
|
let data = try payload.getData(length)
|
|
value = String(data: data, encoding: .utf8)
|
|
case .role:
|
|
key = .role
|
|
value = try payload.getInt()
|
|
case .maxSubscribeId:
|
|
key = .maxSubscribeId
|
|
value = try payload.getInt()
|
|
default:
|
|
throw Error.missionSetupParameterType
|
|
}
|
|
}
|
|
}
|