Skip to content

Commit e08232f

Browse files
Mark setupDeviceForNodeID: on MTRDeviceController as abstract.
This is overridden by the XPC and Concrete implementations. Also, there is no need to override deviceForNodeID and removeDevice in MTRDeviceController_Concrete, so those overrides are removed.
1 parent 12f04dc commit e08232f

File tree

3 files changed

+6
-60
lines changed

3 files changed

+6
-60
lines changed

src/darwin/Framework/CHIP/MTRDeviceController.mm

+2-36
Original file line numberDiff line numberDiff line change
@@ -1246,44 +1246,10 @@ - (MTRBaseDevice *)baseDeviceForNodeID:(NSNumber *)nodeID
12461246
return [[MTRBaseDevice alloc] initWithNodeID:nodeID controller:self];
12471247
}
12481248

1249-
// If prefetchedClusterData is not provided, load attributes individually from controller data store
12501249
- (MTRDevice *)_setupDeviceForNodeID:(NSNumber *)nodeID prefetchedClusterData:(NSDictionary<MTRClusterPath *, MTRDeviceClusterData *> *)prefetchedClusterData
12511250
{
1252-
os_unfair_lock_assert_owner(self.deviceMapLock);
1253-
1254-
MTRDevice * deviceToReturn = [[MTRDevice_Concrete alloc] initWithNodeID:nodeID controller:self];
1255-
// If we're not running, don't add the device to our map. That would
1256-
// create a cycle that nothing would break. Just return the device,
1257-
// which will be in exactly the state it would be in if it were created
1258-
// while we were running and then we got shut down.
1259-
if ([self isRunning]) {
1260-
[_nodeIDToDeviceMap setObject:deviceToReturn forKey:nodeID];
1261-
}
1262-
1263-
if (prefetchedClusterData) {
1264-
if (prefetchedClusterData.count) {
1265-
[deviceToReturn setPersistedClusterData:prefetchedClusterData];
1266-
}
1267-
} else if (_controllerDataStore) {
1268-
// Load persisted cluster data if they exist.
1269-
NSDictionary * clusterData = [_controllerDataStore getStoredClusterDataForNodeID:nodeID];
1270-
MTR_LOG("%@ Loaded %lu cluster data from storage for %@", self, static_cast<unsigned long>(clusterData.count), deviceToReturn);
1271-
if (clusterData.count) {
1272-
[deviceToReturn setPersistedClusterData:clusterData];
1273-
}
1274-
}
1275-
1276-
// TODO: Figure out how to get the device data as part of our bulk-read bits.
1277-
if (_controllerDataStore) {
1278-
auto * deviceData = [_controllerDataStore getStoredDeviceDataForNodeID:nodeID];
1279-
if (deviceData.count) {
1280-
[deviceToReturn setPersistedDeviceData:deviceData];
1281-
}
1282-
}
1283-
1284-
[deviceToReturn setStorageBehaviorConfiguration:_storageBehaviorConfiguration];
1285-
1286-
return deviceToReturn;
1251+
MTR_ABSTRACT_METHOD();
1252+
return nil;
12871253
}
12881254

12891255
- (MTRDevice *)deviceForNodeID:(NSNumber *)nodeID

src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm

-24
Original file line numberDiff line numberDiff line change
@@ -1223,30 +1223,6 @@ - (MTRDevice *)_setupDeviceForNodeID:(NSNumber *)nodeID prefetchedClusterData:(N
12231223
return deviceToReturn;
12241224
}
12251225

1226-
- (MTRDevice *)deviceForNodeID:(NSNumber *)nodeID
1227-
{
1228-
std::lock_guard lock(*self.deviceMapLock);
1229-
MTRDevice * deviceToReturn = [self.nodeIDToDeviceMap objectForKey:nodeID];
1230-
if (!deviceToReturn) {
1231-
deviceToReturn = [self _setupDeviceForNodeID:nodeID prefetchedClusterData:nil];
1232-
}
1233-
1234-
return deviceToReturn;
1235-
}
1236-
1237-
- (void)removeDevice:(MTRDevice *)device
1238-
{
1239-
std::lock_guard lock(*self.deviceMapLock);
1240-
auto * nodeID = device.nodeID;
1241-
MTRDevice * deviceToRemove = [self.nodeIDToDeviceMap objectForKey:nodeID];
1242-
if (deviceToRemove == device) {
1243-
[deviceToRemove invalidate];
1244-
[self.nodeIDToDeviceMap removeObjectForKey:nodeID];
1245-
} else {
1246-
MTR_LOG_ERROR("%@ Error: Cannot remove device %p with nodeID %llu", self, device, nodeID.unsignedLongLongValue);
1247-
}
1248-
}
1249-
12501226
#ifdef DEBUG
12511227
- (NSDictionary<NSNumber *, NSNumber *> *)unitTestGetDeviceAttributeCounts
12521228
{

src/darwin/Framework/CHIP/MTRDeviceController_Internal.h

+4
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ NS_ASSUME_NONNULL_BEGIN
298298
#pragma mark - Device-specific data and SDK access
299299
// DeviceController will act as a central repository for this opaque dictionary that MTRDevice manages
300300
- (MTRDevice *)deviceForNodeID:(NSNumber *)nodeID;
301+
/**
302+
* _setupDeviceForNodeID is a hook expected to be implemented by subclasses to
303+
* actually allocate a device object of the right type.
304+
*/
301305
- (MTRDevice *)_setupDeviceForNodeID:(NSNumber *)nodeID prefetchedClusterData:(nullable NSDictionary<MTRClusterPath *, MTRDeviceClusterData *> *)prefetchedClusterData;
302306
- (void)removeDevice:(MTRDevice *)device;
303307

0 commit comments

Comments
 (0)