@@ -77,19 +77,19 @@ final class DeviceManagerImpl extends IDeviceManager {
7777 Iterable <BoundDevice > get boundDevices => _kernel.boundDevices;
7878
7979 @override
80- Future <void > initialize () async {
80+ Future <void > initialize ({ CancellationToken ? cancelToken} ) async {
8181 assert (! _isInitialized);
8282
8383 logger? .i ('Initializing DeviceManagerImpl...' );
8484 try {
85- final devices = await fetchAllDevicesInScene ();
85+ final devices = await fetchAllDevicesInScene (). asCancellable (cancelToken) ;
8686 _kernel.registerDevices (devices.map ((x) => BoundDeviceDescriptor (device: x, driverID: x.driverID)));
8787 await _kernel.start ();
8888
8989 unawaited (() async {
9090 // Load WotThings for current scene alongside device load, regardless of online state.
91- await _loadWotThingsForCurrentScene ();
92- await _rebindAll (devices);
91+ await _loadWotThingsForCurrentScene (cancelToken : cancelToken );
92+ await _rebindAll (devices, cancelToken : cancelToken );
9393
9494 final currentScene = _sceneManager.current;
9595 _globalBus.fire (CurrentSceneDevicesReloadedEvent (currentScene));
@@ -126,24 +126,26 @@ final class DeviceManagerImpl extends IDeviceManager {
126126 }
127127
128128 @override
129- Future <void > reloadAllDevices () async {
130- await _deviceOperLock.synchronized (() async {
131- await _kernel.unbindAll ();
132- _kernel.unregisterAllDevices ();
133- final devices = await fetchAllDevicesInScene ();
134- _kernel.registerDevices (devices.map ((x) => BoundDeviceDescriptor (device: x, driverID: x.driverID)));
135- await _reloadWotThingsForCurrentScene ();
136- await _rebindAll (devices);
137- });
129+ Future <void > reloadAllDevices ({CancellationToken ? cancelToken}) async {
130+ await _deviceOperLock
131+ .synchronized (() async {
132+ await _kernel.unbindAll (cancelToken: cancelToken);
133+ _kernel.unregisterAllDevices ();
134+ final devices = await fetchAllDevicesInScene ().asCancellable (cancelToken);
135+ _kernel.registerDevices (devices.map ((x) => BoundDeviceDescriptor (device: x, driverID: x.driverID)));
136+ await _reloadWotThingsForCurrentScene (cancelToken: cancelToken);
137+ await _rebindAll (devices, cancelToken: cancelToken);
138+ })
139+ .asCancellable (cancelToken);
138140 }
139141
140- Future <void > _rebindAll (Iterable <DeviceEntity > devices) async {
142+ Future <void > _rebindAll (Iterable <DeviceEntity > devices, { CancellationToken ? cancelToken} ) async {
141143 await _kernel.unbindAll ();
142144 final futures = < Future > [];
143145 for (var device in devices) {
144146 futures.add (tryBind (device));
145147 }
146- await Future .wait (futures);
148+ await Future .wait (futures). asCancellable (cancelToken) ;
147149 _globalBus.fire (DeviceManagerReadyEvent ());
148150 }
149151
@@ -400,12 +402,12 @@ final class DeviceManagerImpl extends IDeviceManager {
400402 }
401403
402404 /// Reload WotThings for current scene only
403- Future <void > _reloadWotThingsForCurrentScene () async {
405+ Future <void > _reloadWotThingsForCurrentScene ({ CancellationToken ? cancelToken} ) async {
404406 // Dispose of all existing WotThings
405407 _disposeAllWotThings ();
406408
407409 // Load WotThings for devices in current scene
408- await _loadWotThingsForCurrentScene ();
410+ await _loadWotThingsForCurrentScene (cancelToken : cancelToken );
409411
410412 // Fire event to notify that devices for current scene have been reloaded
411413 final currentScene = _sceneManager.current;
@@ -440,7 +442,7 @@ final class DeviceManagerImpl extends IDeviceManager {
440442 }
441443
442444 /// Load WotThings for devices in current scene
443- Future <void > _loadWotThingsForCurrentScene () async {
445+ Future <void > _loadWotThingsForCurrentScene ({ CancellationToken ? cancelToken} ) async {
444446 try {
445447 final devices = await fetchAllDevicesInScene ();
446448 logger? .d ('Loading WotThings for ${devices .length } devices in current scene' );
@@ -449,7 +451,7 @@ final class DeviceManagerImpl extends IDeviceManager {
449451 try {
450452 final metaModule = _deviceModuleRegistry.metaModules[device.driverID];
451453 if (metaModule != null ) {
452- final wotThing = await metaModule.createWotThing (device, this , logger: logger);
454+ final wotThing = await metaModule.createWotThing (device, this , logger: logger, cancelToken : cancelToken );
453455 _wotThings[device.id] = wotThing;
454456
455457 // If device is bound, sync WotThing with actual device state
@@ -469,11 +471,15 @@ final class DeviceManagerImpl extends IDeviceManager {
469471 }
470472
471473 /// Load WotThing for a single device
472- Future <void > _loadWotThingForDevice (DeviceEntity device, {bool replaceExisting = true }) async {
474+ Future <void > _loadWotThingForDevice (
475+ DeviceEntity device, {
476+ bool replaceExisting = true ,
477+ CancellationToken ? cancelToken,
478+ }) async {
473479 try {
474480 final metaModule = _deviceModuleRegistry.metaModules[device.driverID];
475481 if (metaModule != null ) {
476- final wotThing = await metaModule.createWotThing (device, this , logger: logger);
482+ final wotThing = await metaModule.createWotThing (device, this , logger: logger, cancelToken : cancelToken );
477483 if (! replaceExisting && _wotThings.containsKey (device.id)) {
478484 return ;
479485 }
@@ -490,7 +496,7 @@ final class DeviceManagerImpl extends IDeviceManager {
490496
491497 // If device is bound, sync WotThing with actual device state
492498 if (isBound (device.id)) {
493- await _syncWotThingWithBoundDevice (device.id, wotThing);
499+ await _syncWotThingWithBoundDevice (device.id, wotThing, cancelToken : cancelToken );
494500 }
495501 logger? .d ('Successfully loaded WotThing for device ${device .id }' );
496502 }
@@ -500,10 +506,13 @@ final class DeviceManagerImpl extends IDeviceManager {
500506 }
501507
502508 /// Sync WotThing properties with actual device state
503- Future <void > _syncWotThingWithBoundDevice (String deviceID, WotThing wotThing) async {
509+ Future <void > _syncWotThingWithBoundDevice (
510+ String deviceID,
511+ WotThing wotThing, {
512+ CancellationToken ? cancelToken,
513+ }) async {
504514 try {
505- // This is where we would sync WotThing properties with actual device state
506- // For now, we'll leave this as a placeholder for future implementation
515+ wotThing.sync (cancelToken: cancelToken);
507516 logger? .d ('WotThing synced for device $deviceID ' );
508517 } catch (e) {
509518 logger? .w ('Failed to sync WotThing for device $deviceID : $e ' );
0 commit comments