Skip to content

Commit

Permalink
Packing commissioningWindowOpenedCallback into CommissioningCallbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
sharadb-amazon committed Jul 20, 2023
1 parent e009efb commit faa803b
Show file tree
Hide file tree
Showing 12 changed files with 112 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,36 @@ private void beginCommissioning(
FailureCallback onConnectionFailure,
SuccessCallback<ContentApp> onNewOrUpdatedEndpoints) {
Log.d(TAG, "Running commissioning");

Object commissioningWindowOpened =
new MatterCallbackHandler() {
@Override
public void handle(MatterError error) {
Log.d(TAG, "handle() called on CommissioningWindowOpened event with " + error);
if (error.isNoError()) {
if (selectedCommissioner != null && selectedCommissioner.getNumIPs() > 0) {
String ipAddress = selectedCommissioner.getIpAddresses().get(0).getHostAddress();
Log.d(
TAG,
"ConnectionFragment calling tvCastingApp.sendUserDirectedCommissioningRequest with IP: "
+ ipAddress
+ " port: "
+ selectedCommissioner.getPort());

sendUdcSuccess = tvCastingApp.sendCommissioningRequest(selectedCommissioner);
updateUiOnConnectionSuccess();
}
} else {
getActivity()
.runOnUiThread(
() -> {
commissioningWindowStatusView.setText(
"Failed to open commissioning window");
});
}
}
};

Object commissioningComplete =
new MatterCallbackHandler() {
@Override
Expand Down Expand Up @@ -154,6 +184,7 @@ public void handle(MatterError error) {
};

CommissioningCallbacks commissioningCallbacks = new CommissioningCallbacks();
commissioningCallbacks.setCommissioningWindowOpened(commissioningWindowOpened);
commissioningCallbacks.setCommissioningComplete(commissioningComplete);
commissioningCallbacks.setSessionEstablishmentStarted(sessionEstablishmentStartedCallback);
commissioningCallbacks.setSessionEstablished(sessionEstablishedCallback);
Expand All @@ -162,34 +193,6 @@ public void handle(MatterError error) {
this.openCommissioningWindowSuccess =
tvCastingApp.openBasicCommissioningWindow(
GlobalCastingConstants.CommissioningWindowDurationSecs,
new MatterCallbackHandler() {
@Override
public void handle(MatterError error) {
Log.d(TAG, "handle() called on CommissioningWindowOpened event with " + error);
if (error.isNoError()) {
if (selectedCommissioner != null && selectedCommissioner.getNumIPs() > 0) {
String ipAddress =
selectedCommissioner.getIpAddresses().get(0).getHostAddress();
Log.d(
TAG,
"ConnectionFragment calling tvCastingApp.sendUserDirectedCommissioningRequest with IP: "
+ ipAddress
+ " port: "
+ selectedCommissioner.getPort());

sendUdcSuccess = tvCastingApp.sendCommissioningRequest(selectedCommissioner);
updateUiOnConnectionSuccess();
}
} else {
getActivity()
.runOnUiThread(
() -> {
commissioningWindowStatusView.setText(
"Failed to open commissioning window");
});
}
}
},
commissioningCallbacks,
onConnectionSuccess,
onConnectionFailure,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class CommissioningCallbacks {
private SuccessCallback<Void> sessionEstablished;
private FailureCallback sessionEstablishmentStopped;
private Object commissioningComplete;
private Object commissioningWindowOpened;

public SuccessCallback<Void> getSessionEstablishmentStarted() {
return sessionEstablishmentStarted;
Expand All @@ -35,6 +36,14 @@ public SuccessCallback<Void> getSessionEstablished() {
return sessionEstablished;
}

public Object getCommissioningWindowOpened() {
return commissioningWindowOpened;
}

public void setCommissioningWindowOpened(Object commissioningWindowOpened) {
this.commissioningWindowOpened = commissioningWindowOpened;
}

public void setSessionEstablished(SuccessCallback<Void> sessionEstablished) {
this.sessionEstablished = sessionEstablished;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,6 @@ public void stopVideoPlayerDiscovery() {

public native boolean openBasicCommissioningWindow(
int duration,
Object commissioningWindowOpenedHandler,
CommissioningCallbacks commissioningCallbacks,
SuccessCallback<VideoPlayer> onConnectionSuccess,
FailureCallback onConnectionFailure,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,22 +114,31 @@ JNI_METHOD(void, setDACProvider)(JNIEnv *, jobject, jobject provider)
}

JNI_METHOD(jboolean, openBasicCommissioningWindow)
(JNIEnv * env, jobject, jint duration, jobject jCommissioningWindowOpenedHandler, jobject jCommissioningCallbacks,
jobject jOnConnectionSuccessHandler, jobject jOnConnectionFailureHandler, jobject jOnNewOrUpdatedEndpointHandler)
(JNIEnv * env, jobject, jint duration, jobject jCommissioningCallbacks, jobject jOnConnectionSuccessHandler,
jobject jOnConnectionFailureHandler, jobject jOnNewOrUpdatedEndpointHandler)
{
chip::DeviceLayer::StackLock lock;

ChipLogProgress(AppServer, "JNI_METHOD openBasicCommissioningWindow called with duration %d", duration);

CHIP_ERROR err = CHIP_NO_ERROR;

err = TvCastingAppJNIMgr().getCommissioningWindowOpenedHandler().SetUp(env, jCommissioningWindowOpenedHandler);
VerifyOrReturnValue(err == CHIP_NO_ERROR, false);

CommissioningCallbacks commissioningCallbacks;
jclass jCommissioningCallbacksClass;
chip::JniReferences::GetInstance().GetClassRef(env, "com/chip/casting/CommissioningCallbacks", jCommissioningCallbacksClass);

jfieldID jCommissioningWindowOpenedField =
env->GetFieldID(jCommissioningCallbacksClass, "commissioningWindowOpened", "Ljava/lang/Object;");
jobject jCommissioningWindowOpened = env->GetObjectField(jCommissioningCallbacks, jCommissioningWindowOpenedField);
if (jCommissioningWindowOpened != nullptr)
{
err = TvCastingAppJNIMgr().getCommissioningWindowOpenedHandler().SetUp(env, jCommissioningWindowOpened);
VerifyOrReturnValue(err == CHIP_NO_ERROR, false);
commissioningCallbacks.commissioningWindowOpenedCallback = [](CHIP_ERROR err) {
TvCastingAppJNIMgr().getCommissioningWindowOpenedHandler().Handle(err);
};
}

jfieldID jCommissioningCompleteField =
env->GetFieldID(jCommissioningCallbacksClass, "commissioningComplete", "Ljava/lang/Object;");
jobject jCommissioningComplete = env->GetObjectField(jCommissioningCallbacks, jCommissioningCompleteField);
Expand Down Expand Up @@ -189,7 +198,7 @@ JNI_METHOD(jboolean, openBasicCommissioningWindow)
ChipLogError(AppServer, "OnNewOrUpdatedEndpointHandler.SetUp failed %" CHIP_ERROR_FORMAT, err.Format()));

err = CastingServer::GetInstance()->OpenBasicCommissioningWindow(
[](CHIP_ERROR err) { TvCastingAppJNIMgr().getCommissioningWindowOpenedHandler().Handle(err); }, commissioningCallbacks,
commissioningCallbacks,
[](TargetVideoPlayerInfo * videoPlayer) { TvCastingAppJNIMgr().getOnConnectionSuccessHandler(false).Handle(videoPlayer); },
[](CHIP_ERROR err) { TvCastingAppJNIMgr().getOnConnectionFailureHandler(false).Handle(err); },
[](TargetEndpointInfo * endpoint) { TvCastingAppJNIMgr().getOnNewOrUpdatedEndpointHandler(false).Handle(endpoint); });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,10 @@
@param commissioningCallbackHandlers Optional parameter to specific handlers for callbacks during commissioning
*/
- (void)openBasicCommissioningWindow:(dispatch_queue_t _Nonnull)clientQueue
commissioningWindowOpenedCallback:(void (^_Nonnull)(MatterError * _Nonnull))commissioningWindowOpenedCallback
commissioningCallbackHandlers:(CommissioningCallbackHandlers * _Nullable)commissioningCallbackHandlers
onConnectionSuccessCallback:(void (^_Nonnull)(VideoPlayer * _Nonnull))onConnectionSuccessCallback
onConnectionFailureCallback:(void (^_Nonnull)(MatterError * _Nonnull))onConnectionFailureCallback
onNewOrUpdatedEndpointCallback:(void (^_Nonnull)(ContentApp * _Nonnull))onNewOrUpdatedEndpointCallback;
commissioningCallbackHandlers:(CommissioningCallbackHandlers * _Nullable)commissioningCallbackHandlers
onConnectionSuccessCallback:(void (^_Nonnull)(VideoPlayer * _Nonnull))onConnectionSuccessCallback
onConnectionFailureCallback:(void (^_Nonnull)(MatterError * _Nonnull))onConnectionFailureCallback
onNewOrUpdatedEndpointCallback:(void (^_Nonnull)(ContentApp * _Nonnull))onNewOrUpdatedEndpointCallback;

/*!
@brief Gets the list of VideoPlayers currently connected
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -600,17 +600,33 @@ - (OnboardingPayload *)getOnboardingPayload
}

- (void)openBasicCommissioningWindow:(dispatch_queue_t _Nonnull)clientQueue
commissioningWindowOpenedCallback:(void (^_Nonnull)(MatterError * _Nonnull))commissioningWindowOpenedCallback
commissioningCallbackHandlers:(CommissioningCallbackHandlers * _Nullable)commissioningCallbackHandlers
onConnectionSuccessCallback:(void (^_Nonnull)(VideoPlayer * _Nonnull))onConnectionSuccessCallback
onConnectionFailureCallback:(void (^_Nonnull)(MatterError * _Nonnull))onConnectionFailureCallback
onNewOrUpdatedEndpointCallback:(void (^_Nonnull)(ContentApp * _Nonnull))onNewOrUpdatedEndpointCallback
commissioningCallbackHandlers:(CommissioningCallbackHandlers * _Nullable)commissioningCallbackHandlers
onConnectionSuccessCallback:(void (^_Nonnull)(VideoPlayer * _Nonnull))onConnectionSuccessCallback
onConnectionFailureCallback:(void (^_Nonnull)(MatterError * _Nonnull))onConnectionFailureCallback
onNewOrUpdatedEndpointCallback:(void (^_Nonnull)(ContentApp * _Nonnull))onNewOrUpdatedEndpointCallback
{
[self
dispatchOnMatterSDKQueue:@"openBasicCommissioningWindow(...)"
block:^{
CommissioningCallbacks commissioningCallbacks;
if (commissioningCallbackHandlers != nil) {
if (commissioningCallbackHandlers.commissioningWindowOpenedCallback != nil) {
commissioningCallbacks.commissioningWindowOpenedCallback
= [clientQueue, commissioningCallbackHandlers](CHIP_ERROR err) {
[[CastingServerBridge getSharedInstance]
dispatchOnClientQueue:clientQueue
description:@"openBasicCommissioningWindow(...) "
@"commissioningWindowOpenedCallback"
block:^{
commissioningCallbackHandlers
.commissioningWindowOpenedCallback([[MatterError alloc]
initWithCode:err.AsInteger()
message:[NSString stringWithUTF8String:
err.AsString()]]);
}];
};
}

if (commissioningCallbackHandlers.commissioningCompleteCallback != nil) {
commissioningCallbacks.commissioningComplete = [clientQueue, commissioningCallbackHandlers](
CHIP_ERROR err) {
Expand Down Expand Up @@ -672,17 +688,6 @@ - (void)openBasicCommissioningWindow:(dispatch_queue_t _Nonnull)clientQueue
}
}
CHIP_ERROR err = CastingServer::GetInstance()->OpenBasicCommissioningWindow(
[clientQueue, commissioningWindowOpenedCallback](CHIP_ERROR err) {
[[CastingServerBridge getSharedInstance]
dispatchOnClientQueue:clientQueue
description:
@"openBasicCommissioningWindow(...) commissioningWindowRequestedCallback"
block:^{
commissioningWindowOpenedCallback([[MatterError alloc]
initWithCode:err.AsInteger()
message:[NSString stringWithUTF8String:err.AsString()]]);
}];
},
commissioningCallbacks,
[clientQueue, onConnectionSuccessCallback](TargetVideoPlayerInfo * cppTargetVideoPlayerInfo) {
VideoPlayer * videoPlayer =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@

- (CommissioningCallbackHandlers * _Nonnull)
initWithCommissioningWindowRequestedHandler:(void (^_Nonnull)(MatterError * _Nonnull))commissioningWindowRequestedHandler
commissioningWindowOpenedCallback:(void (^_Nonnull)(MatterError * _Nonnull))commissioningWindowOpenedCallback
commissioningCompleteCallback:(void (^_Nonnull)(MatterError * _Nonnull))commissioningCompleteCallback
sessionEstablishmentStartedCallback:(void (^_Nullable)(void))sessionEstablishmentStartedCallback
sessionEstablishedCallback:(void (^_Nullable)(void))sessionEstablishedCallback
sessionEstablishmentStoppedCallback:(void (^_Nullable)(MatterError * _Nonnull))sessionEstablishmentStoppedCallback;

@property void (^_Nullable commissioningWindowRequestedHandler)(MatterError * _Nonnull);

@property void (^_Nullable commissioningWindowOpenedCallback)(MatterError * _Nonnull);

@property void (^_Nullable commissioningCompleteCallback)(MatterError * _Nonnull);

@property void (^_Nullable sessionEstablishmentStartedCallback)(void);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ @implementation CommissioningCallbackHandlers

- (CommissioningCallbackHandlers * _Nonnull)
initWithCommissioningWindowRequestedHandler:(void (^_Nonnull)(MatterError * _Nonnull))commissioningWindowRequestedHandler
commissioningWindowOpenedCallback:(void (^_Nonnull)(MatterError * _Nonnull))commissioningWindowOpenedCallback
commissioningCompleteCallback:(void (^_Nonnull)(MatterError * _Nonnull))commissioningCompleteCallback
sessionEstablishmentStartedCallback:(void (^_Nullable)(void))sessionEstablishmentStartedCallback
sessionEstablishedCallback:(void (^_Nullable)(void))sessionEstablishedCallback
Expand All @@ -29,6 +30,7 @@ @implementation CommissioningCallbackHandlers
self = [super init];
if (self) {
_commissioningWindowRequestedHandler = commissioningWindowRequestedHandler;
_commissioningWindowOpenedCallback = commissioningWindowOpenedCallback;
_commissioningCompleteCallback = commissioningCompleteCallback;
_sessionEstablishmentStartedCallback = sessionEstablishmentStartedCallback;
_sessionEstablishedCallback = sessionEstablishedCallback;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,22 @@ class CommissioningViewModel: ObservableObject {
if(error.code == 0)
{
castingServerBridge.openBasicCommissioningWindow(DispatchQueue.main,
commissioningWindowOpenedCallback: { (result: MatterError) -> () in
DispatchQueue.main.async {
self.commisisoningWindowOpened = (result.code == 0)
// Send User directed commissioning request if a commissioner with a known IP addr was selected
if(selectedCommissioner != nil && selectedCommissioner!.numIPs > 0)
{
self.sendUserDirectedCommissioningRequest(selectedCommissioner: selectedCommissioner)
}
}
},
commissioningCallbackHandlers: CommissioningCallbackHandlers(
commissioningWindowRequestedHandler: { (result: MatterError) -> () in
DispatchQueue.main.async {
self.Log.info("Commissioning Window opening status: \(result)")
self.Log.info("Commissioning Window Requested status: \(result)")
self.commisisoningWindowOpened = (result.code == 0)
}
},
commissioningWindowOpenedCallback: { (result: MatterError) -> () in
self.Log.info("Commissioning Window Opened status: \(result)")
DispatchQueue.main.async {
self.commisisoningWindowOpened = (result.code == 0)
// Send User directed commissioning request if a commissioner with a known IP addr was selected
if(selectedCommissioner != nil && selectedCommissioner!.numIPs > 0)
{
self.sendUserDirectedCommissioningRequest(selectedCommissioner: selectedCommissioner)
}
}
},
commissioningCompleteCallback: { (result: MatterError) -> () in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ class CastingServer : public AppDelegate
CHIP_ERROR StopDiscoverCommissioners();
const chip::Dnssd::DiscoveredNodeData *
GetDiscoveredCommissioner(int index, chip::Optional<TargetVideoPlayerInfo *> & outAssociatedConnectableVideoPlayer);
CHIP_ERROR OpenBasicCommissioningWindow(std::function<void(CHIP_ERROR)> commissioningWindowOpenedCallback,
CommissioningCallbacks commissioningCallbacks,
CHIP_ERROR OpenBasicCommissioningWindow(CommissioningCallbacks commissioningCallbacks,
std::function<void(TargetVideoPlayerInfo *)> onConnectionSuccess,
std::function<void(CHIP_ERROR)> onConnectionFailure,
std::function<void(TargetEndpointInfo *)> onNewOrUpdatedEndpoint);
Expand Down Expand Up @@ -466,9 +465,7 @@ class CastingServer : public AppDelegate
chip::Inet::IPAddress mTargetVideoPlayerIpAddress[chip::Dnssd::CommonResolutionData::kMaxIPAddresses];

chip::Controller::CommissionableNodeController mCommissionableNodeController;
std::function<void(CHIP_ERROR)> mCommissioningWindowOpenedCallback;
CommissioningCallbacks mCommissioningCallbacks;
std::function<void(CHIP_ERROR)> mCommissioningCompleteCallback;

std::function<void(TargetEndpointInfo *)> mOnNewOrUpdatedEndpoint;
std::function<void(TargetVideoPlayerInfo *)> mOnConnectionSuccessClientCallback;
Expand Down
Loading

0 comments on commit faa803b

Please sign in to comment.