iOS tv-casting-app: deleting dead code (#33394)
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CastingServerBridge.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CastingServerBridge.mm
deleted file mode 100644
index f199ba9..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CastingServerBridge.mm
+++ /dev/null
@@ -1,2707 +0,0 @@
-/**
- *
- * Copyright (c) 2020-2023 Project CHIP Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import "CastingServerBridge.h"
-#import "CastingServer.h"
-
-#import "CommissionableDataProviderImpl.hpp"
-#import "CommissionerDiscoveryDelegateImpl.h"
-#import "ConversionUtils.hpp"
-#import "DeviceAttestationCredentialsProviderImpl.hpp"
-#import "MatterCallbacks.h"
-#import "OnboardingPayload.h"
-
-#include <app/data-model/ListLargeSystemExtensions.h>
-#include <credentials/DeviceAttestationCredsProvider.h>
-#include <credentials/attestation_verifier/DefaultDeviceAttestationVerifier.h>
-#include <credentials/attestation_verifier/DeviceAttestationVerifier.h>
-#include <lib/support/CHIPMem.h>
-#include <platform/PlatformManager.h>
-
-#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE
-#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021
-#endif
-
-#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR
-#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00
-#endif
-
-@interface CastingServerBridge ()
-
-@property AppParameters * appParameters;
-
-@property OnboardingPayload * _Nonnull onboardingPayload;
-
-@property CommissionableDataProviderImpl * commissionableDataProvider;
-
-@property chip::Credentials::DeviceAttestationCredentialsProvider * deviceAttestationCredentialsProvider;
-
-@property chip::CommonCaseDeviceServerInitParams * serverInitParams;
-
-@property CommissionerDiscoveryDelegateImpl * commissionerDiscoveryDelegate;
-
-@property TargetVideoPlayerInfo * previouslyConnectedVideoPlayer;
-
-// queue used to serialize all work performed by the CastingServerBridge
-@property (atomic) dispatch_queue_t chipWorkQueue;
-
-@property NSMutableDictionary * subscriptionEstablishedCallbacks;
-
-@property NSMutableDictionary * subscriptionReadSuccessCallbacks;
-
-@property NSMutableDictionary * subscriptionReadFailureCallbacks;
-
-@property NSMutableDictionary * readSuccessCallbacks;
-
-@property NSMutableDictionary * readFailureCallbacks;
-
-@end
-
-@implementation CastingServerBridge
-
-+ (CastingServerBridge * _Nullable)getSharedInstance
-{
- static CastingServerBridge * instance = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- instance = [[self alloc] init];
- });
- return instance;
-}
-
-- (instancetype)init
-{
- if (self = [super init]) {
- CHIP_ERROR err = chip::Platform::MemoryInit();
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "MemoryInit failed: %s", ErrorStr(err));
- return nil;
- }
-
- // TODO: Constructors should not perform heavy work like initializing the Matter SDK. This should
- // be moved to initializeApp or another suitable location.
- err = chip::DeviceLayer::PlatformMgr().InitChipStack();
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "InitChipStack failed: %s", ErrorStr(err));
- return nil;
- }
-
- _commissionerDiscoveryDelegate = new CommissionerDiscoveryDelegateImpl();
-
- _subscriptionEstablishedCallbacks = [NSMutableDictionary dictionary];
- _subscriptionReadSuccessCallbacks = [NSMutableDictionary dictionary];
- _subscriptionReadFailureCallbacks = [NSMutableDictionary dictionary];
- _readSuccessCallbacks = [NSMutableDictionary dictionary];
- _readFailureCallbacks = [NSMutableDictionary dictionary];
- }
- return self;
-}
-
-/**
- Dispatches the block on the Matter SDK dispatch queue.
-
- @param description Optional. A description of the callback to be dispatched for diagnostic purposes.
- @param block The Block to be dispatched.
- */
-- (void)dispatchOnMatterSDKQueue:(const NSString * _Nullable)description block:(dispatch_block_t)block
-{
- if (nil != description) {
- ChipLogProgress(AppServer, "[SYNC] CastingServerBridge %s", [description UTF8String]);
- }
- dispatch_async(_chipWorkQueue, ^{
- // The Matter SDK is not, generally, internally thread-safe. It relies upon the client to lock
- // the SDK prior to any interactions after chip::DeviceLayer::PlatformMgr().InitChipStack()
- //
- // Note that it is presently safe to do at this point because InitChipStack is called in the
- // constructor for the CastingServerBridge.
- chip::DeviceLayer::StackLock lock;
-
- if (nil != description) {
- ChipLogProgress(AppServer, "[ASYNC (CHIP)] CastingServerBridge BEGIN %s", [description UTF8String]);
- }
- block();
- if (nil != description) {
- ChipLogProgress(AppServer, "[ASYNC (CHIP)] CastingServerBridge END %s", [description UTF8String]);
- }
- });
-}
-
-/**
- Dispatches a client callback via a `dispatch_block_t` to be run on the client's `dispatch_queue_t`.
-
- @param queue The client's Dispatch Queue.
- @param description Optional. A description of the callback to be dispatched for diagnostic purposes.
- @param block The Block to be invoked to invoke the client callback.
- */
-- (void)dispatchOnClientQueue:(dispatch_queue_t)queue
- description:(const NSString * _Nullable)description
- block:(dispatch_block_t)block
-{
- // Within the CastingServerBridge, the usage pattern is typically to expose asynchronous public APIs that
- // take a callback to indicate that the low-level SDK operation has been initiated (the "started"
- // callback), and a separate set of result callbacks to be invoked when the low-level SDK operation
- // has been completed (the "result" callbacks).
- //
- // All of the work is serialized on the _chipWorkQueue, with the started callback being invoked after the
- // Matter SDK is called with the result callbacks. This poses a challenge because we don't have a strong
- // guarantee that the Matter SDK will not complete its work and invoke the result callback before control
- // is returning to the _chipWorkQueue thread; this can cause callbacks to be received in an unexpected
- // order, where the result might arrive before the client knows that the call was started.
- //
- // To avoid this confusion, we perform a "double async" dispatch to ensure that events are delivered in a
- // sensible order. First, we schedule the result callback to run on the _chipWorkQueue (so it *must* run
- // after the end of the CastingServerBridge's wrapper logic that already started on the _chipWorkQueue)
- // and then immediately, asynchronously dispatch the callback onto the provided client queue.
- dispatch_async(_chipWorkQueue, ^{
- if (nil != description) {
- ChipLogProgress(AppServer, "[ASYNC (CHIP)] CastingServerBridge dispatching %s", [description UTF8String]);
- }
- dispatch_async(queue, ^{
- if (nil != description) {
- ChipLogProgress(AppServer, "[ASYNC (CLIENT)] CastingServerBridge BEGIN %s", [description UTF8String]);
- }
- block();
- if (nil != description) {
- ChipLogProgress(AppServer, "[ASYNC (CLIENT)] CastingServerBridge END %s", [description UTF8String]);
- }
- });
- });
-}
-
-/**
- A utility function that invokes an Objective C Block on the Matter Dispatch Queue in a thread-safe manner.
-
- The result of the Objective C Block will be relayed to the `blockCompleteCallback`.
-
- @param description Optional. A description of the Objective C Block to be invoked for diagnostic purposes.
- @param callbackQueue The Dispatch Queue on which the callback shall be invoked.
- @param blockCompleteCallback The callback to be invoked with the result of the Objective C Block.
- @param block The Objective C Block to dispatch.
- */
-- (void)withCastingServerInvokeBlock:(const NSString * _Nullable)description
- callbackQueue:(dispatch_queue_t)callbackQueue
- onBlockComplete:(void (^_Nonnull)(bool))blockCompleteCallback
- block:(CHIP_ERROR (^_Nonnull)(CastingServer *))block
-{
- [self dispatchOnMatterSDKQueue:description
- block:^{
- CastingServer * castingServer = CastingServer::GetInstance();
-
- // We invoke the block and capture the result on the Matter Dispatch Queue with the stack lock
- // held, then use the result snapshot in the subsequent block to be asynchronously dispatched on
- // the client's callback Dispatch Queue.
- const CHIP_ERROR result = block(castingServer);
- dispatch_async(callbackQueue, ^{
- if (nil != description) {
- ChipLogProgress(AppServer,
- "[ASYNC (CLIENT)] CastingServerBridge invoking %s Started Callback",
- [description UTF8String]);
- }
- blockCompleteCallback(
- [[MatterError alloc] initWithCode:result.AsInteger()
- message:[NSString stringWithUTF8String:result.AsString()]]);
- if (nil != description) {
- ChipLogProgress(AppServer,
- "[ASYNC (CLIENT)] CastingServerBridge invoked %s Started Callback",
- [description UTF8String]);
- }
- });
- }];
-}
-
-/**
- A utility function that invokes an Objective C Block on the Matter Dispatch Queue in a thread-safe manner.
-
- The result of the Objective C Block will be relayed to the `blockCompleteCallback`. The response callback is expected to be called
- at a later time with the asynchronous result of the Casting Server operation (by the Casting Server).
-
- @param description Optional. A description of the Objective C Block to be invoked for diagnostic purposes.
- @param blockCompleteCallback The callback to be invoked with the result of the Objective C Block.
- @param responseCallback The callback that will eventually be invoked by the Casting Server when the operation has completed on the
- remote end.
- @param callbackQueue The Dispatch Queue on which the callbacks shall be invoked.
- @param block The Objective C Block to dispatch.
- */
-- (void)withCastingServerInvokeBlock:(const NSString * _Nullable)description
- callbackQueue:(dispatch_queue_t)callbackQueue
- onBlockComplete:(void (^_Nonnull)(bool))blockCompleteCallback
- onResponse:(void (^_Nonnull)(bool))responseCallback
- block:(CHIP_ERROR (^_Nonnull)(CastingServer *, std::function<void(CHIP_ERROR)>))block
-{
- [self withCastingServerInvokeBlock:description
- callbackQueue:callbackQueue
- onBlockComplete:blockCompleteCallback
- block:^(CastingServer * castingServer) {
- return block(castingServer, [description, responseCallback, callbackQueue](CHIP_ERROR err) {
- NSString * _description = description == nil
- ? nil
- : [NSString stringWithFormat:@"%@ Response Callback", description];
-
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:callbackQueue
- description:_description
- block:^{
- responseCallback(CHIP_NO_ERROR == err);
- }];
- });
- }];
-}
-
-- (MatterError *)initializeApp:(AppParameters * _Nullable)appParameters
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- initAppStatusHandler:(nullable void (^)(bool))initAppStatusHandler
-{
- // The Matter SDK is not, generally, internally thread-safe. It relies upon the client to lock
- // the SDK prior to any interactions after chip::DeviceLayer::PlatformMgr().InitChipStack()
- //
- // Note that it is presently safe to do at this point because InitChipStack is called in the
- // constructor for the CastingServerBridge.
- chip::DeviceLayer::StackLock lock;
- ChipLogProgress(AppServer, "CastingServerBridge().initApp() called");
-
- CHIP_ERROR err = CHIP_NO_ERROR;
- _commissionableDataProvider = new CommissionableDataProviderImpl();
-
- _appParameters = appParameters;
- AppParams cppAppParams;
- uint32_t setupPasscode = CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE;
- uint16_t setupDiscriminator = CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR;
- uint32_t spake2pIterationCount;
- chip::ByteSpan spake2pSaltSpan, spake2pVerifierSpan;
- if (_appParameters != nil) {
- err = [ConversionUtils convertToCppAppParamsInfoFrom:_appParameters outAppParams:cppAppParams];
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "AppParameters conversion failed: %s", ErrorStr(err));
- return [[MatterError alloc] initWithCode:err.AsInteger() message:[NSString stringWithUTF8String:err.AsString()]];
- }
-
- // set fields in commissionableDataProvider
- if (_appParameters.onboardingPayload != nil) {
- setupPasscode = _appParameters.onboardingPayload.setupPasscode > 0 ? _appParameters.onboardingPayload.setupPasscode
- : CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE;
- setupDiscriminator = _appParameters.onboardingPayload.setupDiscriminator > 0
- ? _appParameters.onboardingPayload.setupDiscriminator
- : CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR;
- }
- spake2pIterationCount = _appParameters.spake2pIterationCount;
- if (_appParameters.spake2pSaltBase64 != nil) {
- spake2pSaltSpan = chip::ByteSpan(
- static_cast<const uint8_t *>(_appParameters.spake2pSaltBase64.bytes), _appParameters.spake2pSaltBase64.length);
- }
-
- if (_appParameters.spake2pVerifierBase64 != nil) {
- chip::ByteSpan spake2pVerifierSpan
- = chip::ByteSpan(static_cast<const uint8_t *>(_appParameters.spake2pVerifierBase64.bytes),
- _appParameters.spake2pVerifierBase64.length);
- }
-
- err = _commissionableDataProvider->Initialize(_appParameters.spake2pVerifierBase64 != nil ? &spake2pVerifierSpan : nil,
- _appParameters.spake2pSaltBase64 != nil ? &spake2pSaltSpan : nil, spake2pIterationCount, setupPasscode,
- setupDiscriminator);
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "Failed to initialize CommissionableDataProvider: %s", ErrorStr(err));
- return [[MatterError alloc] initWithCode:err.AsInteger() message:[NSString stringWithUTF8String:err.AsString()]];
- }
- }
- chip::DeviceLayer::SetCommissionableDataProvider(_commissionableDataProvider);
-
- _commissionableDataProvider->GetSetupPasscode(setupPasscode);
- _commissionableDataProvider->GetSetupDiscriminator(setupDiscriminator);
- _onboardingPayload = [[OnboardingPayload alloc] initWithSetupPasscode:setupPasscode setupDiscriminator:setupDiscriminator];
-
- // Initialize device attestation verifier from a constant version
- {
- // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available
- const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore();
- SetDeviceAttestationVerifier(GetDefaultDACVerifier(testingRootStore));
- }
-
- // init app Server
- _serverInitParams = new chip::CommonCaseDeviceServerInitParams();
- err = _serverInitParams->InitializeStaticResourcesBeforeServerInit();
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "InitializeStaticResourcesBeforeServerInit failed: %s", ErrorStr(err));
- return [[MatterError alloc] initWithCode:err.AsInteger() message:[NSString stringWithUTF8String:err.AsString()]];
- }
-
- AppParams appParam;
- if (appParameters == nil) {
- err = CastingServer::GetInstance()->PreInit();
- } else if ((err = [ConversionUtils convertToCppAppParamsInfoFrom:appParameters outAppParams:appParam]) == CHIP_NO_ERROR) {
- err = CastingServer::GetInstance()->PreInit(&appParam);
- }
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "CastingServer PreInit failed: %s", ErrorStr(err));
- return [[MatterError alloc] initWithCode:err.AsInteger() message:[NSString stringWithUTF8String:err.AsString()]];
- }
-
- err = chip::Server::GetInstance().Init(*_serverInitParams);
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "chip::Server init failed: %s", ErrorStr(err));
- return [[MatterError alloc] initWithCode:err.AsInteger() message:[NSString stringWithUTF8String:err.AsString()]];
- }
-
- _chipWorkQueue = chip::DeviceLayer::PlatformMgrImpl().GetWorkQueue();
-
- chip::DeviceLayer::PlatformMgrImpl().StartEventLoopTask();
-
- dispatch_async(_chipWorkQueue, ^{
- CHIP_ERROR err = CHIP_NO_ERROR;
- AppParams appParam;
- if (appParameters == nil) {
- err = CastingServer::GetInstance()->Init();
- } else if ((err = [ConversionUtils convertToCppAppParamsInfoFrom:appParameters outAppParams:appParam]) == CHIP_NO_ERROR) {
- err = CastingServer::GetInstance()->Init(&appParam);
- }
-
- Boolean initAppStatus = true;
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "CastingServerBridge().initApp() failed: %" CHIP_ERROR_FORMAT, err.Format());
- initAppStatus = false;
- }
-
- dispatch_async(clientQueue, ^{
- initAppStatusHandler(initAppStatus);
- });
- });
-
- return [[MatterError alloc] initWithCode:CHIP_NO_ERROR.AsInteger()
- message:[NSString stringWithUTF8String:CHIP_NO_ERROR.AsString()]];
-}
-
-- (void)setDacHolder:(DeviceAttestationCredentialsHolder * _Nonnull)deviceAttestationCredentials
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- setDacHolderStatus:(void (^_Nonnull)(MatterError * _Nonnull))setDacHolderStatus
-{
- dispatch_sync(_chipWorkQueue, ^{
- NSData * certificationDeclarationNsData = deviceAttestationCredentials.getCertificationDeclaration;
- chip::MutableByteSpan certificationDeclaration
- = chip::MutableByteSpan(const_cast<uint8_t *>(static_cast<const uint8_t *>(certificationDeclarationNsData.bytes)),
- certificationDeclarationNsData.length);
-
- NSData * firmwareInformationNsData = deviceAttestationCredentials.getFirmwareInformation;
- chip::MutableByteSpan firmwareInformation = chip::MutableByteSpan(
- const_cast<uint8_t *>(static_cast<const uint8_t *>(firmwareInformationNsData.bytes)), firmwareInformationNsData.length);
-
- NSData * deviceAttestationCertNsData = deviceAttestationCredentials.getDeviceAttestationCert;
- chip::MutableByteSpan deviceAttestationCert
- = chip::MutableByteSpan(const_cast<uint8_t *>(static_cast<const uint8_t *>(deviceAttestationCertNsData.bytes)),
- deviceAttestationCertNsData.length);
-
- NSData * productAttestationIntermediateCertNsData = deviceAttestationCredentials.getProductAttestationIntermediateCert;
- chip::MutableByteSpan productAttestationIntermediateCert = chip::MutableByteSpan(
- const_cast<uint8_t *>(static_cast<const uint8_t *>(productAttestationIntermediateCertNsData.bytes)),
- productAttestationIntermediateCertNsData.length);
-
- self->_deviceAttestationCredentialsProvider
- = new DeviceAttestationCredentialsProviderImpl(&certificationDeclaration, &firmwareInformation, &deviceAttestationCert,
- &productAttestationIntermediateCert, deviceAttestationCredentials.getDeviceAttestationCertPrivateKeyRef);
-
- SetDeviceAttestationCredentialsProvider(self->_deviceAttestationCredentialsProvider);
-
- dispatch_async(clientQueue, ^{
- setDacHolderStatus([[MatterError alloc] initWithCode:CHIP_NO_ERROR.AsInteger()
- message:[NSString stringWithUTF8String:CHIP_NO_ERROR.AsString()]]);
- });
- });
-}
-
-- (void)discoverCommissioners:(dispatch_queue_t _Nonnull)clientQueue
- discoveryRequestSentHandler:(nullable void (^)(bool))discoveryRequestSentHandler
- discoveredCommissionerHandler:(nullable void (^)(DiscoveredNodeData *))discoveredCommissionerHandler
-{
- [self dispatchOnMatterSDKQueue:@"discoverCommissioners(...)"
- block:^{
- bool discoveryRequestStatus = true;
-
- if (discoveredCommissionerHandler != nil) {
- TargetVideoPlayerInfo * cachedTargetVideoPlayerInfos
- = CastingServer::GetInstance()->ReadCachedTargetVideoPlayerInfos();
- self->_commissionerDiscoveryDelegate->SetUp(
- clientQueue, discoveredCommissionerHandler, cachedTargetVideoPlayerInfos);
- }
- CHIP_ERROR err = CastingServer::GetInstance()->DiscoverCommissioners(
- discoveredCommissionerHandler != nil ? self->_commissionerDiscoveryDelegate : nullptr);
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer,
- "CastingServerBridge().discoverCommissioners() failed: %" CHIP_ERROR_FORMAT, err.Format());
- discoveryRequestStatus = false;
- }
-
- dispatch_async(clientQueue, ^{
- discoveryRequestSentHandler(discoveryRequestStatus);
- });
- }];
-}
-
-- (void)getDiscoveredCommissioner:(int)index
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- discoveredCommissionerHandler:(nullable void (^)(DiscoveredNodeData * _Nullable))discoveredCommissionerHandler
-{
- [self dispatchOnMatterSDKQueue:@"getDiscoveredCommissioner(...)"
- block:^{
- chip::Optional<TargetVideoPlayerInfo *> associatedConnectableVideoPlayer;
- DiscoveredNodeData * commissioner = nil;
- const chip::Dnssd::CommissionNodeData * cppDiscoveredNodeData
- = CastingServer::GetInstance()->GetDiscoveredCommissioner(
- index, associatedConnectableVideoPlayer);
- if (cppDiscoveredNodeData != nullptr) {
- commissioner = [ConversionUtils convertToObjCDiscoveredNodeDataFrom:cppDiscoveredNodeData];
- if (associatedConnectableVideoPlayer.HasValue()) {
- VideoPlayer * connectableVideoPlayer = [ConversionUtils
- convertToObjCVideoPlayerFrom:associatedConnectableVideoPlayer.Value()];
- [commissioner setConnectableVideoPlayer:connectableVideoPlayer];
- }
- }
-
- dispatch_async(clientQueue, ^{
- discoveredCommissionerHandler(commissioner);
- });
- }];
-}
-
-- (void)sendUserDirectedCommissioningRequest:(NSString * _Nonnull)commissionerIpAddress
- commissionerPort:(uint16_t)commissionerPort
- platformInterface:(unsigned int)platformInterface
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- udcRequestSentHandler:(nullable void (^)(bool))udcRequestSentHandler
-{
- const NSString * description =
- [NSString stringWithFormat:@"sendUserDirectedCommissioningRequest() IP %s port %d platformInterface %d",
- [commissionerIpAddress UTF8String], commissionerPort, platformInterface];
- [self dispatchOnMatterSDKQueue:description
- block:^{
- bool udcRequestStatus;
- chip::Inet::IPAddress commissionerAddrInet;
- if (chip::Inet::IPAddress::FromString([commissionerIpAddress UTF8String], commissionerAddrInet)
- == false) {
- ChipLogError(AppServer,
- "CastingServerBridge().sendUserDirectedCommissioningRequest() failed to parse IP address");
- udcRequestStatus = false;
- } else {
- chip::Inet::InterfaceId interfaceId = chip::Inet::InterfaceId(platformInterface);
-
- chip::Transport::PeerAddress commissionerPeerAddress
- = chip::Transport::PeerAddress::UDP(commissionerAddrInet, commissionerPort, interfaceId);
-
- CHIP_ERROR err = CastingServer::GetInstance()->SendUserDirectedCommissioningRequest(
- commissionerPeerAddress);
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer,
- "CastingServerBridge().sendUserDirectedCommissioningRequest() failed: "
- "%" CHIP_ERROR_FORMAT,
- err.Format());
- udcRequestStatus = false;
- } else {
- udcRequestStatus = true;
- }
- }
-
- dispatch_async(clientQueue, ^{
- udcRequestSentHandler(udcRequestStatus);
- });
- }];
-}
-
-- (void)sendUserDirectedCommissioningRequest:(DiscoveredNodeData * _Nonnull)commissioner
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- udcRequestSentHandler:(nullable void (^)(bool))udcRequestSentHandler
-{
- const NSString * description =
- [NSString stringWithFormat:@"sendUserDirectedCommissioningRequest(...) IP %s port %d platformInterface %d deviceName %s",
- [commissioner.ipAddresses[0] UTF8String], commissioner.port, commissioner.platformInterface,
- [commissioner.deviceName UTF8String]];
-
- [self dispatchOnMatterSDKQueue:description
- block:^{
- bool udcRequestStatus;
-
- chip::Dnssd::CommissionNodeData cppCommissioner;
- if ([ConversionUtils convertToCppDiscoveredNodeDataFrom:commissioner
- outDiscoveredNodeData:cppCommissioner]
- != CHIP_NO_ERROR) {
- ChipLogError(AppServer,
- "CastingServerBridge().sendUserDirectedCommissioningRequest() failed to convert "
- "Commissioner(DiscoveredNodeData) "
- "to Cpp type");
- udcRequestStatus = false;
- } else {
- CHIP_ERROR err
- = CastingServer::GetInstance()->SendUserDirectedCommissioningRequest(&cppCommissioner);
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer,
- "CastingServerBridge().sendUserDirectedCommissioningRequest() failed: "
- "%" CHIP_ERROR_FORMAT,
- err.Format());
- udcRequestStatus = false;
- } else {
- udcRequestStatus = true;
- }
- }
-
- dispatch_async(clientQueue, ^{
- udcRequestSentHandler(udcRequestStatus);
- });
- }];
-}
-
-- (OnboardingPayload *)getOnboardingPayload
-{
- return _onboardingPayload;
-}
-
-- (void)openBasicCommissioningWindow:(dispatch_queue_t _Nonnull)clientQueue
- 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.commissioningCompleteCallback != nil) {
- commissioningCallbacks.commissioningComplete = [clientQueue, commissioningCallbackHandlers](
- CHIP_ERROR err) {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:
- @"openBasicCommissioningWindow(...) commissioningCompleteCallback"
- block:^{
- commissioningCallbackHandlers.commissioningCompleteCallback(
- CHIP_NO_ERROR == err);
- }];
- };
- }
-
- if (commissioningCallbackHandlers.sessionEstablishmentStartedCallback != nil) {
- commissioningCallbacks.sessionEstablishmentStarted
- = [clientQueue, commissioningCallbackHandlers]() {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) "
- @"sessionEstablishmentStartedCallback"
- block:^{
- commissioningCallbackHandlers
- .sessionEstablishmentStartedCallback();
- }];
- };
- }
-
- if (commissioningCallbackHandlers.sessionEstablishedCallback != nil) {
- commissioningCallbacks.sessionEstablished = [clientQueue, commissioningCallbackHandlers]() {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) sessionEstablishedCallback"
- block:^{
- commissioningCallbackHandlers.sessionEstablishedCallback();
- }];
- };
- }
-
- if (commissioningCallbackHandlers.sessionEstablishmentErrorCallback != nil) {
- commissioningCallbacks.sessionEstablishmentError = [clientQueue,
- commissioningCallbackHandlers](
- CHIP_ERROR err) {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) "
- @"sessionEstablishmentErrorCallback"
- block:^{
- commissioningCallbackHandlers.sessionEstablishmentErrorCallback(
- [[MatterError alloc]
- initWithCode:err.AsInteger()
- message:[NSString
- stringWithUTF8String:err.AsString()]]);
- }];
- };
- }
-
- if (commissioningCallbackHandlers.sessionEstablishmentStoppedCallback != nil) {
- commissioningCallbacks.sessionEstablishmentStopped
- = [clientQueue, commissioningCallbackHandlers]() {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) "
- @"sessionEstablishmentStoppedCallback"
- block:^{
- commissioningCallbackHandlers
- .sessionEstablishmentStoppedCallback();
- }];
- };
- }
- }
- CHIP_ERROR err = CastingServer::GetInstance()->OpenBasicCommissioningWindow(
- commissioningCallbacks,
- [clientQueue, onConnectionSuccessCallback](TargetVideoPlayerInfo * cppTargetVideoPlayerInfo) {
- VideoPlayer * videoPlayer =
- [ConversionUtils convertToObjCVideoPlayerFrom:cppTargetVideoPlayerInfo];
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) onConnectionSuccessCallback"
- block:^{
- onConnectionSuccessCallback(videoPlayer);
- }];
- },
- [clientQueue, onConnectionFailureCallback](CHIP_ERROR err) {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) onConnectionFailureCallback"
- block:^{
- onConnectionFailureCallback([[MatterError alloc]
- initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- }];
- },
- [clientQueue, onNewOrUpdatedEndpointCallback](TargetEndpointInfo * cppTargetEndpointInfo) {
- ContentApp * contentApp =
- [ConversionUtils convertToObjCContentAppFrom:cppTargetEndpointInfo];
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"openBasicCommissioningWindow(...) onNewOrUpdatedEndpointCallback"
- block:^{
- onNewOrUpdatedEndpointCallback(contentApp);
- }];
- });
-
- if (commissioningCallbackHandlers != nil
- && commissioningCallbackHandlers.commissioningWindowRequestedHandler != nil) {
- dispatch_async(clientQueue, ^{
- ChipLogProgress(AppServer, "[async] Dispatching commissioningWindowRequestedHandler");
- commissioningCallbackHandlers.commissioningWindowRequestedHandler(CHIP_NO_ERROR == err);
- });
- }
- }];
-}
-
-- (void)getActiveTargetVideoPlayers:(dispatch_queue_t _Nonnull)clientQueue
- activeTargetVideoPlayersHandler:(nullable void (^)(NSMutableArray * _Nullable))activeTargetVideoPlayersHandler
-{
- [self dispatchOnMatterSDKQueue:@"getActiveTargetVideoPlayers(...)"
- block:^{
- NSMutableArray * videoPlayers = [NSMutableArray new];
- TargetVideoPlayerInfo * cppTargetVideoPlayerInfo
- = CastingServer::GetInstance()->GetActiveTargetVideoPlayer();
- if (cppTargetVideoPlayerInfo != nullptr && cppTargetVideoPlayerInfo->IsInitialized()) {
- videoPlayers[0] = [ConversionUtils convertToObjCVideoPlayerFrom:cppTargetVideoPlayerInfo];
- }
-
- dispatch_async(clientQueue, ^{
- activeTargetVideoPlayersHandler(videoPlayers);
- });
- }];
-}
-
-- (void)readCachedVideoPlayers:(dispatch_queue_t _Nonnull)clientQueue
- readCachedVideoPlayersHandler:(nullable void (^)(NSMutableArray * _Nullable))readCachedVideoPlayersHandler
-{
- [self dispatchOnMatterSDKQueue:@"readCachedVideoPlayers(...)"
- block:^{
- NSMutableArray * videoPlayers = nil;
- TargetVideoPlayerInfo * cppTargetVideoPlayerInfos
- = CastingServer::GetInstance()->ReadCachedTargetVideoPlayerInfos();
- if (cppTargetVideoPlayerInfos != nullptr) {
- videoPlayers = [NSMutableArray new];
- for (size_t i = 0; cppTargetVideoPlayerInfos[i].IsInitialized(); i++) {
- ChipLogProgress(AppServer,
- "CastingServerBridge().readCachedVideoPlayers() with nodeId: 0x" ChipLogFormatX64
- " fabricIndex: %d deviceName: %s vendorId: %d",
- ChipLogValueX64(cppTargetVideoPlayerInfos[i].GetNodeId()),
- cppTargetVideoPlayerInfos[i].GetFabricIndex(),
- cppTargetVideoPlayerInfos[i].GetDeviceName(),
- cppTargetVideoPlayerInfos[i].GetVendorId());
- videoPlayers[i] =
- [ConversionUtils convertToObjCVideoPlayerFrom:&cppTargetVideoPlayerInfos[i]];
- }
- }
-
- dispatch_async(clientQueue, ^{
- readCachedVideoPlayersHandler(videoPlayers);
- });
- }];
-}
-
-- (void)verifyOrEstablishConnection:(VideoPlayer * _Nonnull)videoPlayer
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(nullable void (^)(MatterError * _Nonnull))requestSentHandler
- onConnectionSuccessCallback:(void (^_Nonnull)(VideoPlayer * _Nonnull))onConnectionSuccessCallback
- onConnectionFailureCallback:(void (^_Nonnull)(MatterError * _Nonnull))onConnectionFailureCallback
- onNewOrUpdatedEndpointCallback:(void (^_Nonnull)(ContentApp * _Nonnull))onNewOrUpdatedEndpointCallback
-{
- [self dispatchOnMatterSDKQueue:@"verifyOrEstablishConnection(...)"
- block:^{
- TargetVideoPlayerInfo targetVideoPlayerInfo;
- [ConversionUtils convertToCppTargetVideoPlayerInfoFrom:videoPlayer
- outTargetVideoPlayerInfo:targetVideoPlayerInfo];
-
- CHIP_ERROR err = CastingServer::GetInstance()->VerifyOrEstablishConnection(
- targetVideoPlayerInfo,
- [clientQueue, onConnectionSuccessCallback](TargetVideoPlayerInfo * cppTargetVideoPlayerInfo) {
- VideoPlayer * videoPlayer =
- [ConversionUtils convertToObjCVideoPlayerFrom:cppTargetVideoPlayerInfo];
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"onConnectionSuccessCallback"
- block:^{
- onConnectionSuccessCallback(videoPlayer);
- }];
- },
- [clientQueue, onConnectionFailureCallback](CHIP_ERROR err) {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"onConnectionFailureCallback"
- block:^{
- onConnectionFailureCallback([[MatterError alloc]
- initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- }];
- },
- [clientQueue, onNewOrUpdatedEndpointCallback](TargetEndpointInfo * cppTargetEndpointInfo) {
- ContentApp * contentApp =
- [ConversionUtils convertToObjCContentAppFrom:cppTargetEndpointInfo];
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"onNewOrUpdatedEndpointCallback"
- block:^{
- onNewOrUpdatedEndpointCallback(contentApp);
- }];
- });
-
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)shutdownAllSubscriptions:(dispatch_queue_t _Nonnull)clientQueue requestSentHandler:(nullable void (^)())requestSentHandler
-{
- [self dispatchOnMatterSDKQueue:@"shutdownAllSubscriptions(...)"
- block:^{
- CastingServer::GetInstance()->ShutdownAllSubscriptions();
- dispatch_async(clientQueue, ^{
- requestSentHandler();
- });
- }];
-}
-
-- (void)startMatterServer:(dispatch_queue_t _Nonnull)clientQueue
- startMatterServerCompletionCallback:(nullable void (^)(MatterError * _Nonnull))startMatterServerCompletionCallback
-{
- [self dispatchOnMatterSDKQueue:@"startMatterServer(...)"
- block:^{
- // Initialize the Matter server
- CHIP_ERROR err = chip::Server::GetInstance().Init(*self->_serverInitParams);
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "chip::Server init failed: %s", ErrorStr(err));
- dispatch_async(clientQueue, ^{
- startMatterServerCompletionCallback(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- return;
- }
-
- // Initialize AppDelegation
- CastingServer::GetInstance()->InitAppDelegation();
-
- // Initialize binding handlers
- err = CastingServer::GetInstance()->InitBindingHandlers();
- if (err != CHIP_NO_ERROR) {
- ChipLogError(AppServer, "Binding init failed: %s", ErrorStr(err));
- dispatch_async(clientQueue, ^{
- startMatterServerCompletionCallback(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- return;
- }
-
- // Now reconnect to the VideoPlayer the casting app was previously connected to (if any)
- if (self->_previouslyConnectedVideoPlayer != nil) {
- ChipLogProgress(AppServer,
- "CastingServerBridge().startMatterServer() reconnecting to previously connected "
- "VideoPlayer...");
- err = CastingServer::GetInstance()->VerifyOrEstablishConnection(
- *(self->_previouslyConnectedVideoPlayer),
- [clientQueue, startMatterServerCompletionCallback](
- TargetVideoPlayerInfo * cppTargetVideoPlayerInfo) {
- dispatch_async(clientQueue, ^{
- startMatterServerCompletionCallback([[MatterError alloc]
- initWithCode:CHIP_NO_ERROR.AsInteger()
- message:[NSString stringWithUTF8String:CHIP_NO_ERROR.AsString()]]);
- });
- },
- [clientQueue, startMatterServerCompletionCallback](CHIP_ERROR err) {
- dispatch_async(clientQueue, ^{
- startMatterServerCompletionCallback([[MatterError alloc]
- initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- },
- [](TargetEndpointInfo * cppTargetEndpointInfo) {});
- } else {
- dispatch_async(clientQueue, ^{
- startMatterServerCompletionCallback([[MatterError alloc]
- initWithCode:CHIP_NO_ERROR.AsInteger()
- message:[NSString stringWithUTF8String:CHIP_NO_ERROR.AsString()]]);
- });
- }
- }];
-}
-
-- (void)stopMatterServer
-{
- [self
- dispatchOnMatterSDKQueue:@"stopMatterServer(...)"
- block:^{
- // capture pointer to previouslyConnectedVideoPlayer, to be deleted
- TargetVideoPlayerInfo * videoPlayerForDeletion
- = self->_previouslyConnectedVideoPlayer == nil ? nil : self->_previouslyConnectedVideoPlayer;
-
- // On shutting down the Matter server, the casting app will be automatically disconnected from any
- // Video Players it was connected to. Save the VideoPlayer that the casting app was targetting and
- // connected to, so we can reconnect to it on re-starting the Matter server.
- TargetVideoPlayerInfo * currentTargetVideoPlayerInfo
- = CastingServer::GetInstance()->GetActiveTargetVideoPlayer();
- if (currentTargetVideoPlayerInfo != nil && currentTargetVideoPlayerInfo->IsInitialized()
- && currentTargetVideoPlayerInfo->GetOperationalDeviceProxy() != nil) {
- self->_previouslyConnectedVideoPlayer = new TargetVideoPlayerInfo();
- self->_previouslyConnectedVideoPlayer->Initialize(currentTargetVideoPlayerInfo->GetNodeId(),
- currentTargetVideoPlayerInfo->GetFabricIndex(), nullptr, nullptr,
- currentTargetVideoPlayerInfo->GetVendorId(), currentTargetVideoPlayerInfo->GetProductId(),
- currentTargetVideoPlayerInfo->GetDeviceType(), currentTargetVideoPlayerInfo->GetDeviceName(),
- currentTargetVideoPlayerInfo->GetHostName(), currentTargetVideoPlayerInfo->GetNumIPs(),
- const_cast<chip::Inet::IPAddress *>(currentTargetVideoPlayerInfo->GetIpAddresses()));
-
- TargetEndpointInfo * prevEndpoints = self->_previouslyConnectedVideoPlayer->GetEndpoints();
- if (prevEndpoints != nullptr) {
- for (size_t i = 0; i < kMaxNumberOfEndpoints; i++) {
- prevEndpoints[i].Reset();
- }
- }
- TargetEndpointInfo * currentEndpoints = currentTargetVideoPlayerInfo->GetEndpoints();
- for (size_t i = 0; i < kMaxNumberOfEndpoints && currentEndpoints[i].IsInitialized(); i++) {
- prevEndpoints[i].Initialize(currentEndpoints[i].GetEndpointId());
- chip::ClusterId * currentClusters = currentEndpoints[i].GetClusters();
- for (size_t j = 0;
- j < kMaxNumberOfClustersPerEndpoint && currentClusters[j] != chip::kInvalidClusterId;
- j++) {
- prevEndpoints[i].AddCluster(currentClusters[j]);
- }
- }
- } else {
- self->_previouslyConnectedVideoPlayer = nil;
- }
-
- // Now shutdown the Matter server
- chip::Server::GetInstance().Shutdown();
-
- // Delete the old previouslyConnectedVideoPlayer, if non-nil
- if (videoPlayerForDeletion != nil) {
- delete videoPlayerForDeletion;
- }
- }];
-}
-
-- (void)disconnect:(dispatch_queue_t _Nonnull)clientQueue requestSentHandler:(nullable void (^)())requestSentHandler
-{
- [self dispatchOnMatterSDKQueue:@"disconnect(...)"
- block:^{
- CastingServer::GetInstance()->Disconnect();
- dispatch_async(clientQueue, ^{
- requestSentHandler();
- });
- }];
-}
-
-- (void)purgeCache:(dispatch_queue_t _Nonnull)clientQueue responseHandler:(void (^)(MatterError * _Nonnull))responseHandler
-{
- dispatch_sync(_chipWorkQueue, ^{
- CHIP_ERROR err = CastingServer::GetInstance()->PurgeCache();
- dispatch_async(clientQueue, ^{
- responseHandler([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- });
-}
-
-- (void)contentLauncher_launchUrl:(ContentApp * _Nonnull)contentApp
- contentUrl:(NSString * _Nonnull)contentUrl
- contentDisplayStr:(NSString * _Nonnull)contentDisplayStr
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
- return castingServer->ContentLauncherLaunchURL(
- &endpoint, [contentUrl UTF8String], [contentDisplayStr UTF8String], responseFunction);
- }];
-}
-
-- (void)contentLauncher_launchContent:(ContentApp * _Nonnull)contentApp
- contentSearch:(ContentLauncher_ContentSearch * _Nonnull)contentSearch
- autoPlay:(bool)autoPlay
- data:(NSString * _Nullable)data
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description =
- [NSString stringWithFormat:@"contentLauncher_launchContent(...) with Content App endpoint ID %d", contentApp.endpointId];
-
- // Make a copy of params before we go async.
- contentSearch = [contentSearch copy];
- data = [data copy];
-
- [self
- dispatchOnMatterSDKQueue:description
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- ListFreer listFreer;
- chip::app::Clusters::ContentLauncher::Structs::ContentSearchStruct::Type cppSearch;
- if (contentSearch.parameterList.count > 0) {
- auto * parameterListHolder
- = new ListHolder<chip::app::Clusters::ContentLauncher::Structs::ParameterStruct::Type>(
- contentSearch.parameterList.count);
- listFreer.add(parameterListHolder);
-
- int parameterIndex = 0;
- for (ContentLauncher_Parameter * parameter in contentSearch.parameterList) {
- int externalIdListIndex = 0;
- if (parameter.externalIDList != nil) {
- auto * externalIdListHolder = new ListHolder<
- chip::app::Clusters::ContentLauncher::Structs::AdditionalInfoStruct::Type>(
- parameter.externalIDList.count);
- listFreer.add(externalIdListHolder);
-
- for (ContentLauncher_AdditionalInfo * additionalInfo in parameter.externalIDList) {
- externalIdListHolder->mList[externalIdListIndex].value
- = chip::CharSpan([additionalInfo.value UTF8String],
- [additionalInfo.value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
- externalIdListHolder->mList[externalIdListIndex].name
- = chip::CharSpan([additionalInfo.name UTF8String],
- [additionalInfo.name lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
- externalIdListIndex++;
- }
- parameterListHolder->mList[parameterIndex].externalIDList
- = MakeOptional(chip::app::DataModel::List<
- const chip::app::Clusters::ContentLauncher::Structs::AdditionalInfoStruct::Type>(
- externalIdListHolder->mList, parameter.externalIDList.count));
- } else {
- parameterListHolder->mList[parameterIndex].externalIDList
- = chip::Optional<chip::app::DataModel::List<const chip::app::Clusters::
- ContentLauncher::Structs::AdditionalInfoStruct::Type>>::Missing();
- }
-
- parameterListHolder->mList[parameterIndex].type
- = static_cast<chip::app::Clusters::ContentLauncher::ParameterEnum>(parameter.type);
- parameterListHolder->mList[parameterIndex].value
- = chip::CharSpan([parameter.value UTF8String],
- [parameter.value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
- parameterIndex++;
- cppSearch.parameterList = chip::app::DataModel::List<
- chip::app::Clusters::ContentLauncher::Structs::ParameterStruct::Type>(
- parameterListHolder->mList, contentSearch.parameterList.count);
- }
- }
-
- CHIP_ERROR err = CastingServer::GetInstance()->ContentLauncher_LaunchContent(&endpoint, cppSearch,
- autoPlay,
- MakeOptional(
- chip::CharSpan([data UTF8String], [data lengthOfBytesUsingEncoding:NSUTF8StringEncoding])),
- [clientQueue, responseCallback](CHIP_ERROR err) {
- [[CastingServerBridge getSharedInstance]
- dispatchOnClientQueue:clientQueue
- description:@"contentLauncher_launchContent(...) responseCallback"
- block:^{
- responseCallback(CHIP_NO_ERROR == err);
- }];
- });
-
- dispatch_async(clientQueue, ^{
- requestSentHandler(CHIP_NO_ERROR == err);
- });
- }];
-}
-
-- (void)contentLauncher_subscribeSupportedStreamingProtocols:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(uint32_t))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- const NSString * description =
- [NSString stringWithFormat:@"contentLauncher_subscribeSupportedStreamingProtocols(...) with Content App endpoint ID %d",
- contentApp.endpointId];
- [self dispatchOnMatterSDKQueue:description
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err
- = CastingServer::GetInstance()->ContentLauncher_SubscribeToSupportedStreamingProtocols(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::
- TypeInfo::DecodableArgType supportedStreamingProtocols) {
- void (^callback)(uint32_t) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"contentLauncher_subscribeSupportedStreamingProtocols"];
- callback(supportedStreamingProtocols.Raw());
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"contentLauncher_subscribeSupportedStreamingProtocols"];
- callback(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"contentLauncher_subscribeSupportedStreamingProtocols"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)levelControl_step:(ContentApp * _Nonnull)contentApp
- stepMode:(uint8_t)stepMode
- stepSize:(uint8_t)stepSize
- transitionTime:(uint16_t)transitionTime
- optionMask:(uint8_t)optionMask
- optionOverride:(uint8_t)optionOverride
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->LevelControl_Step(&endpoint,
- static_cast<chip::app::Clusters::LevelControl::StepModeEnum>(stepMode), stepSize,
- transitionTime, optionMask, optionOverride, responseFunction);
- }];
-}
-
-- (void)levelControl_moveToLevel:(ContentApp * _Nonnull)contentApp
- level:(uint8_t)level
- transitionTime:(uint16_t)transitionTime
- optionMask:(uint8_t)optionMask
- optionOverride:(uint8_t)optionOverride
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description =
- [NSString stringWithFormat:@"levelControl_moveToLevel(...) with Content App endpoint ID %d", contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->LevelControl_MoveToLevel(
- &endpoint, level, transitionTime, optionMask, optionOverride, responseFunction);
- }];
-}
-
-- (void)levelControl_subscribeCurrentLevel:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nullable))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().levelControl_subscribeCurrentLevel() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"levelControl_subscribeCurrentLevel"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"levelControl_subscribeCurrentLevel"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"levelControl_subscribeCurrentLevel"];
-
- [self
- dispatchOnMatterSDKQueue:@"levelControl_subscribeCurrentLevel(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->LevelControl_SubscribeToCurrentLevel(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo::DecodableArgType
- currentLevel) {
- void (^callback)(NSNumber * _Nullable) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"levelControl_subscribeCurrentLevel"];
- callback(@(currentLevel.Value()));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"levelControl_subscribeCurrentLevel"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"levelControl_subscribeCurrentLevel"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)levelControl_subscribeMinLevel:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(uint8_t))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().levelControl_subscribeMinLevel() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"levelControl_subscribeMinLevel"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"levelControl_subscribeMinLevel"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"levelControl_subscribeMinLevel"];
-
- [self
- dispatchOnMatterSDKQueue:@"levelControl_subscribeMinLevel(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->LevelControl_SubscribeToMinLevel(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo::DecodableArgType
- minLevel) {
- void (^callback)(uint8_t) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"levelControl_subscribeMinLevel"];
- callback(minLevel);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"levelControl_subscribeMinLevel"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"levelControl_subscribeMinLevel"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)levelControl_subscribeMaxLevel:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(uint8_t))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().levelControl_subscribeMaxLevel() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"levelControl_subscribeMaxLevel"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"levelControl_subscribeMaxLevel"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"levelControl_subscribeMaxLevel"];
-
- [self
- dispatchOnMatterSDKQueue:@"levelControl_subscribeMaxLevel(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->LevelControl_SubscribeToMaxLevel(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo::DecodableArgType
- maxLevel) {
- void (^callback)(uint8_t) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"levelControl_subscribeMaxLevel"];
- callback(maxLevel);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"levelControl_subscribeMaxLevel"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"levelControl_subscribeMaxLevel"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_play:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_Play(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_pause:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_Pause(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_stopPlayback:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_StopPlayback(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_next:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_Next(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_seek:(ContentApp * _Nonnull)contentApp
- position:(uint64_t)position
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_Seek(&endpoint, position, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_skipForward:(ContentApp * _Nonnull)contentApp
- deltaPositionMilliseconds:(uint64_t)deltaPositionMilliseconds
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_SkipForward(
- &endpoint, deltaPositionMilliseconds, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_skipBackward:(ContentApp * _Nonnull)contentApp
- deltaPositionMilliseconds:(uint64_t)deltaPositionMilliseconds
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_SkipBackward(
- &endpoint, deltaPositionMilliseconds, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_previous:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_Previous(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_rewind:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_Rewind(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_fastForward:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_FastForward(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_startOver:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->MediaPlayback_StartOver(&endpoint, responseFunction);
- }];
-}
-
-- (void)mediaPlayback_subscribeCurrentState:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(MediaPlayback_PlaybackState))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().mediaPlayback_subscribeCurrentState() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribeCurrentState"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribeCurrentState"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribeCurrentState"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribeCurrentState(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToCurrentState(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableArgType
- currentState) {
- void (^callback)(MediaPlayback_PlaybackState) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribeCurrentState"];
- callback(MediaPlayback_PlaybackState(currentState));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribeCurrentState"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribeCurrentState"];
- callback();
- });
-
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_subscribeStartTime:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nullable))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().mediaPlayback_subscribeStartTime() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribeStartTime"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribeStartTime"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribeStartTime"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribeStartTime(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToStartTime(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo::DecodableArgType
- startTime) {
- void (^callback)(NSNumber * _Nullable) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribeStartTime"];
- callback(@(startTime.Value()));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribeStartTime"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribeStartTime"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_subscribeDuration:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nullable))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().mediaPlayback_subscribeDuration() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribeDuration"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribeDuration"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribeDuration"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribeDuration(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToDuration(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableArgType
- startTime) {
- void (^callback)(NSNumber * _Nullable) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribeDuration"];
- callback(@(startTime.Value()));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribeDuration"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribeDuration"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_subscribeSampledPosition:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(MediaPlayback_PlaybackPosition * _Nullable))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().mediaPlayback_subscribeSampledPosition() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribeSampledPosition"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribeSampledPosition"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribeSampledPosition"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribeSampledPosition(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToSampledPosition(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo::DecodableArgType
- playbackPosition) {
- void (^callback)(MediaPlayback_PlaybackPosition * _Nullable) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribeSampledPosition"];
- MediaPlayback_PlaybackPosition * objCPlaybackPosition = nil;
- if (!playbackPosition.IsNull()) {
- if (playbackPosition.Value().position.IsNull()) {
- objCPlaybackPosition = [[MediaPlayback_PlaybackPosition alloc]
- initWithUpdatedAt:@(playbackPosition.Value().updatedAt)
- position:nil];
- } else {
- objCPlaybackPosition = [[MediaPlayback_PlaybackPosition alloc]
- initWithUpdatedAt:@(playbackPosition.Value().updatedAt)
- position:@(playbackPosition.Value().position.Value())];
- }
- callback(objCPlaybackPosition);
- }
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribeSampledPosition"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribeSampledPosition"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_subscribePlaybackSpeed:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(float))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().mediaPlayback_subscribePlaybackSpeed() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribePlaybackSpeed"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribePlaybackSpeed"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribePlaybackSpeed"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribePlaybackSpeed(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToPlaybackSpeed(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo::DecodableArgType
- playbackSpeed) {
- void (^callback)(float) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribePlaybackSpeed"];
- callback(playbackSpeed);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribePlaybackSpeed"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribePlaybackSpeed"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_subscribeSeekRangeEnd:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nullable))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().mediaPlayback_subscribeSeekRangeEnd() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribeSeekRangeEnd"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribeSeekRangeEnd"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribeSeekRangeEnd"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribeSeekRangeEnd(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToDuration(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo::DecodableArgType
- seekRangeEnd) {
- void (^callback)(NSNumber * _Nullable) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribeSeekRangeEnd"];
- callback(@(seekRangeEnd.Value()));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribeSeekRangeEnd"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribeSeekRangeEnd"];
- callback();
- });
-
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)mediaPlayback_subscribeSeekRangeStart:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nullable))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().mediaPlayback_subscribeSeekRangeStart() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"mediaPlayback_subscribeSeekRangeStart"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"mediaPlayback_subscribeSeekRangeStart"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"mediaPlayback_subscribeSeekRangeStart"];
-
- [self
- dispatchOnMatterSDKQueue:@"mediaPlayback_subscribeSeekRangeStart(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->MediaPlayback_SubscribeToDuration(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo::DecodableArgType
- seekRangeStart) {
- void (^callback)(NSNumber * _Nullable) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"mediaPlayback_subscribeSeekRangeStart"];
- callback(@(seekRangeStart.Value()));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"mediaPlayback_subscribeSeekRangeStart"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"mediaPlayback_subscribeSeekRangeStart"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationLauncher_launchApp:(ContentApp * _Nonnull)contentApp
- catalogVendorId:(uint16_t)catalogVendorId
- applicationId:(NSString * _Nonnull)applicationId
- data:(NSData * _Nullable)data
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
-
- chip::app::Clusters::ApplicationLauncher::Structs::ApplicationStruct::Type application;
- application.catalogVendorID = catalogVendorId;
- application.applicationID = chip::CharSpan::fromCharString([applicationId UTF8String]);
-
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->ApplicationLauncher_LaunchApp(&endpoint, application,
- chip::MakeOptional(chip::ByteSpan(static_cast<const uint8_t *>(data.bytes), data.length)),
- responseFunction);
- }];
-}
-
-- (void)applicationLauncher_stopApp:(ContentApp * _Nonnull)contentApp
- catalogVendorId:(uint16_t)catalogVendorId
- applicationId:(NSString * _Nonnull)applicationId
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- chip::app::Clusters::ApplicationLauncher::Structs::ApplicationStruct::Type application;
- application.catalogVendorID = catalogVendorId;
- application.applicationID = chip::CharSpan::fromCharString([applicationId UTF8String]);
-
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->ApplicationLauncher_StopApp(&endpoint, application, responseFunction);
- }];
-}
-
-- (void)applicationLauncher_hideApp:(ContentApp * _Nonnull)contentApp
- catalogVendorId:(uint16_t)catalogVendorId
- applicationId:(NSString * _Nonnull)applicationId
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
-
- chip::app::Clusters::ApplicationLauncher::Structs::ApplicationStruct::Type application;
- application.catalogVendorID = catalogVendorId;
- application.applicationID = chip::CharSpan::fromCharString([applicationId UTF8String]);
-
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->ApplicationLauncher_HideApp(&endpoint, application, responseFunction);
- }];
-}
-
-- (void)targetNavigator_navigateTarget:(ContentApp * _Nonnull)contentApp
- target:(uint8_t)target
- data:(NSString * _Nullable)data
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->TargetNavigator_NavigateTarget(&endpoint, target,
- chip::MakeOptional(chip::CharSpan::fromCharString([data UTF8String])), responseFunction);
- }];
-}
-
-- (void)targetNavigator_subscribeTargetList:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSMutableArray *))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().targetNavigator_subscribeTargetList() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"targetNavigator_subscribeTargetList"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"targetNavigator_subscribeTargetList"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"targetNavigator_subscribeTargetList"];
-
- [self
- dispatchOnMatterSDKQueue:@"targetNavigator_subscribeTargetList(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->TargetNavigator_SubscribeToTargetList(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo::DecodableArgType
- targetList) {
- void (^callback)(NSMutableArray *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"targetNavigator_subscribeTargetList"];
- NSMutableArray * objCTargetList = nil;
- size_t targetInfoCount;
- targetList.ComputeSize(&targetInfoCount);
- if (targetInfoCount > 0) {
- objCTargetList = [NSMutableArray arrayWithCapacity:targetInfoCount];
- auto iter = targetList.begin();
- while (iter.Next()) {
- const chip::app::Clusters::TargetNavigator::Structs::TargetInfoStruct::
- DecodableType & targetInfo
- = iter.GetValue();
- TargetNavigator_TargetInfoStruct * objCTargetInfoStruct =
- [[TargetNavigator_TargetInfoStruct alloc]
- initWithIdentifier:@(targetInfo.identifier)
- name:[NSString stringWithUTF8String:targetInfo.name.data()]];
- [objCTargetList addObject:objCTargetInfoStruct];
- }
- }
- callback(objCTargetList);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"targetNavigator_subscribeTargetList"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"targetNavigator_subscribeTargetList"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)targetNavigator_subscribeCurrentTarget:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(uint8_t))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().targetNavigator_subscribeCurrentTarget() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"targetNavigator_subscribeCurrentTarget"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"targetNavigator_subscribeCurrentTarget"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"targetNavigator_subscribeCurrentTarget"];
-
- [self
- dispatchOnMatterSDKQueue:@"targetNavigator_subscribeCurrentTarget(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->TargetNavigator_SubscribeToCurrentTarget(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo::DecodableArgType
- currentTarget) {
- void (^callback)(uint8_t) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"targetNavigator_subscribeCurrentTarget"];
- callback(currentTarget);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"targetNavigator_subscribeCurrentTarget"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"targetNavigator_subscribeCurrentTarget"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)keypadInput_sendKey:(ContentApp * _Nonnull)contentApp
- keyCode:(uint8_t)keyCode
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->KeypadInput_SendKey(&endpoint,
- static_cast<chip::app::Clusters::KeypadInput::CECKeyCodeEnum>(keyCode), responseFunction);
- }];
-}
-
-- (void)applicationBasic_subscribeVendorName:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSString * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_subscribeVendorName() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_subscribeVendorName"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_subscribeVendorName"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"applicationBasic_subscribeVendorName"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_subscribeVendorName(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_SubscribeToVendorName(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo::DecodableArgType
- vendorName) {
- void (^callback)(NSString * _Nonnull) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"applicationBasic_subscribeVendorName"];
- callback(vendorName.data() != nil ? [NSString stringWithUTF8String:vendorName.data()] : nil);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"applicationBasic_subscribeVendorName"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"applicationBasic_subscribeVendorName"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_subscribeVendorID:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_subscribeVendorID() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_subscribeVendorID"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_subscribeVendorID"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"applicationBasic_subscribeVendorID"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_subscribeVendorID(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_SubscribeToVendorID(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableArgType
- vendorID) {
- void (^callback)(NSNumber * _Nonnull) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"applicationBasic_subscribeVendorID"];
- callback(@(vendorID));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"applicationBasic_subscribeVendorID"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"applicationBasic_subscribeVendorID"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_subscribeApplicationName:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSString * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_subscribeApplicationName() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_subscribeApplicationName"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_subscribeApplicationName"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback
- forKey:@"applicationBasic_subscribeApplicationName"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_subscribeApplicationName(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_SubscribeToApplicationName(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo::
- DecodableArgType applicationName) {
- void (^callback)(NSString * _Nonnull) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"applicationBasic_subscribeApplicationName"];
- callback([NSString stringWithUTF8String:applicationName.data()]);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"applicationBasic_subscribeApplicationName"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"applicationBasic_subscribeApplicationName"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_subscribeProductID:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(uint16_t))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_subscribeProductID() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_subscribeProductID"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_subscribeProductID"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback forKey:@"applicationBasic_subscribeProductID"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_subscribeProductID(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_SubscribeToProductID(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo::DecodableArgType
- productID) {
- void (^callback)(uint16_t) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"applicationBasic_subscribeProductID"];
- callback(productID);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"applicationBasic_subscribeProductID"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"applicationBasic_subscribeProductID"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_subscribeApplicationVersion:(ContentApp * _Nonnull)contentApp
- minInterval:(uint16_t)minInterval
- maxInterval:(uint16_t)maxInterval
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSString * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
- subscriptionEstablishedCallback:(void (^_Nonnull)())subscriptionEstablishedCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_subscribeApplicationVersion() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_subscriptionReadSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_subscribeApplicationVersion"];
- [_subscriptionReadFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_subscribeApplicationVersion"];
- [_subscriptionEstablishedCallbacks setObject:subscriptionEstablishedCallback
- forKey:@"applicationBasic_subscribeApplicationVersion"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_subscribeApplicationVersion(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_SubscribeToApplicationVersion(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo::
- DecodableArgType applicationVersion) {
- void (^callback)(NSString * _Nonnull) =
- [[CastingServerBridge getSharedInstance].subscriptionReadSuccessCallbacks
- objectForKey:@"applicationBasic_subscribeApplicationVersion"];
- callback([NSString stringWithUTF8String:applicationVersion.data()]);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].subscriptionReadFailureCallbacks
- objectForKey:@"applicationBasic_subscribeApplicationVersion"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- },
- minInterval, maxInterval,
- [](void * context, chip::SubscriptionId subscriptionId) {
- void (^callback)() =
- [[CastingServerBridge getSharedInstance].subscriptionEstablishedCallbacks
- objectForKey:@"applicationBasic_subscribeApplicationVersion"];
- callback();
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_readVendorName:(ContentApp * _Nonnull)contentApp
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSString * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().applicationBasic_readVendorName() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_readSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_readVendorName"];
- [_readFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_readVendorName"];
-
- [self
- dispatchOnMatterSDKQueue:[NSString stringWithFormat:@"%s(...)", __func__]
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_ReadVendorName(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo::DecodableArgType
- vendorName) {
- void (^callback)(NSString * _Nonnull) =
- [[CastingServerBridge getSharedInstance].readSuccessCallbacks
- objectForKey:@"applicationBasic_readVendorName"];
- callback([NSString stringWithUTF8String:vendorName.data()]);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].readFailureCallbacks
- objectForKey:@"applicationBasic_readVendorName"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_readVendorID:(ContentApp * _Nonnull)contentApp
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSNumber * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().applicationBasic_readVendorID() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_readSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_readVendorID"];
- [_readFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_readVendorID"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_readVendorID(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_ReadVendorID(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableArgType
- vendorID) {
- void (^callback)(NSNumber * _Nonnull) =
- [[CastingServerBridge getSharedInstance].readSuccessCallbacks
- objectForKey:@"applicationBasic_readVendorID"];
- callback(@(vendorID));
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].readFailureCallbacks
- objectForKey:@"applicationBasic_readVendorID"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_readApplicationName:(ContentApp * _Nonnull)contentApp
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSString * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_readApplicationName() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_readSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_readApplicationName"];
- [_readFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_readApplicationName"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_readApplicationName(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_ReadApplicationName(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo::
- DecodableArgType applicationName) {
- void (^callback)(NSString * _Nonnull) =
- [[CastingServerBridge getSharedInstance].readSuccessCallbacks
- objectForKey:@"applicationBasic_readApplicationName"];
- callback([NSString stringWithUTF8String:applicationName.data()]);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].readFailureCallbacks
- objectForKey:@"applicationBasic_readApplicationName"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_readProductID:(ContentApp * _Nonnull)contentApp
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(uint16_t))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
-{
- ChipLogProgress(AppServer, "CastingServerBridge().applicationBasic_readProductID() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_readSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_readProductID"];
- [_readFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_readProductID"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_readProductID(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_ReadProductID(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo::DecodableArgType
- productID) {
- void (^callback)(uint16_t) = [[CastingServerBridge getSharedInstance].readSuccessCallbacks
- objectForKey:@"applicationBasic_readProductID"];
- callback(productID);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].readFailureCallbacks
- objectForKey:@"applicationBasic_readProductID"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)applicationBasic_readApplicationVersion:(ContentApp * _Nonnull)contentApp
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(MatterError * _Nonnull))requestSentHandler
- successCallback:(void (^_Nonnull)(NSString * _Nonnull))successCallback
- failureCallback:(void (^_Nonnull)(MatterError * _Nonnull))failureCallback
-{
- ChipLogProgress(AppServer,
- "CastingServerBridge().applicationBasic_readApplicationVersion() called on Content App with endpoint ID %d",
- contentApp.endpointId);
-
- [_readSuccessCallbacks setObject:successCallback forKey:@"applicationBasic_readApplicationVersion"];
- [_readFailureCallbacks setObject:failureCallback forKey:@"applicationBasic_readApplicationVersion"];
-
- [self
- dispatchOnMatterSDKQueue:@"applicationBasic_readApplicationVersion(...)"
- block:^{
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- CHIP_ERROR err = CastingServer::GetInstance()->ApplicationBasic_ReadApplicationVersion(
- &endpoint, nullptr,
- [](void * context,
- chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo::
- DecodableArgType applicationVersion) {
- void (^callback)(NSString * _Nonnull) =
- [[CastingServerBridge getSharedInstance].readSuccessCallbacks
- objectForKey:@"applicationBasic_readApplicationVersion"];
- callback([NSString stringWithUTF8String:applicationVersion.data()]);
- },
- [](void * context, CHIP_ERROR err) {
- void (^callback)(MatterError *) =
- [[CastingServerBridge getSharedInstance].readFailureCallbacks
- objectForKey:@"applicationBasic_readApplicationVersion"];
- callback([[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- dispatch_async(clientQueue, ^{
- requestSentHandler(
- [[MatterError alloc] initWithCode:err.AsInteger()
- message:[NSString stringWithUTF8String:err.AsString()]]);
- });
- }];
-}
-
-- (void)onOff_on:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->OnOff_On(&endpoint, responseFunction);
- }];
-}
-
-- (void)onOff_off:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->OnOff_Off(&endpoint, responseFunction);
- }];
-}
-
-- (void)onOff_toggle:(ContentApp * _Nonnull)contentApp
- responseCallback:(void (^_Nonnull)(bool))responseCallback
- clientQueue:(dispatch_queue_t _Nonnull)clientQueue
- requestSentHandler:(void (^_Nonnull)(bool))requestSentHandler
-{
- const NSString * description = [NSString stringWithFormat:@"%s(...) (Content App %d)", __func__, contentApp.endpointId];
- [self withCastingServerInvokeBlock:description
- callbackQueue:clientQueue
- onBlockComplete:requestSentHandler
- onResponse:responseCallback
- block:^(CastingServer * castingServer, std::function<void(CHIP_ERROR)> responseFunction) {
- TargetEndpointInfo endpoint;
- [ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:endpoint];
-
- return castingServer->OnOff_Toggle(&endpoint, responseFunction);
- }];
-}
-@end
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionerDiscoveryDelegateImpl.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionerDiscoveryDelegateImpl.h
deleted file mode 100644
index 8f55e33..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionerDiscoveryDelegateImpl.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *
- * Copyright (c) 2022 Project CHIP Authors
- * All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef CommissionerDiscoveryDelegateImpl_h
-#define CommissionerDiscoveryDelegateImpl_h
-
-#import "ConversionUtils.hpp"
-#include <controller/DeviceDiscoveryDelegate.h>
-#include <system/SystemClock.h>
-
-class CommissionerDiscoveryDelegateImpl : public chip::Controller::DeviceDiscoveryDelegate {
-public:
- void SetUp(dispatch_queue_t _Nonnull clientQueue,
- void (^_Nonnull objCDiscoveredCommissionerHandler)(DiscoveredNodeData * _Nonnull),
- TargetVideoPlayerInfo * _Nullable cachedTargetVideoPlayerInfos)
- {
- mClientQueue = clientQueue;
- mObjCDiscoveredCommissionerHandler = objCDiscoveredCommissionerHandler;
- mCachedTargetVideoPlayerInfos = cachedTargetVideoPlayerInfos;
- mDiscoveredCommissioners.clear();
-
- /**
- * Surface players (as DiscoveredNodeData objects on discoverySuccessCallback) that we previously
- * connected to and received their WakeOnLAN MACAddress, but could not discover over DNS-SD this time in
- * CHIP_DEVICE_CONFIG_STR_DISCOVERY_DELAY_SEC. This API will also ensure that the reported players
- * were previously discoverable within CHIP_DEVICE_CONFIG_STR_CACHE_LAST_DISCOVERED_HOURS.
- *
- * The DiscoveredNodeData object for such players will have the IsAsleep attribute set to true,
- * which can optionally be used for any special UX treatment when displaying them.
- *
- * Surfacing such players as discovered will allow displaying them to the user, who may want to
- * cast to them. In such a case, the VerifyOrEstablishConnection API will turn them on over
- * WakeOnLan.
- */
- chip::DeviceLayer::SystemLayer().CancelTimer(
- ReportSleepingCommissioners, this); // cancel preexisting timer for ReportSleepingCommissioners, if any
- if (mCachedTargetVideoPlayerInfos != nullptr && mCachedTargetVideoPlayerInfos[0].IsInitialized()) {
- chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Milliseconds32(
-#ifdef CHIP_DEVICE_CONFIG_STR_DISCOVERY_DELAY_SEC
- CHIP_DEVICE_CONFIG_STR_DISCOVERY_DELAY_SEC
-#else
- 0
-#endif
- * 1000),
- ReportSleepingCommissioners, this);
- }
- }
-
- void OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData & nodeData)
- {
- ChipLogProgress(AppServer, "CommissionerDiscoveryDelegateImpl().OnDiscoveredDevice() called");
- __block const chip::Dnssd::CommissionNodeData cppNodeData = nodeData;
- dispatch_async(mClientQueue, ^{
- DiscoveredNodeData * objCDiscoveredNodeData = [ConversionUtils convertToObjCDiscoveredNodeDataFrom:&cppNodeData];
- mDiscoveredCommissioners.push_back(objCDiscoveredNodeData); // add to the list of discovered commissioners
-
- // set associated connectable video player from cache, if any
- if (mCachedTargetVideoPlayerInfos != nullptr) {
- for (size_t i = 0; i < kMaxCachedVideoPlayers && mCachedTargetVideoPlayerInfos[i].IsInitialized(); i++) {
- if (mCachedTargetVideoPlayerInfos[i].IsSameAs(&cppNodeData)) {
- chip::System::Clock::Timestamp currentUnixTimeMS = chip::System::Clock::kZero;
- chip::System::SystemClock().GetClock_RealTimeMS(currentUnixTimeMS);
- ChipLogProgress(AppServer, "Updating discovery timestamp for VideoPlayer %lu",
- static_cast<unsigned long>(currentUnixTimeMS.count()));
- mCachedTargetVideoPlayerInfos[i].SetLastDiscovered(currentUnixTimeMS); // add discovery timestamp
- CastingServer::GetInstance()->AddVideoPlayer(
- &mCachedTargetVideoPlayerInfos[i]); // write updated video player to cache
-
- VideoPlayer * connectableVideoPlayer =
- [ConversionUtils convertToObjCVideoPlayerFrom:&mCachedTargetVideoPlayerInfos[i]];
- [objCDiscoveredNodeData setConnectableVideoPlayer:connectableVideoPlayer];
- }
- }
- }
-
- // make the callback
- mObjCDiscoveredCommissionerHandler(objCDiscoveredNodeData);
- });
- }
-
-private:
- static void ReportSleepingCommissioners(chip::System::Layer * _Nonnull aSystemLayer, void * _Nullable context)
- {
- ChipLogProgress(AppServer, "CommissionerDiscoveryDelegateImpl().ReportSleepingCommissioners() called");
- CommissionerDiscoveryDelegateImpl * thiz = (CommissionerDiscoveryDelegateImpl *) context;
- if (thiz == nullptr || thiz->mCachedTargetVideoPlayerInfos == nullptr) {
- ChipLogProgress(
- AppServer, "CommissionerDiscoveryDelegateImpl().ReportSleepingCommissioners() found no cached video players");
- return;
- }
- for (size_t i = 0; i < kMaxCachedVideoPlayers && thiz->mCachedTargetVideoPlayerInfos[i].IsInitialized(); i++) {
- // do NOT surface this cached Player if we don't have its MACAddress
- if (thiz->mCachedTargetVideoPlayerInfos[i].GetMACAddress() == nullptr
- && thiz->mCachedTargetVideoPlayerInfos[i].GetMACAddress()->size() == 0) {
- ChipLogProgress(NotSpecified,
- "CommissionerDiscoveryDelegateImpl().ReportSleepingCommissioners() Skipping Player with hostName %s but no "
- "MACAddress",
- thiz->mCachedTargetVideoPlayerInfos[i].GetHostName());
- continue;
- }
-
- // do NOT surface this cached Player if it has not been discoverable recently
- if (!thiz->mCachedTargetVideoPlayerInfos[i].WasRecentlyDiscoverable()) {
- ChipLogProgress(NotSpecified,
- "CommissionerDiscoveryDelegateImpl().ReportSleepingCommissioners() Skipping Player with hostName %s that "
- "has not been discovered recently",
- thiz->mCachedTargetVideoPlayerInfos[i].GetHostName());
- continue;
- }
-
- // do NOT surface this cached Player if it was just discovered right now (in this discovery call)
- bool justDiscovered = false;
- for (DiscoveredNodeData * discoveredCommissioner : thiz->mDiscoveredCommissioners) {
- if (strcmp(
- (char *) [discoveredCommissioner.hostName UTF8String], thiz->mCachedTargetVideoPlayerInfos[i].GetHostName())
- == 0) {
- justDiscovered = true;
- break;
- }
- }
- if (justDiscovered) {
- ChipLogProgress(NotSpecified,
- "CommissionerDiscoveryDelegateImpl().ReportSleepingCommissioners() Skipping Player with hostName %s that "
- "was just discovered",
- thiz->mCachedTargetVideoPlayerInfos[i].GetHostName());
- continue;
- }
-
- // DO surface this cached Player (as asleep)
- DiscoveredNodeData * objCDiscoveredNodeData =
- [ConversionUtils convertToDiscoveredNodeDataFrom:&thiz->mCachedTargetVideoPlayerInfos[i]];
- objCDiscoveredNodeData.getConnectableVideoPlayer.isAsleep = true;
- ChipLogProgress(AppServer, "CommissionerDiscoveryDelegateImpl().ReportSleepingCommissioners() with hostName %s",
- thiz->mCachedTargetVideoPlayerInfos[i].GetHostName());
- thiz->mObjCDiscoveredCommissionerHandler(objCDiscoveredNodeData);
- }
- }
-
- std::vector<DiscoveredNodeData *> mDiscoveredCommissioners;
- void (^_Nonnull mObjCDiscoveredCommissionerHandler)(DiscoveredNodeData * _Nonnull);
- dispatch_queue_t _Nonnull mClientQueue;
- TargetVideoPlayerInfo * _Nullable mCachedTargetVideoPlayerInfos;
-};
-
-#endif /* CommissionerDiscoveryDelegateImpl_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/ConversionUtils.hpp b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/ConversionUtils.hpp
deleted file mode 100644
index 597b372..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/ConversionUtils.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- *
- * Copyright (c) 2020-2022 Project CHIP Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "AppParameters.h"
-#import "ContentApp.h"
-#import "DiscoveredNodeData.h"
-#import "VideoPlayer.h"
-
-#import <AppParams.h>
-#import <TargetEndpointInfo.h>
-#import <TargetVideoPlayerInfo.h>
-#include <lib/dnssd/Resolver.h>
-
-#ifndef ConversionUtils_h
-#define ConversionUtils_h
-
-@interface ConversionUtils : NSObject
-/**
- * @brief Objective C to C++ converters
- */
-+ (CHIP_ERROR)convertToCppAppParamsInfoFrom:(AppParameters * _Nonnull)objCAppParameters outAppParams:(AppParams &)outAppParams;
-
-+ (CHIP_ERROR)convertToCppTargetEndpointInfoFrom:(ContentApp * _Nonnull)objCContentApp
- outTargetEndpointInfo:(TargetEndpointInfo &)outTargetEndpointInfo;
-
-+ (CHIP_ERROR)convertToCppTargetVideoPlayerInfoFrom:(VideoPlayer * _Nonnull)objCVideoPlayer
- outTargetVideoPlayerInfo:(TargetVideoPlayerInfo &)outTargetVideoPlayerInfo;
-
-+ (CHIP_ERROR)convertToCppDiscoveredNodeDataFrom:(DiscoveredNodeData * _Nonnull)objCDiscoveredNodeData
- outDiscoveredNodeData:(chip::Dnssd::CommissionNodeData &)outDiscoveredNodeData;
-
-/**
- * @brief C++ to Objective C converters
- */
-+ (ContentApp * _Nonnull)convertToObjCContentAppFrom:(TargetEndpointInfo * _Nonnull)cppTargetEndpointInfo;
-
-+ (DiscoveredNodeData * _Nonnull)convertToObjCDiscoveredNodeDataFrom:
- (const chip::Dnssd::CommissionNodeData * _Nonnull)cppDiscoveredNodedata;
-
-+ (VideoPlayer * _Nonnull)convertToObjCVideoPlayerFrom:(TargetVideoPlayerInfo * _Nonnull)cppTargetVideoPlayerInfo;
-
-/**
- * @brief inter-object converters
- */
-+ (DiscoveredNodeData * _Nonnull)convertToDiscoveredNodeDataFrom:(TargetVideoPlayerInfo * _Nonnull)cppTargetVideoPlayerInfo;
-
-@end
-
-#endif /* ConversionUtils_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/ConversionUtils.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/ConversionUtils.mm
deleted file mode 100644
index 5cce096..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/ConversionUtils.mm
+++ /dev/null
@@ -1,218 +0,0 @@
-/**
- *
- * Copyright (c) 2020-2023 Project CHIP Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#import <Foundation/Foundation.h>
-
-#import "ConversionUtils.hpp"
-
-@implementation ConversionUtils
-
-+ (CHIP_ERROR)convertToCppAppParamsInfoFrom:(AppParameters * _Nonnull)objCAppParameters outAppParams:(AppParams &)outAppParams
-{
- VerifyOrReturnError(objCAppParameters != nil, CHIP_ERROR_INVALID_ARGUMENT);
-
- if (objCAppParameters.rotatingDeviceIdUniqueId != nil) {
- chip::ByteSpan rotatingDeviceIdUniqueId
- = chip::ByteSpan(static_cast<const uint8_t *>(objCAppParameters.rotatingDeviceIdUniqueId.bytes),
- objCAppParameters.rotatingDeviceIdUniqueId.length);
- outAppParams.SetRotatingDeviceIdUniqueId(MakeOptional(rotatingDeviceIdUniqueId));
- }
- return CHIP_NO_ERROR;
-}
-
-+ (CHIP_ERROR)convertToCppTargetEndpointInfoFrom:(ContentApp * _Nonnull)objCContentApp
- outTargetEndpointInfo:(TargetEndpointInfo &)outTargetEndpointInfo
-{
- VerifyOrReturnError(objCContentApp.isInitialized, CHIP_ERROR_INVALID_ARGUMENT);
- outTargetEndpointInfo.Initialize(objCContentApp.endpointId);
- for (NSNumber * clusterId in objCContentApp.clusterIds) {
- VerifyOrReturnError(outTargetEndpointInfo.AddCluster([clusterId unsignedIntValue]), CHIP_ERROR_INVALID_ARGUMENT);
- }
- return CHIP_NO_ERROR;
-}
-
-+ (CHIP_ERROR)convertToCppDiscoveredNodeDataFrom:(DiscoveredNodeData * _Nonnull)objCDiscoveredNodeData
- outDiscoveredNodeData:(chip::Dnssd::CommissionNodeData &)outDiscoveredNodeData
-{
- // setting CommissionNodeData
- outDiscoveredNodeData.deviceType = objCDiscoveredNodeData.deviceType;
- outDiscoveredNodeData.vendorId = objCDiscoveredNodeData.vendorId;
- outDiscoveredNodeData.productId = objCDiscoveredNodeData.productId;
- outDiscoveredNodeData.longDiscriminator = objCDiscoveredNodeData.longDiscriminator;
- outDiscoveredNodeData.commissioningMode = objCDiscoveredNodeData.commissioningMode;
- outDiscoveredNodeData.pairingHint = objCDiscoveredNodeData.pairingHint;
- memset(outDiscoveredNodeData.deviceName, '\0', sizeof(outDiscoveredNodeData.deviceName));
- if (objCDiscoveredNodeData.deviceName != nullptr) {
- chip::Platform::CopyString(outDiscoveredNodeData.deviceName, chip::Dnssd::kMaxDeviceNameLen + 1,
- [objCDiscoveredNodeData.deviceName UTF8String]);
- }
- outDiscoveredNodeData.rotatingIdLen = objCDiscoveredNodeData.rotatingIdLen;
- memcpy(
- outDiscoveredNodeData.rotatingId, objCDiscoveredNodeData.rotatingId, objCDiscoveredNodeData.rotatingIdLen);
-
- // setting CommonResolutionData
- outDiscoveredNodeData.port = objCDiscoveredNodeData.port;
- memset(outDiscoveredNodeData.hostName, '\0', sizeof(outDiscoveredNodeData.hostName));
- if (objCDiscoveredNodeData.hostName != nullptr) {
- chip::Platform::CopyString(outDiscoveredNodeData.hostName, chip::Dnssd::kHostNameMaxLength + 1,
- [objCDiscoveredNodeData.hostName UTF8String]);
- }
- outDiscoveredNodeData.interfaceId = chip::Inet::InterfaceId(objCDiscoveredNodeData.platformInterface);
- outDiscoveredNodeData.numIPs = objCDiscoveredNodeData.numIPs;
- for (size_t i = 0; i < objCDiscoveredNodeData.numIPs; i++) {
- chip::Inet::IPAddress::FromString(
- [objCDiscoveredNodeData.ipAddresses[i] UTF8String], outDiscoveredNodeData.ipAddress[i]);
- }
- return CHIP_NO_ERROR;
-}
-
-+ (CHIP_ERROR)convertToCppTargetVideoPlayerInfoFrom:(VideoPlayer * _Nonnull)objCVideoPlayer
- outTargetVideoPlayerInfo:(TargetVideoPlayerInfo &)outTargetVideoPlayerInfo
-{
- VerifyOrReturnError(objCVideoPlayer.isInitialized, CHIP_ERROR_INVALID_ARGUMENT);
- ReturnErrorOnFailure(outTargetVideoPlayerInfo.Initialize(objCVideoPlayer.nodeId, objCVideoPlayer.fabricIndex, nullptr, nullptr,
- objCVideoPlayer.vendorId, objCVideoPlayer.productId, objCVideoPlayer.deviceType, [objCVideoPlayer.deviceName UTF8String],
- [objCVideoPlayer.hostName UTF8String], 0, nullptr, objCVideoPlayer.port, [objCVideoPlayer.instanceName UTF8String],
- chip::System::Clock::Timestamp(objCVideoPlayer.lastDiscoveredMs)));
- if (objCVideoPlayer.MACAddress != nil) {
- outTargetVideoPlayerInfo.SetMACAddress(
- chip::CharSpan([objCVideoPlayer.MACAddress UTF8String], objCVideoPlayer.MACAddress.length));
- }
- outTargetVideoPlayerInfo.SetIsAsleep(objCVideoPlayer.isAsleep);
-
- for (ContentApp * contentApp in objCVideoPlayer.contentApps) {
- TargetEndpointInfo * endpoint = outTargetVideoPlayerInfo.GetOrAddEndpoint(contentApp.endpointId);
- VerifyOrReturnError(endpoint != nullptr, CHIP_ERROR_INCORRECT_STATE);
- ReturnErrorOnFailure([ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:*endpoint]);
- }
- return CHIP_NO_ERROR;
-}
-
-+ (ContentApp *)convertToObjCContentAppFrom:(TargetEndpointInfo * _Nonnull)cppTargetEndpointInfo
-{
- ContentApp * objCContentApp = [ContentApp new];
- if (cppTargetEndpointInfo->IsInitialized()) {
- objCContentApp.endpointId = cppTargetEndpointInfo->GetEndpointId();
- objCContentApp.clusterIds = [NSMutableArray new];
- chip::ClusterId * clusterIds = cppTargetEndpointInfo->GetClusters();
- for (size_t i = 0; i < kMaxNumberOfClustersPerEndpoint && clusterIds[i] != chip::kInvalidClusterId; i++) {
- objCContentApp.clusterIds[i] = @(clusterIds[i]);
- }
- objCContentApp.isInitialized = true;
- }
- return objCContentApp;
-}
-
-+ (DiscoveredNodeData *)convertToObjCDiscoveredNodeDataFrom:(const chip::Dnssd::CommissionNodeData * _Nonnull)cppDiscoveredNodedata
-{
- DiscoveredNodeData * objCDiscoveredNodeData = [DiscoveredNodeData new];
-
- // from CommissionNodeData
- objCDiscoveredNodeData.deviceType = cppDiscoveredNodedata->deviceType;
- objCDiscoveredNodeData.vendorId = cppDiscoveredNodedata->vendorId;
- objCDiscoveredNodeData.productId = cppDiscoveredNodedata->productId;
- objCDiscoveredNodeData.longDiscriminator = cppDiscoveredNodedata->longDiscriminator;
- objCDiscoveredNodeData.commissioningMode = cppDiscoveredNodedata->commissioningMode;
- objCDiscoveredNodeData.pairingHint = cppDiscoveredNodedata->pairingHint;
- objCDiscoveredNodeData.deviceName = [NSString stringWithCString:cppDiscoveredNodedata->deviceName
- encoding:NSUTF8StringEncoding];
- objCDiscoveredNodeData.rotatingIdLen = cppDiscoveredNodedata->rotatingIdLen;
- objCDiscoveredNodeData.rotatingId = cppDiscoveredNodedata->rotatingId;
- objCDiscoveredNodeData.instanceName = [NSString stringWithCString:cppDiscoveredNodedata->instanceName
- encoding:NSUTF8StringEncoding];
-
- // from CommonResolutionData
- objCDiscoveredNodeData.port = cppDiscoveredNodedata->port;
- objCDiscoveredNodeData.hostName = [NSString stringWithCString:cppDiscoveredNodedata->hostName
- encoding:NSUTF8StringEncoding];
- objCDiscoveredNodeData.platformInterface = cppDiscoveredNodedata->interfaceId.GetPlatformInterface();
- objCDiscoveredNodeData.numIPs = cppDiscoveredNodedata->numIPs;
- if (cppDiscoveredNodedata->numIPs > 0) {
- objCDiscoveredNodeData.ipAddresses = [NSMutableArray new];
- }
- for (size_t i = 0; i < cppDiscoveredNodedata->numIPs; i++) {
- char addrCString[chip::Inet::IPAddress::kMaxStringLength];
- cppDiscoveredNodedata->ipAddress[i].ToString(addrCString, chip::Inet::IPAddress::kMaxStringLength);
- objCDiscoveredNodeData.ipAddresses[i] = [NSString stringWithCString:addrCString encoding:NSASCIIStringEncoding];
- }
- return objCDiscoveredNodeData;
-}
-
-+ (DiscoveredNodeData *)convertToDiscoveredNodeDataFrom:(TargetVideoPlayerInfo * _Nonnull)cppTargetVideoPlayerInfo
-{
- DiscoveredNodeData * objCDiscoveredNodeData = [DiscoveredNodeData new];
-
- objCDiscoveredNodeData.deviceType = cppTargetVideoPlayerInfo->GetDeviceType();
- objCDiscoveredNodeData.vendorId = cppTargetVideoPlayerInfo->GetVendorId();
- objCDiscoveredNodeData.productId = cppTargetVideoPlayerInfo->GetProductId();
- objCDiscoveredNodeData.deviceName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetDeviceName()
- encoding:NSUTF8StringEncoding];
- objCDiscoveredNodeData.instanceName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetInstanceName()
- encoding:NSUTF8StringEncoding];
-
- objCDiscoveredNodeData.port = cppTargetVideoPlayerInfo->GetPort();
- objCDiscoveredNodeData.hostName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetHostName()
- encoding:NSUTF8StringEncoding];
- objCDiscoveredNodeData.numIPs = cppTargetVideoPlayerInfo->GetNumIPs();
- if (cppTargetVideoPlayerInfo->GetNumIPs() > 0) {
- objCDiscoveredNodeData.ipAddresses = [NSMutableArray new];
- }
- for (size_t i = 0; i < cppTargetVideoPlayerInfo->GetNumIPs(); i++) {
- char addrCString[chip::Inet::IPAddress::kMaxStringLength];
- cppTargetVideoPlayerInfo->GetIpAddresses()[i].ToString(addrCString, chip::Inet::IPAddress::kMaxStringLength);
- objCDiscoveredNodeData.ipAddresses[i] = [NSString stringWithCString:addrCString encoding:NSASCIIStringEncoding];
- }
-
- VideoPlayer * connectableVideoPlayer = [ConversionUtils convertToObjCVideoPlayerFrom:cppTargetVideoPlayerInfo];
- [objCDiscoveredNodeData setConnectableVideoPlayer:connectableVideoPlayer];
- return objCDiscoveredNodeData;
-}
-
-+ (VideoPlayer *)convertToObjCVideoPlayerFrom:(TargetVideoPlayerInfo * _Nonnull)cppTargetVideoPlayerInfo
-{
- VideoPlayer * objCVideoPlayer = [VideoPlayer new];
- if (cppTargetVideoPlayerInfo->IsInitialized()) {
- objCVideoPlayer.nodeId = cppTargetVideoPlayerInfo->GetNodeId();
- objCVideoPlayer.fabricIndex = cppTargetVideoPlayerInfo->GetFabricIndex();
- objCVideoPlayer.vendorId = cppTargetVideoPlayerInfo->GetVendorId();
- objCVideoPlayer.productId = cppTargetVideoPlayerInfo->GetProductId();
- objCVideoPlayer.deviceType = cppTargetVideoPlayerInfo->GetDeviceType();
- objCVideoPlayer.isConnected = (cppTargetVideoPlayerInfo->GetOperationalDeviceProxy() != nil);
- objCVideoPlayer.deviceName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetDeviceName()
- encoding:NSUTF8StringEncoding];
- objCVideoPlayer.port = cppTargetVideoPlayerInfo->GetPort();
- if (cppTargetVideoPlayerInfo->GetMACAddress() != nullptr && cppTargetVideoPlayerInfo->GetMACAddress()->size() > 0) {
- objCVideoPlayer.MACAddress = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetMACAddress()->data()
- encoding:NSUTF8StringEncoding];
- }
- objCVideoPlayer.isAsleep = cppTargetVideoPlayerInfo->IsAsleep();
- objCVideoPlayer.lastDiscoveredMs = cppTargetVideoPlayerInfo->GetLastDiscovered().count();
- objCVideoPlayer.instanceName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetInstanceName()
- encoding:NSUTF8StringEncoding];
- objCVideoPlayer.hostName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetHostName()
- encoding:NSUTF8StringEncoding];
-
- objCVideoPlayer.contentApps = [NSMutableArray new];
- TargetEndpointInfo * cppTargetEndpointInfos = cppTargetVideoPlayerInfo->GetEndpoints();
- for (size_t i = 0; i < kMaxNumberOfEndpoints && cppTargetEndpointInfos[i].IsInitialized(); i++) {
- objCVideoPlayer.contentApps[i] = [ConversionUtils convertToObjCContentAppFrom:&cppTargetEndpointInfos[i]];
- }
- objCVideoPlayer.isInitialized = true;
- }
- return objCVideoPlayer;
-}
-
-@end