feat: extend BindPayload with optional loop field; add setPlayMode service

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
km2023
2026-05-06 10:38:19 +08:00
parent 4b1017df42
commit 7aec09be2a
2 changed files with 62 additions and 3 deletions

View File

@@ -27,14 +27,26 @@ final class DeviceInfoService {
func bindDevice(userId: String) throws {
try protocolService.sendJSON(
type: .bindDevice,
payload: BindPayload(type: CommandType.bindDevice.rawValue, userId: userId)
payload: BindPayload(type: CommandType.bindDevice.rawValue, userId: userId, loop: nil)
)
}
func unbindDevice(userId: String) throws {
try protocolService.sendJSON(
type: .unbindDevice,
payload: BindPayload(type: CommandType.unbindDevice.rawValue, userId: userId)
payload: BindPayload(type: CommandType.unbindDevice.rawValue, userId: userId, loop: nil)
)
}
/// BIND_DEVICE 0x0Fpayload loop
func setPlayMode(userId: String, loop: PlayMode) throws {
try protocolService.sendJSON(
type: .bindDevice,
payload: BindPayload(
type: CommandType.bindDevice.rawValue,
userId: userId,
loop: UInt8(loop.rawValue)
)
)
}
@@ -63,9 +75,25 @@ private struct CommandPayload: Encodable {
let type: UInt8
}
private struct BindPayload: Encodable {
/// / / payload
/// `loop == nil` null Expo zod.optional
struct BindPayload: Encodable {
let type: UInt8
let userId: String
let loop: UInt8?
enum CodingKeys: String, CodingKey {
case type, userId, loop
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(type, forKey: .type)
try container.encode(userId, forKey: .userId)
if let loop = loop {
try container.encode(loop, forKey: .loop)
}
}
}
private struct FileKeyPayload: Encodable {