20
20
21
21
#import " MTRBaseDevice_Internal.h"
22
22
#import " MTRCommissioningParameters.h"
23
+ #import " MTRDeviceControllerDelegateBridge.h"
23
24
#import " MTRDeviceControllerFactory_Internal.h"
24
25
#import " MTRDeviceControllerStartupParams.h"
25
26
#import " MTRDeviceControllerStartupParams_Internal.h"
26
- #import " MTRDevicePairingDelegateBridge.h"
27
27
#import " MTRDevice_Internal.h"
28
28
#import " MTRError_Internal.h"
29
29
#import " MTRKeypair.h"
@@ -84,7 +84,7 @@ @interface MTRDeviceController ()
84
84
85
85
@property (readonly ) chip::Controller::DeviceCommissioner * cppCommissioner;
86
86
@property (readonly ) chip::Credentials::PartialDACVerifier * partialDACVerifier;
87
- @property (readonly ) MTRDevicePairingDelegateBridge * pairingDelegateBridge ;
87
+ @property (readonly ) MTRDeviceControllerDelegateBridge * deviceControllerDelegateBridge ;
88
88
@property (readonly ) MTROperationalCredentialsDelegate * operationalCredentialsDelegate;
89
89
@property (readonly ) MTRP256KeypairBridge signingKeypairBridge;
90
90
@property (readonly ) MTRP256KeypairBridge operationalKeypairBridge;
@@ -104,8 +104,8 @@ - (instancetype)initWithFactory:(MTRDeviceControllerFactory *)factory queue:(dis
104
104
_deviceMapLock = OS_UNFAIR_LOCK_INIT;
105
105
_nodeIDToDeviceMap = [NSMutableDictionary dictionary ];
106
106
107
- _pairingDelegateBridge = new MTRDevicePairingDelegateBridge ();
108
- if ([self checkForInitError: (_pairingDelegateBridge != nullptr ) logMsg: kErrorPairingInit ]) {
107
+ _deviceControllerDelegateBridge = new MTRDeviceControllerDelegateBridge ();
108
+ if ([self checkForInitError: (_deviceControllerDelegateBridge != nullptr ) logMsg: kErrorPairingInit ]) {
109
109
return nil ;
110
110
}
111
111
@@ -184,9 +184,9 @@ - (void)cleanup
184
184
_partialDACVerifier = nullptr ;
185
185
}
186
186
187
- if (_pairingDelegateBridge ) {
188
- delete _pairingDelegateBridge ;
189
- _pairingDelegateBridge = nullptr ;
187
+ if (_deviceControllerDelegateBridge ) {
188
+ delete _deviceControllerDelegateBridge ;
189
+ _deviceControllerDelegateBridge = nullptr ;
190
190
}
191
191
}
192
192
@@ -256,7 +256,7 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams
256
256
257
257
chip::Controller::SetupParams commissionerParams;
258
258
259
- commissionerParams.pairingDelegate = _pairingDelegateBridge ;
259
+ commissionerParams.pairingDelegate = _deviceControllerDelegateBridge ;
260
260
261
261
_operationalCredentialsDelegate->SetDeviceCommissioner (_cppCommissioner);
262
262
@@ -535,14 +535,14 @@ - (void)removeDevice:(MTRDevice *)device
535
535
os_unfair_lock_unlock (&_deviceMapLock);
536
536
}
537
537
538
- - (void )setPairingDelegate : (id <MTRDevicePairingDelegate >)delegate queue : (dispatch_queue_t )queue
538
+ - (void )setDeviceControllerDelegate : (id <MTRDeviceControllerDelegate >)delegate queue : (dispatch_queue_t )queue
539
539
{
540
540
VerifyOrReturn ([self checkIsRunning ]);
541
541
542
542
dispatch_async (_chipWorkQueue, ^{
543
543
VerifyOrReturn ([self checkIsRunning ]);
544
544
545
- self->_pairingDelegateBridge ->setDelegate (delegate, queue);
545
+ self->_deviceControllerDelegateBridge ->setDelegate (delegate, queue);
546
546
});
547
547
}
548
548
@@ -823,6 +823,70 @@ - (void)invalidateCASESessionForNode:(chip::NodeId)nodeID;
823
823
}
824
824
@end
825
825
826
+ /* *
827
+ * Shim to allow us to treat an MTRDevicePairingDelegate as an
828
+ * MTRDeviceControllerDelegate.
829
+ */
830
+ @interface MTRDevicePairingDelegateShim : NSObject <MTRDeviceControllerDelegate>
831
+ @property (nonatomic , readonly ) id <MTRDevicePairingDelegate> delegate;
832
+ - (instancetype )initWithDelegate : (id <MTRDevicePairingDelegate>)delegate ;
833
+ @end
834
+
835
+ @implementation MTRDevicePairingDelegateShim
836
+ - (instancetype )initWithDelegate : (id <MTRDevicePairingDelegate>)delegate
837
+ {
838
+ if (self = [super init ]) {
839
+ _delegate = delegate;
840
+ }
841
+ return self;
842
+ }
843
+
844
+ - (BOOL )respondsToSelector : (SEL )selector
845
+ {
846
+ // This logic will need to change a bit when the MTRDeviceControllerDelegate
847
+ // signatures change. It's shaped the way it is to make those changes
848
+ // easier.
849
+ if (selector == @selector (onStatusUpdate: )) {
850
+ return [self .delegate respondsToSelector: @selector (onStatusUpdate: )];
851
+ }
852
+
853
+ if (selector == @selector (onPairingComplete: )) {
854
+ return [self .delegate respondsToSelector: @selector (onPairingComplete: )];
855
+ }
856
+
857
+ if (selector == @selector (onCommissioningComplete: )) {
858
+ return [self .delegate respondsToSelector: @selector (onCommissioningComplete: )];
859
+ }
860
+
861
+ if (selector == @selector (onPairingDeleted: )) {
862
+ return [self .delegate respondsToSelector: @selector (onPairingDeleted: )];
863
+ }
864
+
865
+ return [super respondsToSelector: selector];
866
+ }
867
+
868
+ - (void )onStatusUpdate : (MTRCommissioningStatus)status
869
+ {
870
+ [self .delegate onStatusUpdate: static_cast <MTRPairingStatus>(status)];
871
+ }
872
+
873
+ - (void )onPairingComplete : (NSError * _Nullable)error
874
+ {
875
+ [self .delegate onPairingComplete: error];
876
+ }
877
+
878
+ - (void )onCommissioningComplete : (NSError * _Nullable)error
879
+ {
880
+ [self .delegate onCommissioningComplete: error];
881
+ }
882
+
883
+ - (void )onPairingDeleted : (NSError * _Nullable)error
884
+ {
885
+ [self .delegate onPairingDeleted: error];
886
+ }
887
+
888
+ @end
889
+
826
890
@implementation MTRDeviceController (Deprecated)
827
891
828
892
- (NSNumber *)controllerNodeId
@@ -1040,4 +1104,10 @@ - (nullable NSData *)computePaseVerifier:(uint32_t)setupPincode iterations:(uint
1040
1104
return [MTRDeviceController computePASEVerifierForSetupPasscode: @(setupPincode) iterations: @(iterations) salt: salt error: nil ];
1041
1105
}
1042
1106
1107
+ - (void )setPairingDelegate : (id <MTRDevicePairingDelegate>)delegate queue : (dispatch_queue_t )queue
1108
+ {
1109
+ auto * delegateShim = [[MTRDevicePairingDelegateShim alloc ] initWithDelegate: delegate];
1110
+ [self setDeviceControllerDelegate: delegateShim queue: queue];
1111
+ }
1112
+
1043
1113
@end
0 commit comments