Skip to content

Commit d0f4738

Browse files
committed
OcaGroup: make members/groupController true properties
1 parent 7987d4e commit d0f4738

File tree

1 file changed

+22
-44
lines changed
  • Sources/SwiftOCADevice/OCC/ControlClasses/Agents

1 file changed

+22
-44
lines changed

Sources/SwiftOCADevice/OCC/ControlClasses/Agents/Group.swift

Lines changed: 22 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright (c) 2024 PADL Software Pty Ltd
2+
// Copyright (c) 2024-2026 PADL Software Pty Ltd
33
//
44
// Licensed under the Apache License, Version 2.0 (the License);
55
// you may not use this file except in compliance with the License.
@@ -28,7 +28,16 @@ open class OcaGroup<Member: OcaRoot>: OcaAgent {
2828
override open class var classID: OcaClassID { OcaClassID("1.2.22") }
2929
override open class var classVersion: OcaClassVersionNumber { 3 }
3030

31-
public private(set) var members = [Member]()
31+
@OcaDeviceProperty(
32+
propertyID: OcaPropertyID("3.1")
33+
)
34+
public var members: OcaList<Member> = []
35+
36+
@OcaDeviceProperty(
37+
propertyID: OcaPropertyID("3.2"),
38+
getMethodID: OcaMethodID("3.5")
39+
)
40+
public var groupController: OcaONo = OcaInvalidONo
3241

3342
@OcaDeviceProperty(
3443
propertyID: OcaPropertyID("3.3"),
@@ -83,11 +92,11 @@ open class OcaGroup<Member: OcaRoot>: OcaAgent {
8392
from controller: any OcaController
8493
) async throws -> Ocp1Response {
8594
switch command.methodID {
86-
case OcaMethodID("3.1"):
95+
case OcaMethodID("3.1"): // GetMembers
8796
try decodeNullCommand(command)
8897
try await ensureReadable(by: controller, command: command)
8998
return try encodeResponse(members.map(\.objectNumber))
90-
case OcaMethodID("3.2"):
99+
case OcaMethodID("3.2"): // SetMembers
91100
let memberONos: [OcaONo] = try decodeCommand(command)
92101
let members = try await memberONos.asyncMap { @Sendable memberONo in
93102
guard let member = await deviceDelegate?
@@ -100,7 +109,7 @@ open class OcaGroup<Member: OcaRoot>: OcaAgent {
100109
try await ensureWritable(by: controller, command: command)
101110
try await set(members: members)
102111
return Ocp1Response()
103-
case OcaMethodID("3.3"):
112+
case OcaMethodID("3.3"): // AddMember
104113
let memberONo: OcaONo = try decodeCommand(command)
105114
guard let member = await deviceDelegate?.resolve(objectNumber: memberONo) as? Member
106115
else {
@@ -109,7 +118,7 @@ open class OcaGroup<Member: OcaRoot>: OcaAgent {
109118
try await ensureWritable(by: controller, command: command)
110119
try await add(member: member)
111120
return Ocp1Response()
112-
case OcaMethodID("3.4"):
121+
case OcaMethodID("3.4"): // DeleteMember
113122
let memberONo: OcaONo = try decodeCommand(command)
114123
guard let member = await deviceDelegate?.resolve(objectNumber: memberONo) as? Member
115124
else {
@@ -118,6 +127,10 @@ open class OcaGroup<Member: OcaRoot>: OcaAgent {
118127
try await ensureWritable(by: controller, command: command)
119128
try await delete(member: member)
120129
return Ocp1Response()
130+
case OcaMethodID("3.5"): // GroupControllerONo
131+
try decodeNullCommand(command)
132+
try await ensureReadable(by: controller, command: command)
133+
return try encodeResponse(groupController)
121134
default:
122135
return try await super.handleCommand(command, from: controller)
123136
}
@@ -199,28 +212,10 @@ open class _OcaPeerToPeerGroup<Member: OcaGroupPeerToPeerMember>: OcaGroup<Membe
199212
member.group = nil
200213
try await super.delete(member: member)
201214
}
202-
203-
override open func handleCommand(
204-
_ command: Ocp1Command,
205-
from controller: any OcaController
206-
) async throws -> Ocp1Response {
207-
switch command.methodID {
208-
case OcaMethodID("3.5"):
209-
try decodeNullCommand(command)
210-
try await ensureReadable(by: controller, command: command)
211-
return try encodeResponse(OcaInvalidONo)
212-
case OcaMethodID("3.6"):
213-
let _: OcaONo = try decodeCommand(command)
214-
try await ensureWritable(by: controller, command: command)
215-
throw Ocp1Error.status(.invalidRequest)
216-
default:
217-
return try await super.handleCommand(command, from: controller)
218-
}
219-
}
220215
}
221216

222217
open class _OcaGroupControllerGroup<Member: OcaRoot>: OcaGroup<Member> {
223-
private var groupController: GroupController?
218+
private var _groupController: GroupController?
224219

225220
public init(
226221
objectNumber: OcaONo? = nil,
@@ -237,31 +232,14 @@ open class _OcaGroupControllerGroup<Member: OcaRoot>: OcaGroup<Member> {
237232
addToRootBlock: addToRootBlock
238233
)
239234

240-
groupController = try await GroupController(self)
235+
_groupController = try await GroupController(self)
236+
groupController = _groupController!.objectNumber
241237
}
242238

243239
public required init(from decoder: Decoder) throws {
244240
throw Ocp1Error.notImplemented
245241
}
246242

247-
override open func handleCommand(
248-
_ command: Ocp1Command,
249-
from controller: any OcaController
250-
) async throws -> Ocp1Response {
251-
switch command.methodID {
252-
case OcaMethodID("3.5"):
253-
try decodeNullCommand(command)
254-
try await ensureReadable(by: controller, command: command)
255-
return try encodeResponse(groupController?.objectNumber ?? OcaInvalidONo)
256-
case OcaMethodID("3.6"):
257-
let _: OcaONo = try decodeCommand(command)
258-
try await ensureWritable(by: controller, command: command)
259-
throw Ocp1Error.status(.notImplemented)
260-
default:
261-
return try await super.handleCommand(command, from: controller)
262-
}
263-
}
264-
265243
@OcaDevice
266244
public class GroupController: OcaRoot {
267245
weak var group: _OcaGroupControllerGroup?

0 commit comments

Comments
 (0)