#if TARGET_OS_SIMULATOR
#if 0
#elif defined(__x86_64__) && __x86_64__
// Generated by Apple Swift version 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Dispatch;
@import Foundation;
@import ObjectiveC;
@import Security.CipherSuite;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="SmartView",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class Service;
@class ChannelClient;
@protocol ChannelDelegate;
@class NSError;

/// A Channel is a discreet connection where multiple clients can communicate
SWIFT_CLASS("_TtC9SmartView7Channel")
@interface Channel : NSObject
/// The connection status of the channel
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'Channel.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the channel (‘chat’)
@property (nonatomic, readonly, copy) NSString * _Null_unspecified uri SWIFT_DEPRECATED_OBJC("Swift property 'Channel.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// the service that is suplaying the channel connection
@property (nonatomic, readonly, strong) Service * _Null_unspecified service SWIFT_DEPRECATED_OBJC("Swift property 'Channel.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The client that owns this channel instance
@property (nonatomic, strong) ChannelClient * _Null_unspecified me SWIFT_DEPRECATED_OBJC("Swift property 'Channel.me' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nullable completionQueue SWIFT_DEPRECATED_OBJC("Swift property 'Channel.completionQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The delegate for handling channel events
@property (nonatomic, weak) id <ChannelDelegate> _Nullable delegate SWIFT_DEPRECATED_OBJC("Swift property 'Channel.delegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The timeout for channel transport connection.
/// The connection will be closed if no ping is received within the defined timeout
@property (nonatomic) NSTimeInterval connectionTimeout SWIFT_DEPRECATED_OBJC("Swift property 'Channel.connectionTimeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
- (void)disconnect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event with text message payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A snapshot of the list of clients currently connected to the channel
///
/// returns:
/// list of clients currently connected to the channel
- (NSArray<ChannelClient *> * _Nonnull)getClients SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.getClients()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to subscribe for notifications using blocks.
/// \param notificationName The name of the notification.
///
/// \param performClosure The notification closure, which will be executed in the main thread.
/// Make sure to control the ownership of a variables captured by the closure you provide in this parameter
/// (e.g. use [unowned self] or [weak self] to make sure that self is released even if you did not unsubscribe from notification)
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nullable)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.on(_:performClosure:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to unsubscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer SWIFT_DEPRECATED_OBJC("Swift method 'Channel.off(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (void)setSecurityModeWithSecurity:(BOOL)security completionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.setSecurityMode(security:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// An Application represents an application on the TV device.
/// Use this class to control various aspects of the application such as launching the app or getting information
SWIFT_CLASS("_TtC9SmartView11Application")
@interface Application : Channel
/// The id of the channel
@property (nonatomic, readonly, copy) NSString * _Null_unspecified id SWIFT_DEPRECATED_OBJC("Swift property 'Application.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// start arguments
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable args SWIFT_DEPRECATED_OBJC("Swift property 'Application.args' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Bundle Indentifier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull BUNDLE_IDENTIFIER SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)BUNDLE_IDENTIFIER SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// property value library
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PROPERTY_VALUE_LIBRARY SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)PROPERTY_VALUE_LIBRARY SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Retrieves information about the Application on the TV
/// \param completionHandler The callback handler with the status dictionary and an error if any
///
- (void)getInfo:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.getInfo(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Launches the application on the remote device, if the application is already running it returns success = true.
/// If the startOnConnect is set to false this method needs to be called in order to start the application
/// \param completionHandler The callback handler
///
- (void)start:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.start(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Stops the application on the TV
/// \param completionHandler The callback handler
///
- (void)stop:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.stop(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Starts the application install on the TV, this method will fail for cloud applications
/// \param completionHandler The callback handler
///
- (void)install:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.install(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// override channel connect.
/// connects your client with the host TV app
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
/// Disconnects your client with the host TV app
/// \param leaveHostRunning True leaves the TV app running ,False stops the TV app if yours is the last client
///
/// \param completionHandler The callback handler
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and leave the host application running if leaveHostRunning is set to true and you are the last client
/// \param leaveHostRunning True leaves the TV app running False stops the TV app if yours is the last client
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and terminate the host application if you are the last client
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
@end



@protocol ConnectionDelegate;

/// Base class for audio, video and photo player
SWIFT_CLASS("_TtC9SmartView10BasePlayer")
@interface BasePlayer : NSObject
/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
@property (nonatomic, weak) id <ConnectionDelegate> _Nullable connectionDelegate SWIFT_DEPRECATED_OBJC("Swift property 'BasePlayer.connectionDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects to the channel. This method will asynchronously call the delegate’s onDisconnect method and post a
/// ChannelEvent.
/// \param completionHandler callback handler of OnDisconnect
///
- (void)disconnect:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
/// \param screenSaverURL3 Optional Background Image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 screenSaverURL3:(NSURL * _Nullable)screenSaverURL3 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Sets the Watermark for the player
/// \param watermarkUrl Url from where watermark image will be downloaded
///
- (void)setPlayerWatermark:(NSURL * _Nullable)watermarkUrl;
/// Removes Player watermark set
- (void)removePlayerWatermark;
/// Play last sent media contents.
- (void)play;
/// Pause currently playing media.
- (void)pause;
/// Stop currently playing media.
- (void)stop;
/// Mute the volume of player on a connected device.
- (void)mute;
/// UnMute the volume of player on a connected device.
- (void)unMute;
/// Request previous to the player on a connected device.
- (void)previous;
/// Request next to the player on a connected device.
- (void)next;
/// Set volume on device playing media.
/// \param volume Integer value between 0 and 100.
///
- (void)setVolume:(uint8_t)volume;
/// Volume Up.
/// \code
/// increase volume of the player by 1.
///
/// \endcode
- (void)volumeUp;
/// decrease volume of the player by 1.
- (void)volumeDown;
/// get the control status of the player - like volume etc.
- (void)getControlStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol AudioPlayerDelegate;
enum AudioRepeatMode : NSInteger;

/// Audio Player Class handle the Audio share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11AudioPlayer")
@interface AudioPlayer : BasePlayer
/// The Audio Player delegate protocol defines the event methods available for a Audio.
@property (nonatomic, weak) id <AudioPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'AudioPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play Audio content on TV.
/// \param contentURL Audio Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// play Audio content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param albumName Content album name
///
/// \param albumArtUrl Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nullable)albumArtUrl completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum AudioRepeatMode)mode;
/// shuffle player list.
- (void)shuffle;
/// shuffle player list.
- (void)setShuffle:(BOOL)mode;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific audio from player list.
/// \param contentURL Audio URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add Audio item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nonnull)albumArtUrl;
/// Add Audio item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, AudioRepeatMode, closed) {
/// Repeat Off
  AudioRepeatModeRepeatOff = 0,
/// Repeat Single
  AudioRepeatModeRepeatSingle = 1,
/// repeat All
  AudioRepeatModeRepeatAll = 2,
};


SWIFT_PROTOCOL("_TtP9SmartView19AudioPlayerDelegate_")
@protocol AudioPlayerDelegate
@optional
/// event occurs on Buffering of Audio Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Audio Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when audio buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when Audio streaming is going on.
/// \param progress current playing time of Audio.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when Audio streaming start.
/// \param duration total duration of audio.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when Audio streaming completed.
- (void)onStreamCompleted;
/// event occurs when Audio is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Audio is shared after photo/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused audio is played.
- (void)onPlay;
/// event occurs on audio pause.
- (void)onPause;
/// event occurs on audio stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus shuffleStatus:(BOOL)shuffleStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on audio addition in TV queue(player list).
/// \param enqueuedItem enqueued audio item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on audio remove from TV queue(player list).
/// \param dequeuedItem dequeued audio Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs when player list is shuffled.
/// \param status shuffle status(true/false)
///
- (void)onShuffle:(BOOL)status;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end












/// A client currently connected to the channel
SWIFT_CLASS("_TtC9SmartView13ChannelClient")
@interface ChannelClient : NSObject
/// The id of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The time which the client connected in epoch milliseconds
@property (nonatomic, readonly, copy) NSDate * _Nullable connectTime SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.connectTime' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary of attributes passed by the client when connecting
@property (nonatomic, readonly, strong) id _Nullable attributes SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.attributes' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Flag for determining if the client is the host
@property (nonatomic, readonly) BOOL isHost SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.isHost' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class Message;

/// The channel delegate protocol defines the event methods available for a channel
SWIFT_PROTOCOL("_TtP9SmartView15ChannelDelegate_")
@protocol ChannelDelegate
@optional
/// Called when the Channel is connected
/// \param client The Client that just connected to the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the host app is ready to send or receive messages
- (void)onReady;
/// Called when the Channel is disconnected
/// \param client The Client that just disconnected from the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the Channel receives a text message
/// \param message Text message received
///
- (void)onMessage:(Message * _Nonnull)message;
/// Called when the Channel receives a binary data message
/// \param message Text message received
///
/// \param payload Binary payload data
///
- (void)onData:(Message * _Nonnull)message payload:(NSData * _Nonnull)payload;
/// Called when a client connects to the Channel
/// \param client The Client that just connected to the Channel
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// Called when a client disconnects from the Channel
/// \param client The Client that just disconnected from the Channel
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// Called when a Channel Error is fired
/// \param error The error
///
- (void)onError:(NSError * _Nonnull)error;
@end


/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
SWIFT_PROTOCOL("_TtP9SmartView18ConnectionDelegate_")
@protocol ConnectionDelegate
@optional
/// event occur when connection occur with channel.
/// \param error connection error
///
- (void)onConnect:(NSError * _Nullable)error;
/// event occur when Disconnection occur with channel.
/// \param error disconnect error.
///
- (void)onDisconnect:(NSError * _Nullable)error;
/// event occur when other client connects with channel.
/// \param client client info.
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// event occur when other client disconnects with channel.
/// \param client client info.
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// event occur when a Channel Error is fired
/// \param error error.
///
- (void)onError:(NSError * _Nonnull)error;
/// event occur when the host app is ready to send or receive messages
- (void)onReady;
@end


/// This class is wrapper which handle tv media calls.
/// its basic functionality is to launch DMP on TV and whatever notification comes from TV side it passes on to further module.
SWIFT_CLASS("_TtC9SmartView11MediaPlayer")
@interface MediaPlayer : NSObject
/// TV service name
@property (nonatomic, readonly, strong) Service * _Nonnull service SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Application Connection Status with TV.
@property (nonatomic, readonly) BOOL connected SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.connected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@interface MediaPlayer (SWIFT_EXTENSION(SmartView)) <ChannelDelegate>
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(Message * _Nonnull)message;
/// event occur when connection occur with channel
/// <ul>
///   <li>
///     client: The client that is connecting which is yourself
///   </li>
///   <li>
///     error: An error info if connect fails
///   </li>
/// </ul>
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// event occur when disconnection occur with channel.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
- (void)onError:(NSError * _Nonnull)error;
- (void)onReady;
@end


/// This class encapsulates the message that
SWIFT_CLASS("_TtC9SmartView7Message")
@interface Message : NSObject
/// The event name
@property (nonatomic, readonly, copy) NSString * _Null_unspecified event SWIFT_DEPRECATED_OBJC("Swift property 'Message.event' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The publisher of the event
@property (nonatomic, readonly, copy) NSString * _Null_unspecified from SWIFT_DEPRECATED_OBJC("Swift property 'Message.from' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary containig the message
@property (nonatomic, readonly, strong) id _Nullable data SWIFT_DEPRECATED_OBJC("Swift property 'Message.data' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol PhotoPlayerDelegate;

/// Photo Player Class handle the Photo share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11PhotoPlayer")
@interface PhotoPlayer : BasePlayer
/// The Photo Player delegate protocol defines the event methods available for a Photo.
@property (nonatomic, weak) id <PhotoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'PhotoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play image content on TV.
/// \param contentURL image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play image content on TV.
/// \param contentURL image URL
///
/// \param title image Title
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// sets background audio in slide show.
/// \param contentURL Background audio contentURL.
///
- (void)setBackgroundMusic:(NSURL * _Nonnull)contentURL;
/// stops background audio in slide show.
- (void)stopBackgroundMusic;
/// resumes TV widget/application from background process.
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific image from player list.
/// \param contentURL image URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// add image to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl Album Art URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title;
/// add Photo item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end


/// The Photo Player delegate protocol defines the event methods available for a Photo.
SWIFT_PROTOCOL("_TtP9SmartView19PhotoPlayerDelegate_")
@protocol PhotoPlayerDelegate
@optional
/// event occurs when Photo is shared with TV for the first time or after audio/video share.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Photo is shared after audio/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused photo player list is played.
- (void)onPlay;
/// event occurs on photo player list pause.
- (void)onPause;
/// event occurs on photo player list stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on photo(image) addition in TV queue(player list).
/// \param enqueuedItem enqueued photo item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on photo remove from TV queue(player list).
/// \param dequeuedItem dequeued photo item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// occurs when new photo is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

enum ServiceSearchDiscoveryType : NSInteger;
@class VideoPlayer;
@class ServiceSearch;

/// A Service instance represents the multiscreen service root on the remote device
/// Use the class to control top level services of the device
SWIFT_CLASS("_TtC9SmartView7Service")
@interface Service : NSObject
/// Discovery Type LAN/BLE
@property (nonatomic, readonly) enum ServiceSearchDiscoveryType discoveryType SWIFT_DEPRECATED_OBJC("Swift property 'Service.discoveryType' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The id of the service
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'Service.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the service (http://<ip>:<port>/api/v2/)
@property (nonatomic, readonly, copy) NSString * _Nonnull uri SWIFT_DEPRECATED_OBJC("Swift property 'Service.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The name of the service (Living Room TV)
@property (nonatomic, readonly, copy) NSString * _Nonnull name SWIFT_DEPRECATED_OBJC("Swift property 'Service.name' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The version of the service (x.x.x)
@property (nonatomic, readonly, copy) NSString * _Nonnull version SWIFT_DEPRECATED_OBJC("Swift property 'Service.version' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The type of the service (Samsung SmartTV)
@property (nonatomic, readonly, copy) NSString * _Nonnull type SWIFT_DEPRECATED_OBJC("Swift property 'Service.type' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The service description
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
/// This asynchronously method retrieves a dictionary of additional information about the device the service is running on
/// \param timeout timeout
///
/// \param completionHandler A block to handle the response dictionary
/// <ul>
///   <li>
///     deviceInfo: The device info dictionary
///   </li>
///   <li>
///     error: An error info if getDeviceInfo failed
///   </li>
/// </ul>
///
- (void)getDeviceInfo:(NSInteger)timeout completionHandler:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getDeviceInfo(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates an application instance belonging to that service
/// \param id The id of the application
/// <ul>
///   <li>
///     For an installed application this is the string id as provided by Samsung, If your TV app is still in development, you can use the folder name of your app as the id. Once the TV app has been released into Samsung Apps, you must use the supplied app id.`
///   </li>
///   <li>
///     For a cloud application this is the application’s URL
///   </li>
/// </ul>
///
/// \param channelURI The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
/// \param args A dictionary of command line aruguments to be passed to the Host TV App
///
///
/// returns:
/// An Application instance or nil if application id or channel id is empty
- (Application * _Nullable)createApplication:(id _Nonnull)id channelURI:(NSString * _Nonnull)channelURI args:(NSDictionary<NSString *, id> * _Nullable)args SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createApplication(_:channelURI:args:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a channel instance belonging to that service (“mychannel”)
/// \param ` The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
///
/// returns:
/// A Channel instance
- (Channel * _Nonnull)createChannel:(NSString * _Nonnull)channelURI SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createChannel(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates video player instance
/// \param appName 
///
///
/// returns:
/// VideoPlayer instance
- (VideoPlayer * _Nonnull)createVideoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createVideoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates audio player instance
/// \param appName 
///
///
/// returns:
/// AudioPlayer instance
- (AudioPlayer * _Nonnull)createAudioPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createAudioPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates photo player instance
/// \param appName 
///
///
/// returns:
/// PhotoPlayer instance
- (PhotoPlayer * _Nonnull)createPhotoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createPhotoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a service search object
///
/// returns:
/// An instance of ServiceSearch
+ (ServiceSearch * _Nonnull)search SWIFT_WARN_UNUSED_RESULT;
/// This asynchronous method retrieves a service instance given a service URI
/// \param uri The uri of the service
///
/// \param timeOut 
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     timeout: The timeout for the request
///   </li>
///   <li>
///     error: An error info if getByURI fails
///   </li>
/// </ul>
///
+ (void)getByURI:(NSString * _Nonnull)uri timeout:(NSTimeInterval)timeout completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getByURI(_:timeout:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// This asynchronous method retrieves a service instance given a service id
/// \param id The id of the service
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     error: An error info if getById fails
///   </li>
/// </ul>
///
+ (void)getById:(NSString * _Nonnull)id completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getById(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet for WakeOnWirelessLan.
/// \param macAddr Mac Address of TV
///
+ (void)WakeOnWirelessLan:(NSString * _Nonnull)macAddr SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessLan(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param timeOut timeout to wakeup
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri timeOut:(NSTimeInterval)timeOut completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:timeOut:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (void)isSecurityModeSupportedWithCompletionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.isSecurityModeSupported(completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Tries to Remove the standby service from the DB
- (void)remove SWIFT_DEPRECATED_OBJC("Swift method 'Service.remove()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Checks whether DMP is supported by the Service or not.
/// <ul>
///   <li>
///     returns Bool: True if DMP is supported
///   </li>
/// </ul>
- (BOOL)isDMPSupported SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.isDMPSupported()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



@protocol ServiceSearchDelegate;

/// This class searches the local network for compatible multiscreen services
SWIFT_CLASS("_TtC9SmartView13ServiceSearch")
@interface ServiceSearch : NSObject
/// Set a delegate to receive search events.
@property (nonatomic, weak) id <ServiceSearchDelegate> _Nullable delegate;
/// The search status
@property (nonatomic, readonly) BOOL isSearching;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// request for TV list found on Network/BLE.
///
/// returns:
/// returns TV List.
- (NSArray<Service *> * _Nonnull)getServices SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to suscribe for notifications using blocks
/// \param notificationName The name of the notification
///
/// \param performClosure The notification block, this block will be executed in the main thread
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nonnull)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to unsuscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer;
/// Start searching for devices
- (void)start;
/// Start searching for devices, overloaded function
/// \param showStandByTv false if Standby devices not to be shown
///
- (void)start:(BOOL)showStandByTv;
/// check bluetooth searching is on or off
///
/// returns:
/// true if bluetooth discovery on otherwise false
- (BOOL)isSearchingBLE SWIFT_WARN_UNUSED_RESULT;
/// Start BLE Search Process
///
/// returns:
/// returns ‘True’ if using BLE otherwise ‘False’
- (BOOL)startUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stop BLE Search Process
///
/// returns:
/// True
- (BOOL)stopUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stops the Device discovery.
- (void)stop;
/// Returns what status is set to StandbyMode.
/// <ul>
///   <li>
///     returns Bool: true if standby devices are shown
///   </li>
/// </ul>
- (BOOL)getStandByMode SWIFT_WARN_UNUSED_RESULT;
@end






@interface ServiceSearch (SWIFT_EXTENSION(SmartView))
/// Clear the standby devices from the DB
/// \param None No parameter required
///
- (void)clearStandbyDevices;
@end


/// This protocol defines the methods for ServiceSearch discovery
SWIFT_PROTOCOL("_TtP9SmartView21ServiceSearchDelegate_")
@protocol ServiceSearchDelegate
@optional
/// The ServiceSearch will call this delegate method when a service is found
/// \param service The found service
///
- (void)onServiceFound:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method when a service is lost
/// \param service The lost service
///
- (void)onServiceLost:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method after stopping the search
- (void)onStop;
/// The ServiceSearch will call this delegate method after the search has started
- (void)onStart;
/// If BLE device is found
/// \param NameOfTV Name of TV found on Bluetooth
///
- (void)onFoundOnlyBLE:(NSString * _Nonnull)NameOfTV;
/// Find other network (other than BLE)
/// \param NameOfTV Name of TV found on Network
///
- (void)onFoundOtherNetwork:(NSString * _Nonnull)NameOfTV;
@end

/// Describe Service Search DiscoveryType
typedef SWIFT_ENUM(NSInteger, ServiceSearchDiscoveryType, closed) {
/// LAN type
  ServiceSearchDiscoveryTypeLAN = 0,
/// Cloud Type
  ServiceSearchDiscoveryTypeCLOUD = 1,
};

@protocol VideoPlayerDelegate;
enum VideoRepeatMode : NSInteger;

/// Video Player Class handle the Video share, control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11VideoPlayer")
@interface VideoPlayer : BasePlayer
/// The Video Player delegate protocol defines the event methods available for a Video.
@property (nonatomic, weak) id <VideoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'VideoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play video content on TV.
/// \param contentURL video Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play video content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param thumbnailURL Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nullable)thumbnailURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// This method sends request to player for fast forwarding the video.
- (void)forward;
/// This method sends request to player for rewind the video.
- (void)rewind;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum VideoRepeatMode)mode;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific video content from player list.
/// \param contentURL video URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add video item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param thumbnailURL thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nonnull)thumbnailURL;
/// Add video item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, VideoRepeatMode, closed) {
/// Repeat Off
  VideoRepeatModeRepeatOff = 0,
/// Repeat Single
  VideoRepeatModeRepeatSingle = 1,
/// repeat All
  VideoRepeatModeRepeatAll = 2,
};


/// The Video Player delegate protocol defines the event methods available for a Video.
SWIFT_PROTOCOL("_TtP9SmartView19VideoPlayerDelegate_")
@protocol VideoPlayerDelegate
@optional
/// event occurs on Buffering of Video Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Video Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when video buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when video streaming is going on.
/// \param progress current playing time of video.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when video streaming start.
/// \param duration total duration of video.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when video streaming completed.
- (void)onStreamCompleted;
/// event occurs when video is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (video is shared after photo/audio share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused video is played.
- (void)onPlay;
/// event occurs on video pause.
- (void)onPause;
/// event occurs on video stop.
- (void)onStop;
/// event occurs on fast forwarding the video.
- (void)onForward;
/// event occurs on rewind the video.
- (void)onRewind;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on video addition in TV queue(player list).
/// \param enqueuedItem enqueued video item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on video remove from TV queue(player list).
/// \param dequeuedItem dequeued video Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

@class NSStream;

SWIFT_CLASS("_TtC9SmartView9WebSocket")
@interface WebSocket : NSObject <NSStreamDelegate>
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ErrorDomain SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)ErrorDomain SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nonnull callbackQueue SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.callbackQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onDisconnect)(NSError * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onDisconnect' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onText)(NSString * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onText' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onData)(NSData * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onData' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onPong)(NSData * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onPong' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull headers SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.headers' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL voipEnabled SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.voipEnabled' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL disableSSLCertValidation SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.disableSSLCertValidation' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSArray<NSNumber *> * _Nullable enabledSSLCipherSuites SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.enabledSSLCipherSuites' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSString * _Nullable origin SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.origin' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) NSInteger timeout SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.timeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly, copy) NSURL * _Nonnull currentURL SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.currentURL' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Used for setting protocols.
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url protocols:(NSArray<NSString *> * _Nullable)protocols OBJC_DESIGNATED_INITIALIZER SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url writeQueueQOS:(enum NSQualityOfService)writeQueueQOS protocols:(NSArray<NSString *> * _Nullable)protocols SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:writeQueueQOS:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connect to the WebSocket server on a background thread.
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a string to the websocket. This sends it as a text frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param str The string to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithString:(NSString * _Nonnull)string completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(string:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write binary data to the websocket. This sends it as a binary frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param data The data to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithData:(NSData * _Nonnull)data completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(data:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a ping to the websocket. This sends it as a control frame.
/// Yodel a   sound  to the planet.    This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s
- (void)writeWithPing:(NSData * _Nonnull)ping completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(ping:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Delegate for the stream methods. Processes incoming bytes
- (void)stream:(NSStream * _Nonnull)aStream handleEvent:(NSStreamEvent)eventCode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop

#elif defined(__i386__) && __i386__
// Generated by Apple Swift version 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Dispatch;
@import Foundation;
@import ObjectiveC;
@import Security.CipherSuite;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="SmartView",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class Service;
@class ChannelClient;
@protocol ChannelDelegate;
@class NSError;

/// A Channel is a discreet connection where multiple clients can communicate
SWIFT_CLASS("_TtC9SmartView7Channel")
@interface Channel : NSObject
/// The connection status of the channel
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'Channel.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the channel (‘chat’)
@property (nonatomic, readonly, copy) NSString * _Null_unspecified uri SWIFT_DEPRECATED_OBJC("Swift property 'Channel.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// the service that is suplaying the channel connection
@property (nonatomic, readonly, strong) Service * _Null_unspecified service SWIFT_DEPRECATED_OBJC("Swift property 'Channel.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The client that owns this channel instance
@property (nonatomic, strong) ChannelClient * _Null_unspecified me SWIFT_DEPRECATED_OBJC("Swift property 'Channel.me' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nullable completionQueue SWIFT_DEPRECATED_OBJC("Swift property 'Channel.completionQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The delegate for handling channel events
@property (nonatomic, weak) id <ChannelDelegate> _Nullable delegate SWIFT_DEPRECATED_OBJC("Swift property 'Channel.delegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The timeout for channel transport connection.
/// The connection will be closed if no ping is received within the defined timeout
@property (nonatomic) NSTimeInterval connectionTimeout SWIFT_DEPRECATED_OBJC("Swift property 'Channel.connectionTimeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
- (void)disconnect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event with text message payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A snapshot of the list of clients currently connected to the channel
///
/// returns:
/// list of clients currently connected to the channel
- (NSArray<ChannelClient *> * _Nonnull)getClients SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.getClients()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to subscribe for notifications using blocks.
/// \param notificationName The name of the notification.
///
/// \param performClosure The notification closure, which will be executed in the main thread.
/// Make sure to control the ownership of a variables captured by the closure you provide in this parameter
/// (e.g. use [unowned self] or [weak self] to make sure that self is released even if you did not unsubscribe from notification)
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nullable)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.on(_:performClosure:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to unsubscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer SWIFT_DEPRECATED_OBJC("Swift method 'Channel.off(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (void)setSecurityModeWithSecurity:(BOOL)security completionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.setSecurityMode(security:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// An Application represents an application on the TV device.
/// Use this class to control various aspects of the application such as launching the app or getting information
SWIFT_CLASS("_TtC9SmartView11Application")
@interface Application : Channel
/// The id of the channel
@property (nonatomic, readonly, copy) NSString * _Null_unspecified id SWIFT_DEPRECATED_OBJC("Swift property 'Application.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// start arguments
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable args SWIFT_DEPRECATED_OBJC("Swift property 'Application.args' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Bundle Indentifier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull BUNDLE_IDENTIFIER SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)BUNDLE_IDENTIFIER SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// property value library
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PROPERTY_VALUE_LIBRARY SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)PROPERTY_VALUE_LIBRARY SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Retrieves information about the Application on the TV
/// \param completionHandler The callback handler with the status dictionary and an error if any
///
- (void)getInfo:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.getInfo(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Launches the application on the remote device, if the application is already running it returns success = true.
/// If the startOnConnect is set to false this method needs to be called in order to start the application
/// \param completionHandler The callback handler
///
- (void)start:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.start(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Stops the application on the TV
/// \param completionHandler The callback handler
///
- (void)stop:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.stop(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Starts the application install on the TV, this method will fail for cloud applications
/// \param completionHandler The callback handler
///
- (void)install:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.install(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// override channel connect.
/// connects your client with the host TV app
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
/// Disconnects your client with the host TV app
/// \param leaveHostRunning True leaves the TV app running ,False stops the TV app if yours is the last client
///
/// \param completionHandler The callback handler
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and leave the host application running if leaveHostRunning is set to true and you are the last client
/// \param leaveHostRunning True leaves the TV app running False stops the TV app if yours is the last client
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and terminate the host application if you are the last client
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
@end



@protocol ConnectionDelegate;

/// Base class for audio, video and photo player
SWIFT_CLASS("_TtC9SmartView10BasePlayer")
@interface BasePlayer : NSObject
/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
@property (nonatomic, weak) id <ConnectionDelegate> _Nullable connectionDelegate SWIFT_DEPRECATED_OBJC("Swift property 'BasePlayer.connectionDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects to the channel. This method will asynchronously call the delegate’s onDisconnect method and post a
/// ChannelEvent.
/// \param completionHandler callback handler of OnDisconnect
///
- (void)disconnect:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
/// \param screenSaverURL3 Optional Background Image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 screenSaverURL3:(NSURL * _Nullable)screenSaverURL3 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Sets the Watermark for the player
/// \param watermarkUrl Url from where watermark image will be downloaded
///
- (void)setPlayerWatermark:(NSURL * _Nullable)watermarkUrl;
/// Removes Player watermark set
- (void)removePlayerWatermark;
/// Play last sent media contents.
- (void)play;
/// Pause currently playing media.
- (void)pause;
/// Stop currently playing media.
- (void)stop;
/// Mute the volume of player on a connected device.
- (void)mute;
/// UnMute the volume of player on a connected device.
- (void)unMute;
/// Request previous to the player on a connected device.
- (void)previous;
/// Request next to the player on a connected device.
- (void)next;
/// Set volume on device playing media.
/// \param volume Integer value between 0 and 100.
///
- (void)setVolume:(uint8_t)volume;
/// Volume Up.
/// \code
/// increase volume of the player by 1.
///
/// \endcode
- (void)volumeUp;
/// decrease volume of the player by 1.
- (void)volumeDown;
/// get the control status of the player - like volume etc.
- (void)getControlStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol AudioPlayerDelegate;
enum AudioRepeatMode : NSInteger;

/// Audio Player Class handle the Audio share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11AudioPlayer")
@interface AudioPlayer : BasePlayer
/// The Audio Player delegate protocol defines the event methods available for a Audio.
@property (nonatomic, weak) id <AudioPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'AudioPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play Audio content on TV.
/// \param contentURL Audio Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// play Audio content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param albumName Content album name
///
/// \param albumArtUrl Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nullable)albumArtUrl completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum AudioRepeatMode)mode;
/// shuffle player list.
- (void)shuffle;
/// shuffle player list.
- (void)setShuffle:(BOOL)mode;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific audio from player list.
/// \param contentURL Audio URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add Audio item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nonnull)albumArtUrl;
/// Add Audio item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, AudioRepeatMode, closed) {
/// Repeat Off
  AudioRepeatModeRepeatOff = 0,
/// Repeat Single
  AudioRepeatModeRepeatSingle = 1,
/// repeat All
  AudioRepeatModeRepeatAll = 2,
};


SWIFT_PROTOCOL("_TtP9SmartView19AudioPlayerDelegate_")
@protocol AudioPlayerDelegate
@optional
/// event occurs on Buffering of Audio Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Audio Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when audio buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when Audio streaming is going on.
/// \param progress current playing time of Audio.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when Audio streaming start.
/// \param duration total duration of audio.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when Audio streaming completed.
- (void)onStreamCompleted;
/// event occurs when Audio is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Audio is shared after photo/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused audio is played.
- (void)onPlay;
/// event occurs on audio pause.
- (void)onPause;
/// event occurs on audio stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus shuffleStatus:(BOOL)shuffleStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on audio addition in TV queue(player list).
/// \param enqueuedItem enqueued audio item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on audio remove from TV queue(player list).
/// \param dequeuedItem dequeued audio Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs when player list is shuffled.
/// \param status shuffle status(true/false)
///
- (void)onShuffle:(BOOL)status;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end












/// A client currently connected to the channel
SWIFT_CLASS("_TtC9SmartView13ChannelClient")
@interface ChannelClient : NSObject
/// The id of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The time which the client connected in epoch milliseconds
@property (nonatomic, readonly, copy) NSDate * _Nullable connectTime SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.connectTime' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary of attributes passed by the client when connecting
@property (nonatomic, readonly, strong) id _Nullable attributes SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.attributes' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Flag for determining if the client is the host
@property (nonatomic, readonly) BOOL isHost SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.isHost' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class Message;

/// The channel delegate protocol defines the event methods available for a channel
SWIFT_PROTOCOL("_TtP9SmartView15ChannelDelegate_")
@protocol ChannelDelegate
@optional
/// Called when the Channel is connected
/// \param client The Client that just connected to the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the host app is ready to send or receive messages
- (void)onReady;
/// Called when the Channel is disconnected
/// \param client The Client that just disconnected from the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the Channel receives a text message
/// \param message Text message received
///
- (void)onMessage:(Message * _Nonnull)message;
/// Called when the Channel receives a binary data message
/// \param message Text message received
///
/// \param payload Binary payload data
///
- (void)onData:(Message * _Nonnull)message payload:(NSData * _Nonnull)payload;
/// Called when a client connects to the Channel
/// \param client The Client that just connected to the Channel
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// Called when a client disconnects from the Channel
/// \param client The Client that just disconnected from the Channel
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// Called when a Channel Error is fired
/// \param error The error
///
- (void)onError:(NSError * _Nonnull)error;
@end


/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
SWIFT_PROTOCOL("_TtP9SmartView18ConnectionDelegate_")
@protocol ConnectionDelegate
@optional
/// event occur when connection occur with channel.
/// \param error connection error
///
- (void)onConnect:(NSError * _Nullable)error;
/// event occur when Disconnection occur with channel.
/// \param error disconnect error.
///
- (void)onDisconnect:(NSError * _Nullable)error;
/// event occur when other client connects with channel.
/// \param client client info.
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// event occur when other client disconnects with channel.
/// \param client client info.
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// event occur when a Channel Error is fired
/// \param error error.
///
- (void)onError:(NSError * _Nonnull)error;
/// event occur when the host app is ready to send or receive messages
- (void)onReady;
@end


/// This class is wrapper which handle tv media calls.
/// its basic functionality is to launch DMP on TV and whatever notification comes from TV side it passes on to further module.
SWIFT_CLASS("_TtC9SmartView11MediaPlayer")
@interface MediaPlayer : NSObject
/// TV service name
@property (nonatomic, readonly, strong) Service * _Nonnull service SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Application Connection Status with TV.
@property (nonatomic, readonly) BOOL connected SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.connected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@interface MediaPlayer (SWIFT_EXTENSION(SmartView)) <ChannelDelegate>
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(Message * _Nonnull)message;
/// event occur when connection occur with channel
/// <ul>
///   <li>
///     client: The client that is connecting which is yourself
///   </li>
///   <li>
///     error: An error info if connect fails
///   </li>
/// </ul>
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// event occur when disconnection occur with channel.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
- (void)onError:(NSError * _Nonnull)error;
- (void)onReady;
@end


/// This class encapsulates the message that
SWIFT_CLASS("_TtC9SmartView7Message")
@interface Message : NSObject
/// The event name
@property (nonatomic, readonly, copy) NSString * _Null_unspecified event SWIFT_DEPRECATED_OBJC("Swift property 'Message.event' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The publisher of the event
@property (nonatomic, readonly, copy) NSString * _Null_unspecified from SWIFT_DEPRECATED_OBJC("Swift property 'Message.from' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary containig the message
@property (nonatomic, readonly, strong) id _Nullable data SWIFT_DEPRECATED_OBJC("Swift property 'Message.data' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol PhotoPlayerDelegate;

/// Photo Player Class handle the Photo share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11PhotoPlayer")
@interface PhotoPlayer : BasePlayer
/// The Photo Player delegate protocol defines the event methods available for a Photo.
@property (nonatomic, weak) id <PhotoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'PhotoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play image content on TV.
/// \param contentURL image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play image content on TV.
/// \param contentURL image URL
///
/// \param title image Title
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// sets background audio in slide show.
/// \param contentURL Background audio contentURL.
///
- (void)setBackgroundMusic:(NSURL * _Nonnull)contentURL;
/// stops background audio in slide show.
- (void)stopBackgroundMusic;
/// resumes TV widget/application from background process.
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific image from player list.
/// \param contentURL image URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// add image to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl Album Art URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title;
/// add Photo item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end


/// The Photo Player delegate protocol defines the event methods available for a Photo.
SWIFT_PROTOCOL("_TtP9SmartView19PhotoPlayerDelegate_")
@protocol PhotoPlayerDelegate
@optional
/// event occurs when Photo is shared with TV for the first time or after audio/video share.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Photo is shared after audio/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused photo player list is played.
- (void)onPlay;
/// event occurs on photo player list pause.
- (void)onPause;
/// event occurs on photo player list stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on photo(image) addition in TV queue(player list).
/// \param enqueuedItem enqueued photo item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on photo remove from TV queue(player list).
/// \param dequeuedItem dequeued photo item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// occurs when new photo is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

enum ServiceSearchDiscoveryType : NSInteger;
@class VideoPlayer;
@class ServiceSearch;

/// A Service instance represents the multiscreen service root on the remote device
/// Use the class to control top level services of the device
SWIFT_CLASS("_TtC9SmartView7Service")
@interface Service : NSObject
/// Discovery Type LAN/BLE
@property (nonatomic, readonly) enum ServiceSearchDiscoveryType discoveryType SWIFT_DEPRECATED_OBJC("Swift property 'Service.discoveryType' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The id of the service
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'Service.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the service (http://<ip>:<port>/api/v2/)
@property (nonatomic, readonly, copy) NSString * _Nonnull uri SWIFT_DEPRECATED_OBJC("Swift property 'Service.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The name of the service (Living Room TV)
@property (nonatomic, readonly, copy) NSString * _Nonnull name SWIFT_DEPRECATED_OBJC("Swift property 'Service.name' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The version of the service (x.x.x)
@property (nonatomic, readonly, copy) NSString * _Nonnull version SWIFT_DEPRECATED_OBJC("Swift property 'Service.version' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The type of the service (Samsung SmartTV)
@property (nonatomic, readonly, copy) NSString * _Nonnull type SWIFT_DEPRECATED_OBJC("Swift property 'Service.type' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The service description
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
/// This asynchronously method retrieves a dictionary of additional information about the device the service is running on
/// \param timeout timeout
///
/// \param completionHandler A block to handle the response dictionary
/// <ul>
///   <li>
///     deviceInfo: The device info dictionary
///   </li>
///   <li>
///     error: An error info if getDeviceInfo failed
///   </li>
/// </ul>
///
- (void)getDeviceInfo:(NSInteger)timeout completionHandler:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getDeviceInfo(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates an application instance belonging to that service
/// \param id The id of the application
/// <ul>
///   <li>
///     For an installed application this is the string id as provided by Samsung, If your TV app is still in development, you can use the folder name of your app as the id. Once the TV app has been released into Samsung Apps, you must use the supplied app id.`
///   </li>
///   <li>
///     For a cloud application this is the application’s URL
///   </li>
/// </ul>
///
/// \param channelURI The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
/// \param args A dictionary of command line aruguments to be passed to the Host TV App
///
///
/// returns:
/// An Application instance or nil if application id or channel id is empty
- (Application * _Nullable)createApplication:(id _Nonnull)id channelURI:(NSString * _Nonnull)channelURI args:(NSDictionary<NSString *, id> * _Nullable)args SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createApplication(_:channelURI:args:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a channel instance belonging to that service (“mychannel”)
/// \param ` The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
///
/// returns:
/// A Channel instance
- (Channel * _Nonnull)createChannel:(NSString * _Nonnull)channelURI SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createChannel(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates video player instance
/// \param appName 
///
///
/// returns:
/// VideoPlayer instance
- (VideoPlayer * _Nonnull)createVideoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createVideoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates audio player instance
/// \param appName 
///
///
/// returns:
/// AudioPlayer instance
- (AudioPlayer * _Nonnull)createAudioPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createAudioPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates photo player instance
/// \param appName 
///
///
/// returns:
/// PhotoPlayer instance
- (PhotoPlayer * _Nonnull)createPhotoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createPhotoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a service search object
///
/// returns:
/// An instance of ServiceSearch
+ (ServiceSearch * _Nonnull)search SWIFT_WARN_UNUSED_RESULT;
/// This asynchronous method retrieves a service instance given a service URI
/// \param uri The uri of the service
///
/// \param timeOut 
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     timeout: The timeout for the request
///   </li>
///   <li>
///     error: An error info if getByURI fails
///   </li>
/// </ul>
///
+ (void)getByURI:(NSString * _Nonnull)uri timeout:(NSTimeInterval)timeout completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getByURI(_:timeout:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// This asynchronous method retrieves a service instance given a service id
/// \param id The id of the service
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     error: An error info if getById fails
///   </li>
/// </ul>
///
+ (void)getById:(NSString * _Nonnull)id completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getById(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet for WakeOnWirelessLan.
/// \param macAddr Mac Address of TV
///
+ (void)WakeOnWirelessLan:(NSString * _Nonnull)macAddr SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessLan(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param timeOut timeout to wakeup
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri timeOut:(NSTimeInterval)timeOut completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:timeOut:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (void)isSecurityModeSupportedWithCompletionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.isSecurityModeSupported(completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Tries to Remove the standby service from the DB
- (void)remove SWIFT_DEPRECATED_OBJC("Swift method 'Service.remove()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Checks whether DMP is supported by the Service or not.
/// <ul>
///   <li>
///     returns Bool: True if DMP is supported
///   </li>
/// </ul>
- (BOOL)isDMPSupported SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.isDMPSupported()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



@protocol ServiceSearchDelegate;

/// This class searches the local network for compatible multiscreen services
SWIFT_CLASS("_TtC9SmartView13ServiceSearch")
@interface ServiceSearch : NSObject
/// Set a delegate to receive search events.
@property (nonatomic, weak) id <ServiceSearchDelegate> _Nullable delegate;
/// The search status
@property (nonatomic, readonly) BOOL isSearching;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// request for TV list found on Network/BLE.
///
/// returns:
/// returns TV List.
- (NSArray<Service *> * _Nonnull)getServices SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to suscribe for notifications using blocks
/// \param notificationName The name of the notification
///
/// \param performClosure The notification block, this block will be executed in the main thread
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nonnull)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to unsuscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer;
/// Start searching for devices
- (void)start;
/// Start searching for devices, overloaded function
/// \param showStandByTv false if Standby devices not to be shown
///
- (void)start:(BOOL)showStandByTv;
/// check bluetooth searching is on or off
///
/// returns:
/// true if bluetooth discovery on otherwise false
- (BOOL)isSearchingBLE SWIFT_WARN_UNUSED_RESULT;
/// Start BLE Search Process
///
/// returns:
/// returns ‘True’ if using BLE otherwise ‘False’
- (BOOL)startUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stop BLE Search Process
///
/// returns:
/// True
- (BOOL)stopUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stops the Device discovery.
- (void)stop;
/// Returns what status is set to StandbyMode.
/// <ul>
///   <li>
///     returns Bool: true if standby devices are shown
///   </li>
/// </ul>
- (BOOL)getStandByMode SWIFT_WARN_UNUSED_RESULT;
@end






@interface ServiceSearch (SWIFT_EXTENSION(SmartView))
/// Clear the standby devices from the DB
/// \param None No parameter required
///
- (void)clearStandbyDevices;
@end


/// This protocol defines the methods for ServiceSearch discovery
SWIFT_PROTOCOL("_TtP9SmartView21ServiceSearchDelegate_")
@protocol ServiceSearchDelegate
@optional
/// The ServiceSearch will call this delegate method when a service is found
/// \param service The found service
///
- (void)onServiceFound:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method when a service is lost
/// \param service The lost service
///
- (void)onServiceLost:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method after stopping the search
- (void)onStop;
/// The ServiceSearch will call this delegate method after the search has started
- (void)onStart;
/// If BLE device is found
/// \param NameOfTV Name of TV found on Bluetooth
///
- (void)onFoundOnlyBLE:(NSString * _Nonnull)NameOfTV;
/// Find other network (other than BLE)
/// \param NameOfTV Name of TV found on Network
///
- (void)onFoundOtherNetwork:(NSString * _Nonnull)NameOfTV;
@end

/// Describe Service Search DiscoveryType
typedef SWIFT_ENUM(NSInteger, ServiceSearchDiscoveryType, closed) {
/// LAN type
  ServiceSearchDiscoveryTypeLAN = 0,
/// Cloud Type
  ServiceSearchDiscoveryTypeCLOUD = 1,
};

@protocol VideoPlayerDelegate;
enum VideoRepeatMode : NSInteger;

/// Video Player Class handle the Video share, control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11VideoPlayer")
@interface VideoPlayer : BasePlayer
/// The Video Player delegate protocol defines the event methods available for a Video.
@property (nonatomic, weak) id <VideoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'VideoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play video content on TV.
/// \param contentURL video Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play video content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param thumbnailURL Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nullable)thumbnailURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// This method sends request to player for fast forwarding the video.
- (void)forward;
/// This method sends request to player for rewind the video.
- (void)rewind;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum VideoRepeatMode)mode;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific video content from player list.
/// \param contentURL video URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add video item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param thumbnailURL thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nonnull)thumbnailURL;
/// Add video item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, VideoRepeatMode, closed) {
/// Repeat Off
  VideoRepeatModeRepeatOff = 0,
/// Repeat Single
  VideoRepeatModeRepeatSingle = 1,
/// repeat All
  VideoRepeatModeRepeatAll = 2,
};


/// The Video Player delegate protocol defines the event methods available for a Video.
SWIFT_PROTOCOL("_TtP9SmartView19VideoPlayerDelegate_")
@protocol VideoPlayerDelegate
@optional
/// event occurs on Buffering of Video Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Video Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when video buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when video streaming is going on.
/// \param progress current playing time of video.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when video streaming start.
/// \param duration total duration of video.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when video streaming completed.
- (void)onStreamCompleted;
/// event occurs when video is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (video is shared after photo/audio share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused video is played.
- (void)onPlay;
/// event occurs on video pause.
- (void)onPause;
/// event occurs on video stop.
- (void)onStop;
/// event occurs on fast forwarding the video.
- (void)onForward;
/// event occurs on rewind the video.
- (void)onRewind;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on video addition in TV queue(player list).
/// \param enqueuedItem enqueued video item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on video remove from TV queue(player list).
/// \param dequeuedItem dequeued video Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

@class NSStream;

SWIFT_CLASS("_TtC9SmartView9WebSocket")
@interface WebSocket : NSObject <NSStreamDelegate>
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ErrorDomain SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)ErrorDomain SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nonnull callbackQueue SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.callbackQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onDisconnect)(NSError * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onDisconnect' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onText)(NSString * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onText' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onData)(NSData * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onData' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onPong)(NSData * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onPong' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull headers SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.headers' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL voipEnabled SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.voipEnabled' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL disableSSLCertValidation SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.disableSSLCertValidation' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSArray<NSNumber *> * _Nullable enabledSSLCipherSuites SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.enabledSSLCipherSuites' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSString * _Nullable origin SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.origin' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) NSInteger timeout SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.timeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly, copy) NSURL * _Nonnull currentURL SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.currentURL' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Used for setting protocols.
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url protocols:(NSArray<NSString *> * _Nullable)protocols OBJC_DESIGNATED_INITIALIZER SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url writeQueueQOS:(enum NSQualityOfService)writeQueueQOS protocols:(NSArray<NSString *> * _Nullable)protocols SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:writeQueueQOS:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connect to the WebSocket server on a background thread.
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a string to the websocket. This sends it as a text frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param str The string to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithString:(NSString * _Nonnull)string completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(string:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write binary data to the websocket. This sends it as a binary frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param data The data to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithData:(NSData * _Nonnull)data completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(data:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a ping to the websocket. This sends it as a control frame.
/// Yodel a   sound  to the planet.    This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s
- (void)writeWithPing:(NSData * _Nonnull)ping completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(ping:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Delegate for the stream methods. Processes incoming bytes
- (void)stream:(NSStream * _Nonnull)aStream handleEvent:(NSStreamEvent)eventCode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop

#endif
#else
//Start of iphoneos
#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Dispatch;
@import Foundation;
@import ObjectiveC;
@import Security.CipherSuite;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="SmartView",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class Service;
@class ChannelClient;
@protocol ChannelDelegate;
@class NSError;

/// A Channel is a discreet connection where multiple clients can communicate
SWIFT_CLASS("_TtC9SmartView7Channel")
@interface Channel : NSObject
/// The connection status of the channel
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'Channel.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the channel (‘chat’)
@property (nonatomic, readonly, copy) NSString * _Null_unspecified uri SWIFT_DEPRECATED_OBJC("Swift property 'Channel.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// the service that is suplaying the channel connection
@property (nonatomic, readonly, strong) Service * _Null_unspecified service SWIFT_DEPRECATED_OBJC("Swift property 'Channel.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The client that owns this channel instance
@property (nonatomic, strong) ChannelClient * _Null_unspecified me SWIFT_DEPRECATED_OBJC("Swift property 'Channel.me' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nullable completionQueue SWIFT_DEPRECATED_OBJC("Swift property 'Channel.completionQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The delegate for handling channel events
@property (nonatomic, weak) id <ChannelDelegate> _Nullable delegate SWIFT_DEPRECATED_OBJC("Swift property 'Channel.delegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The timeout for channel transport connection.
/// The connection will be closed if no ping is received within the defined timeout
@property (nonatomic) NSTimeInterval connectionTimeout SWIFT_DEPRECATED_OBJC("Swift property 'Channel.connectionTimeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
- (void)disconnect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event with text message payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A snapshot of the list of clients currently connected to the channel
///
/// returns:
/// list of clients currently connected to the channel
- (NSArray<ChannelClient *> * _Nonnull)getClients SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.getClients()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to subscribe for notifications using blocks.
/// \param notificationName The name of the notification.
///
/// \param performClosure The notification closure, which will be executed in the main thread.
/// Make sure to control the ownership of a variables captured by the closure you provide in this parameter
/// (e.g. use [unowned self] or [weak self] to make sure that self is released even if you did not unsubscribe from notification)
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nullable)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.on(_:performClosure:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to unsubscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer SWIFT_DEPRECATED_OBJC("Swift method 'Channel.off(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (void)setSecurityModeWithSecurity:(BOOL)security completionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.setSecurityMode(security:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// An Application represents an application on the TV device.
/// Use this class to control various aspects of the application such as launching the app or getting information
SWIFT_CLASS("_TtC9SmartView11Application")
@interface Application : Channel
/// The id of the channel
@property (nonatomic, readonly, copy) NSString * _Null_unspecified id SWIFT_DEPRECATED_OBJC("Swift property 'Application.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// start arguments
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable args SWIFT_DEPRECATED_OBJC("Swift property 'Application.args' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Bundle Indentifier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull BUNDLE_IDENTIFIER SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)BUNDLE_IDENTIFIER SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// property value library
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PROPERTY_VALUE_LIBRARY SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)PROPERTY_VALUE_LIBRARY SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Retrieves information about the Application on the TV
/// \param completionHandler The callback handler with the status dictionary and an error if any
///
- (void)getInfo:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.getInfo(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Launches the application on the remote device, if the application is already running it returns success = true.
/// If the startOnConnect is set to false this method needs to be called in order to start the application
/// \param completionHandler The callback handler
///
- (void)start:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.start(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Stops the application on the TV
/// \param completionHandler The callback handler
///
- (void)stop:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.stop(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Starts the application install on the TV, this method will fail for cloud applications
/// \param completionHandler The callback handler
///
- (void)install:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.install(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// override channel connect.
/// connects your client with the host TV app
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
/// Disconnects your client with the host TV app
/// \param leaveHostRunning True leaves the TV app running ,False stops the TV app if yours is the last client
///
/// \param completionHandler The callback handler
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and leave the host application running if leaveHostRunning is set to true and you are the last client
/// \param leaveHostRunning True leaves the TV app running False stops the TV app if yours is the last client
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and terminate the host application if you are the last client
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
@end



@protocol ConnectionDelegate;

/// Base class for audio, video and photo player
SWIFT_CLASS("_TtC9SmartView10BasePlayer")
@interface BasePlayer : NSObject
/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
@property (nonatomic, weak) id <ConnectionDelegate> _Nullable connectionDelegate SWIFT_DEPRECATED_OBJC("Swift property 'BasePlayer.connectionDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects to the channel. This method will asynchronously call the delegate’s onDisconnect method and post a
/// ChannelEvent.
/// \param completionHandler callback handler of OnDisconnect
///
- (void)disconnect:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
/// \param screenSaverURL3 Optional Background Image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 screenSaverURL3:(NSURL * _Nullable)screenSaverURL3 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Sets the Watermark for the player
/// \param watermarkUrl Url from where watermark image will be downloaded
///
- (void)setPlayerWatermark:(NSURL * _Nullable)watermarkUrl;
/// Removes Player watermark set
- (void)removePlayerWatermark;
/// Play last sent media contents.
- (void)play;
/// Pause currently playing media.
- (void)pause;
/// Stop currently playing media.
- (void)stop;
/// Mute the volume of player on a connected device.
- (void)mute;
/// UnMute the volume of player on a connected device.
- (void)unMute;
/// Request previous to the player on a connected device.
- (void)previous;
/// Request next to the player on a connected device.
- (void)next;
/// Set volume on device playing media.
/// \param volume Integer value between 0 and 100.
///
- (void)setVolume:(uint8_t)volume;
/// Volume Up.
/// \code
/// increase volume of the player by 1.
///
/// \endcode
- (void)volumeUp;
/// decrease volume of the player by 1.
- (void)volumeDown;
/// get the control status of the player - like volume etc.
- (void)getControlStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol AudioPlayerDelegate;
enum AudioRepeatMode : NSInteger;

/// Audio Player Class handle the Audio share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11AudioPlayer")
@interface AudioPlayer : BasePlayer
/// The Audio Player delegate protocol defines the event methods available for a Audio.
@property (nonatomic, weak) id <AudioPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'AudioPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play Audio content on TV.
/// \param contentURL Audio Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// play Audio content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param albumName Content album name
///
/// \param albumArtUrl Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nullable)albumArtUrl completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum AudioRepeatMode)mode;
/// shuffle player list.
- (void)shuffle;
/// shuffle player list.
- (void)setShuffle:(BOOL)mode;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific audio from player list.
/// \param contentURL Audio URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add Audio item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nonnull)albumArtUrl;
/// Add Audio item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, AudioRepeatMode, closed) {
/// Repeat Off
  AudioRepeatModeRepeatOff = 0,
/// Repeat Single
  AudioRepeatModeRepeatSingle = 1,
/// repeat All
  AudioRepeatModeRepeatAll = 2,
};


SWIFT_PROTOCOL("_TtP9SmartView19AudioPlayerDelegate_")
@protocol AudioPlayerDelegate
@optional
/// event occurs on Buffering of Audio Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Audio Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when audio buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when Audio streaming is going on.
/// \param progress current playing time of Audio.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when Audio streaming start.
/// \param duration total duration of audio.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when Audio streaming completed.
- (void)onStreamCompleted;
/// event occurs when Audio is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Audio is shared after photo/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused audio is played.
- (void)onPlay;
/// event occurs on audio pause.
- (void)onPause;
/// event occurs on audio stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus shuffleStatus:(BOOL)shuffleStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on audio addition in TV queue(player list).
/// \param enqueuedItem enqueued audio item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on audio remove from TV queue(player list).
/// \param dequeuedItem dequeued audio Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs when player list is shuffled.
/// \param status shuffle status(true/false)
///
- (void)onShuffle:(BOOL)status;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end












/// A client currently connected to the channel
SWIFT_CLASS("_TtC9SmartView13ChannelClient")
@interface ChannelClient : NSObject
/// The id of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The time which the client connected in epoch milliseconds
@property (nonatomic, readonly, copy) NSDate * _Nullable connectTime SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.connectTime' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary of attributes passed by the client when connecting
@property (nonatomic, readonly, strong) id _Nullable attributes SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.attributes' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Flag for determining if the client is the host
@property (nonatomic, readonly) BOOL isHost SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.isHost' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class Message;

/// The channel delegate protocol defines the event methods available for a channel
SWIFT_PROTOCOL("_TtP9SmartView15ChannelDelegate_")
@protocol ChannelDelegate
@optional
/// Called when the Channel is connected
/// \param client The Client that just connected to the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the host app is ready to send or receive messages
- (void)onReady;
/// Called when the Channel is disconnected
/// \param client The Client that just disconnected from the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the Channel receives a text message
/// \param message Text message received
///
- (void)onMessage:(Message * _Nonnull)message;
/// Called when the Channel receives a binary data message
/// \param message Text message received
///
/// \param payload Binary payload data
///
- (void)onData:(Message * _Nonnull)message payload:(NSData * _Nonnull)payload;
/// Called when a client connects to the Channel
/// \param client The Client that just connected to the Channel
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// Called when a client disconnects from the Channel
/// \param client The Client that just disconnected from the Channel
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// Called when a Channel Error is fired
/// \param error The error
///
- (void)onError:(NSError * _Nonnull)error;
@end


/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
SWIFT_PROTOCOL("_TtP9SmartView18ConnectionDelegate_")
@protocol ConnectionDelegate
@optional
/// event occur when connection occur with channel.
/// \param error connection error
///
- (void)onConnect:(NSError * _Nullable)error;
/// event occur when Disconnection occur with channel.
/// \param error disconnect error.
///
- (void)onDisconnect:(NSError * _Nullable)error;
/// event occur when other client connects with channel.
/// \param client client info.
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// event occur when other client disconnects with channel.
/// \param client client info.
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// event occur when a Channel Error is fired
/// \param error error.
///
- (void)onError:(NSError * _Nonnull)error;
/// event occur when the host app is ready to send or receive messages
- (void)onReady;
@end


/// This class is wrapper which handle tv media calls.
/// its basic functionality is to launch DMP on TV and whatever notification comes from TV side it passes on to further module.
SWIFT_CLASS("_TtC9SmartView11MediaPlayer")
@interface MediaPlayer : NSObject
/// TV service name
@property (nonatomic, readonly, strong) Service * _Nonnull service SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Application Connection Status with TV.
@property (nonatomic, readonly) BOOL connected SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.connected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@interface MediaPlayer (SWIFT_EXTENSION(SmartView)) <ChannelDelegate>
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(Message * _Nonnull)message;
/// event occur when connection occur with channel
/// <ul>
///   <li>
///     client: The client that is connecting which is yourself
///   </li>
///   <li>
///     error: An error info if connect fails
///   </li>
/// </ul>
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// event occur when disconnection occur with channel.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
- (void)onError:(NSError * _Nonnull)error;
- (void)onReady;
@end


/// This class encapsulates the message that
SWIFT_CLASS("_TtC9SmartView7Message")
@interface Message : NSObject
/// The event name
@property (nonatomic, readonly, copy) NSString * _Null_unspecified event SWIFT_DEPRECATED_OBJC("Swift property 'Message.event' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The publisher of the event
@property (nonatomic, readonly, copy) NSString * _Null_unspecified from SWIFT_DEPRECATED_OBJC("Swift property 'Message.from' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary containig the message
@property (nonatomic, readonly, strong) id _Nullable data SWIFT_DEPRECATED_OBJC("Swift property 'Message.data' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol PhotoPlayerDelegate;

/// Photo Player Class handle the Photo share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11PhotoPlayer")
@interface PhotoPlayer : BasePlayer
/// The Photo Player delegate protocol defines the event methods available for a Photo.
@property (nonatomic, weak) id <PhotoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'PhotoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play image content on TV.
/// \param contentURL image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play image content on TV.
/// \param contentURL image URL
///
/// \param title image Title
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// sets background audio in slide show.
/// \param contentURL Background audio contentURL.
///
- (void)setBackgroundMusic:(NSURL * _Nonnull)contentURL;
/// stops background audio in slide show.
- (void)stopBackgroundMusic;
/// resumes TV widget/application from background process.
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific image from player list.
/// \param contentURL image URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// add image to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl Album Art URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title;
/// add Photo item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end


/// The Photo Player delegate protocol defines the event methods available for a Photo.
SWIFT_PROTOCOL("_TtP9SmartView19PhotoPlayerDelegate_")
@protocol PhotoPlayerDelegate
@optional
/// event occurs when Photo is shared with TV for the first time or after audio/video share.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Photo is shared after audio/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused photo player list is played.
- (void)onPlay;
/// event occurs on photo player list pause.
- (void)onPause;
/// event occurs on photo player list stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on photo(image) addition in TV queue(player list).
/// \param enqueuedItem enqueued photo item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on photo remove from TV queue(player list).
/// \param dequeuedItem dequeued photo item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// occurs when new photo is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

enum ServiceSearchDiscoveryType : NSInteger;
@class VideoPlayer;
@class ServiceSearch;

/// A Service instance represents the multiscreen service root on the remote device
/// Use the class to control top level services of the device
SWIFT_CLASS("_TtC9SmartView7Service")
@interface Service : NSObject
/// Discovery Type LAN/BLE
@property (nonatomic, readonly) enum ServiceSearchDiscoveryType discoveryType SWIFT_DEPRECATED_OBJC("Swift property 'Service.discoveryType' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The id of the service
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'Service.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the service (http://<ip>:<port>/api/v2/)
@property (nonatomic, readonly, copy) NSString * _Nonnull uri SWIFT_DEPRECATED_OBJC("Swift property 'Service.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The name of the service (Living Room TV)
@property (nonatomic, readonly, copy) NSString * _Nonnull name SWIFT_DEPRECATED_OBJC("Swift property 'Service.name' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The version of the service (x.x.x)
@property (nonatomic, readonly, copy) NSString * _Nonnull version SWIFT_DEPRECATED_OBJC("Swift property 'Service.version' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The type of the service (Samsung SmartTV)
@property (nonatomic, readonly, copy) NSString * _Nonnull type SWIFT_DEPRECATED_OBJC("Swift property 'Service.type' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The service description
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
/// This asynchronously method retrieves a dictionary of additional information about the device the service is running on
/// \param timeout timeout
///
/// \param completionHandler A block to handle the response dictionary
/// <ul>
///   <li>
///     deviceInfo: The device info dictionary
///   </li>
///   <li>
///     error: An error info if getDeviceInfo failed
///   </li>
/// </ul>
///
- (void)getDeviceInfo:(NSInteger)timeout completionHandler:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getDeviceInfo(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates an application instance belonging to that service
/// \param id The id of the application
/// <ul>
///   <li>
///     For an installed application this is the string id as provided by Samsung, If your TV app is still in development, you can use the folder name of your app as the id. Once the TV app has been released into Samsung Apps, you must use the supplied app id.`
///   </li>
///   <li>
///     For a cloud application this is the application’s URL
///   </li>
/// </ul>
///
/// \param channelURI The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
/// \param args A dictionary of command line aruguments to be passed to the Host TV App
///
///
/// returns:
/// An Application instance or nil if application id or channel id is empty
- (Application * _Nullable)createApplication:(id _Nonnull)id channelURI:(NSString * _Nonnull)channelURI args:(NSDictionary<NSString *, id> * _Nullable)args SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createApplication(_:channelURI:args:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a channel instance belonging to that service (“mychannel”)
/// \param ` The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
///
/// returns:
/// A Channel instance
- (Channel * _Nonnull)createChannel:(NSString * _Nonnull)channelURI SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createChannel(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates video player instance
/// \param appName 
///
///
/// returns:
/// VideoPlayer instance
- (VideoPlayer * _Nonnull)createVideoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createVideoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates audio player instance
/// \param appName 
///
///
/// returns:
/// AudioPlayer instance
- (AudioPlayer * _Nonnull)createAudioPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createAudioPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates photo player instance
/// \param appName 
///
///
/// returns:
/// PhotoPlayer instance
- (PhotoPlayer * _Nonnull)createPhotoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createPhotoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a service search object
///
/// returns:
/// An instance of ServiceSearch
+ (ServiceSearch * _Nonnull)search SWIFT_WARN_UNUSED_RESULT;
/// This asynchronous method retrieves a service instance given a service URI
/// \param uri The uri of the service
///
/// \param timeOut 
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     timeout: The timeout for the request
///   </li>
///   <li>
///     error: An error info if getByURI fails
///   </li>
/// </ul>
///
+ (void)getByURI:(NSString * _Nonnull)uri timeout:(NSTimeInterval)timeout completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getByURI(_:timeout:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// This asynchronous method retrieves a service instance given a service id
/// \param id The id of the service
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     error: An error info if getById fails
///   </li>
/// </ul>
///
+ (void)getById:(NSString * _Nonnull)id completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getById(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet for WakeOnWirelessLan.
/// \param macAddr Mac Address of TV
///
+ (void)WakeOnWirelessLan:(NSString * _Nonnull)macAddr SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessLan(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param timeOut timeout to wakeup
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri timeOut:(NSTimeInterval)timeOut completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:timeOut:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (void)isSecurityModeSupportedWithCompletionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.isSecurityModeSupported(completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Tries to Remove the standby service from the DB
- (void)remove SWIFT_DEPRECATED_OBJC("Swift method 'Service.remove()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Checks whether DMP is supported by the Service or not.
/// <ul>
///   <li>
///     returns Bool: True if DMP is supported
///   </li>
/// </ul>
- (BOOL)isDMPSupported SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.isDMPSupported()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



@protocol ServiceSearchDelegate;

/// This class searches the local network for compatible multiscreen services
SWIFT_CLASS("_TtC9SmartView13ServiceSearch")
@interface ServiceSearch : NSObject
/// Set a delegate to receive search events.
@property (nonatomic, weak) id <ServiceSearchDelegate> _Nullable delegate;
/// The search status
@property (nonatomic, readonly) BOOL isSearching;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// request for TV list found on Network/BLE.
///
/// returns:
/// returns TV List.
- (NSArray<Service *> * _Nonnull)getServices SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to suscribe for notifications using blocks
/// \param notificationName The name of the notification
///
/// \param performClosure The notification block, this block will be executed in the main thread
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nonnull)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to unsuscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer;
/// Start searching for devices
- (void)start;
/// Start searching for devices, overloaded function
/// \param showStandByTv false if Standby devices not to be shown
///
- (void)start:(BOOL)showStandByTv;
/// check bluetooth searching is on or off
///
/// returns:
/// true if bluetooth discovery on otherwise false
- (BOOL)isSearchingBLE SWIFT_WARN_UNUSED_RESULT;
/// Start BLE Search Process
///
/// returns:
/// returns ‘True’ if using BLE otherwise ‘False’
- (BOOL)startUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stop BLE Search Process
///
/// returns:
/// True
- (BOOL)stopUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stops the Device discovery.
- (void)stop;
/// Returns what status is set to StandbyMode.
/// <ul>
///   <li>
///     returns Bool: true if standby devices are shown
///   </li>
/// </ul>
- (BOOL)getStandByMode SWIFT_WARN_UNUSED_RESULT;
@end






@interface ServiceSearch (SWIFT_EXTENSION(SmartView))
/// Clear the standby devices from the DB
/// \param None No parameter required
///
- (void)clearStandbyDevices;
@end


/// This protocol defines the methods for ServiceSearch discovery
SWIFT_PROTOCOL("_TtP9SmartView21ServiceSearchDelegate_")
@protocol ServiceSearchDelegate
@optional
/// The ServiceSearch will call this delegate method when a service is found
/// \param service The found service
///
- (void)onServiceFound:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method when a service is lost
/// \param service The lost service
///
- (void)onServiceLost:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method after stopping the search
- (void)onStop;
/// The ServiceSearch will call this delegate method after the search has started
- (void)onStart;
/// If BLE device is found
/// \param NameOfTV Name of TV found on Bluetooth
///
- (void)onFoundOnlyBLE:(NSString * _Nonnull)NameOfTV;
/// Find other network (other than BLE)
/// \param NameOfTV Name of TV found on Network
///
- (void)onFoundOtherNetwork:(NSString * _Nonnull)NameOfTV;
@end

/// Describe Service Search DiscoveryType
typedef SWIFT_ENUM(NSInteger, ServiceSearchDiscoveryType, closed) {
/// LAN type
  ServiceSearchDiscoveryTypeLAN = 0,
/// Cloud Type
  ServiceSearchDiscoveryTypeCLOUD = 1,
};

@protocol VideoPlayerDelegate;
enum VideoRepeatMode : NSInteger;

/// Video Player Class handle the Video share, control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11VideoPlayer")
@interface VideoPlayer : BasePlayer
/// The Video Player delegate protocol defines the event methods available for a Video.
@property (nonatomic, weak) id <VideoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'VideoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play video content on TV.
/// \param contentURL video Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play video content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param thumbnailURL Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nullable)thumbnailURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// This method sends request to player for fast forwarding the video.
- (void)forward;
/// This method sends request to player for rewind the video.
- (void)rewind;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum VideoRepeatMode)mode;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific video content from player list.
/// \param contentURL video URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add video item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param thumbnailURL thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nonnull)thumbnailURL;
/// Add video item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, VideoRepeatMode, closed) {
/// Repeat Off
  VideoRepeatModeRepeatOff = 0,
/// Repeat Single
  VideoRepeatModeRepeatSingle = 1,
/// repeat All
  VideoRepeatModeRepeatAll = 2,
};


/// The Video Player delegate protocol defines the event methods available for a Video.
SWIFT_PROTOCOL("_TtP9SmartView19VideoPlayerDelegate_")
@protocol VideoPlayerDelegate
@optional
/// event occurs on Buffering of Video Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Video Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when video buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when video streaming is going on.
/// \param progress current playing time of video.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when video streaming start.
/// \param duration total duration of video.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when video streaming completed.
- (void)onStreamCompleted;
/// event occurs when video is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (video is shared after photo/audio share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused video is played.
- (void)onPlay;
/// event occurs on video pause.
- (void)onPause;
/// event occurs on video stop.
- (void)onStop;
/// event occurs on fast forwarding the video.
- (void)onForward;
/// event occurs on rewind the video.
- (void)onRewind;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on video addition in TV queue(player list).
/// \param enqueuedItem enqueued video item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on video remove from TV queue(player list).
/// \param dequeuedItem dequeued video Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

@class NSStream;

SWIFT_CLASS("_TtC9SmartView9WebSocket")
@interface WebSocket : NSObject <NSStreamDelegate>
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ErrorDomain SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)ErrorDomain SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nonnull callbackQueue SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.callbackQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onDisconnect)(NSError * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onDisconnect' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onText)(NSString * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onText' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onData)(NSData * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onData' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onPong)(NSData * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onPong' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull headers SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.headers' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL voipEnabled SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.voipEnabled' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL disableSSLCertValidation SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.disableSSLCertValidation' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSArray<NSNumber *> * _Nullable enabledSSLCipherSuites SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.enabledSSLCipherSuites' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSString * _Nullable origin SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.origin' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) NSInteger timeout SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.timeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly, copy) NSURL * _Nonnull currentURL SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.currentURL' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Used for setting protocols.
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url protocols:(NSArray<NSString *> * _Nullable)protocols OBJC_DESIGNATED_INITIALIZER SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url writeQueueQOS:(enum NSQualityOfService)writeQueueQOS protocols:(NSArray<NSString *> * _Nullable)protocols SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:writeQueueQOS:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connect to the WebSocket server on a background thread.
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a string to the websocket. This sends it as a text frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param str The string to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithString:(NSString * _Nonnull)string completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(string:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write binary data to the websocket. This sends it as a binary frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param data The data to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithData:(NSData * _Nonnull)data completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(data:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a ping to the websocket. This sends it as a control frame.
/// Yodel a   sound  to the planet.    This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s
- (void)writeWithPing:(NSData * _Nonnull)ping completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(ping:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Delegate for the stream methods. Processes incoming bytes
- (void)stream:(NSStream * _Nonnull)aStream handleEvent:(NSStreamEvent)eventCode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop

#elif defined(__ARM_ARCH_7S__) && __ARM_ARCH_7S__
// Generated by Apple Swift version 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Dispatch;
@import Foundation;
@import ObjectiveC;
@import Security.CipherSuite;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="SmartView",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class Service;
@class ChannelClient;
@protocol ChannelDelegate;
@class NSError;

/// A Channel is a discreet connection where multiple clients can communicate
SWIFT_CLASS("_TtC9SmartView7Channel")
@interface Channel : NSObject
/// The connection status of the channel
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'Channel.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the channel (‘chat’)
@property (nonatomic, readonly, copy) NSString * _Null_unspecified uri SWIFT_DEPRECATED_OBJC("Swift property 'Channel.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// the service that is suplaying the channel connection
@property (nonatomic, readonly, strong) Service * _Null_unspecified service SWIFT_DEPRECATED_OBJC("Swift property 'Channel.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The client that owns this channel instance
@property (nonatomic, strong) ChannelClient * _Null_unspecified me SWIFT_DEPRECATED_OBJC("Swift property 'Channel.me' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nullable completionQueue SWIFT_DEPRECATED_OBJC("Swift property 'Channel.completionQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The delegate for handling channel events
@property (nonatomic, weak) id <ChannelDelegate> _Nullable delegate SWIFT_DEPRECATED_OBJC("Swift property 'Channel.delegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The timeout for channel transport connection.
/// The connection will be closed if no ping is received within the defined timeout
@property (nonatomic) NSTimeInterval connectionTimeout SWIFT_DEPRECATED_OBJC("Swift property 'Channel.connectionTimeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
- (void)disconnect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event with text message payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A snapshot of the list of clients currently connected to the channel
///
/// returns:
/// list of clients currently connected to the channel
- (NSArray<ChannelClient *> * _Nonnull)getClients SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.getClients()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to subscribe for notifications using blocks.
/// \param notificationName The name of the notification.
///
/// \param performClosure The notification closure, which will be executed in the main thread.
/// Make sure to control the ownership of a variables captured by the closure you provide in this parameter
/// (e.g. use [unowned self] or [weak self] to make sure that self is released even if you did not unsubscribe from notification)
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nullable)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.on(_:performClosure:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to unsubscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer SWIFT_DEPRECATED_OBJC("Swift method 'Channel.off(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (void)setSecurityModeWithSecurity:(BOOL)security completionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.setSecurityMode(security:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// An Application represents an application on the TV device.
/// Use this class to control various aspects of the application such as launching the app or getting information
SWIFT_CLASS("_TtC9SmartView11Application")
@interface Application : Channel
/// The id of the channel
@property (nonatomic, readonly, copy) NSString * _Null_unspecified id SWIFT_DEPRECATED_OBJC("Swift property 'Application.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// start arguments
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable args SWIFT_DEPRECATED_OBJC("Swift property 'Application.args' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Bundle Indentifier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull BUNDLE_IDENTIFIER SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)BUNDLE_IDENTIFIER SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// property value library
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PROPERTY_VALUE_LIBRARY SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)PROPERTY_VALUE_LIBRARY SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Retrieves information about the Application on the TV
/// \param completionHandler The callback handler with the status dictionary and an error if any
///
- (void)getInfo:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.getInfo(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Launches the application on the remote device, if the application is already running it returns success = true.
/// If the startOnConnect is set to false this method needs to be called in order to start the application
/// \param completionHandler The callback handler
///
- (void)start:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.start(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Stops the application on the TV
/// \param completionHandler The callback handler
///
- (void)stop:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.stop(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Starts the application install on the TV, this method will fail for cloud applications
/// \param completionHandler The callback handler
///
- (void)install:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.install(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// override channel connect.
/// connects your client with the host TV app
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
/// Disconnects your client with the host TV app
/// \param leaveHostRunning True leaves the TV app running ,False stops the TV app if yours is the last client
///
/// \param completionHandler The callback handler
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and leave the host application running if leaveHostRunning is set to true and you are the last client
/// \param leaveHostRunning True leaves the TV app running False stops the TV app if yours is the last client
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and terminate the host application if you are the last client
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
@end



@protocol ConnectionDelegate;

/// Base class for audio, video and photo player
SWIFT_CLASS("_TtC9SmartView10BasePlayer")
@interface BasePlayer : NSObject
/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
@property (nonatomic, weak) id <ConnectionDelegate> _Nullable connectionDelegate SWIFT_DEPRECATED_OBJC("Swift property 'BasePlayer.connectionDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects to the channel. This method will asynchronously call the delegate’s onDisconnect method and post a
/// ChannelEvent.
/// \param completionHandler callback handler of OnDisconnect
///
- (void)disconnect:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
/// \param screenSaverURL3 Optional Background Image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 screenSaverURL3:(NSURL * _Nullable)screenSaverURL3 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Sets the Watermark for the player
/// \param watermarkUrl Url from where watermark image will be downloaded
///
- (void)setPlayerWatermark:(NSURL * _Nullable)watermarkUrl;
/// Removes Player watermark set
- (void)removePlayerWatermark;
/// Play last sent media contents.
- (void)play;
/// Pause currently playing media.
- (void)pause;
/// Stop currently playing media.
- (void)stop;
/// Mute the volume of player on a connected device.
- (void)mute;
/// UnMute the volume of player on a connected device.
- (void)unMute;
/// Request previous to the player on a connected device.
- (void)previous;
/// Request next to the player on a connected device.
- (void)next;
/// Set volume on device playing media.
/// \param volume Integer value between 0 and 100.
///
- (void)setVolume:(uint8_t)volume;
/// Volume Up.
/// \code
/// increase volume of the player by 1.
///
/// \endcode
- (void)volumeUp;
/// decrease volume of the player by 1.
- (void)volumeDown;
/// get the control status of the player - like volume etc.
- (void)getControlStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol AudioPlayerDelegate;
enum AudioRepeatMode : NSInteger;

/// Audio Player Class handle the Audio share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11AudioPlayer")
@interface AudioPlayer : BasePlayer
/// The Audio Player delegate protocol defines the event methods available for a Audio.
@property (nonatomic, weak) id <AudioPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'AudioPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play Audio content on TV.
/// \param contentURL Audio Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// play Audio content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param albumName Content album name
///
/// \param albumArtUrl Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nullable)albumArtUrl completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum AudioRepeatMode)mode;
/// shuffle player list.
- (void)shuffle;
/// shuffle player list.
- (void)setShuffle:(BOOL)mode;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific audio from player list.
/// \param contentURL Audio URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add Audio item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nonnull)albumArtUrl;
/// Add Audio item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, AudioRepeatMode, closed) {
/// Repeat Off
  AudioRepeatModeRepeatOff = 0,
/// Repeat Single
  AudioRepeatModeRepeatSingle = 1,
/// repeat All
  AudioRepeatModeRepeatAll = 2,
};


SWIFT_PROTOCOL("_TtP9SmartView19AudioPlayerDelegate_")
@protocol AudioPlayerDelegate
@optional
/// event occurs on Buffering of Audio Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Audio Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when audio buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when Audio streaming is going on.
/// \param progress current playing time of Audio.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when Audio streaming start.
/// \param duration total duration of audio.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when Audio streaming completed.
- (void)onStreamCompleted;
/// event occurs when Audio is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Audio is shared after photo/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused audio is played.
- (void)onPlay;
/// event occurs on audio pause.
- (void)onPause;
/// event occurs on audio stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus shuffleStatus:(BOOL)shuffleStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on audio addition in TV queue(player list).
/// \param enqueuedItem enqueued audio item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on audio remove from TV queue(player list).
/// \param dequeuedItem dequeued audio Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs when player list is shuffled.
/// \param status shuffle status(true/false)
///
- (void)onShuffle:(BOOL)status;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end












/// A client currently connected to the channel
SWIFT_CLASS("_TtC9SmartView13ChannelClient")
@interface ChannelClient : NSObject
/// The id of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The time which the client connected in epoch milliseconds
@property (nonatomic, readonly, copy) NSDate * _Nullable connectTime SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.connectTime' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary of attributes passed by the client when connecting
@property (nonatomic, readonly, strong) id _Nullable attributes SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.attributes' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Flag for determining if the client is the host
@property (nonatomic, readonly) BOOL isHost SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.isHost' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class Message;

/// The channel delegate protocol defines the event methods available for a channel
SWIFT_PROTOCOL("_TtP9SmartView15ChannelDelegate_")
@protocol ChannelDelegate
@optional
/// Called when the Channel is connected
/// \param client The Client that just connected to the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the host app is ready to send or receive messages
- (void)onReady;
/// Called when the Channel is disconnected
/// \param client The Client that just disconnected from the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the Channel receives a text message
/// \param message Text message received
///
- (void)onMessage:(Message * _Nonnull)message;
/// Called when the Channel receives a binary data message
/// \param message Text message received
///
/// \param payload Binary payload data
///
- (void)onData:(Message * _Nonnull)message payload:(NSData * _Nonnull)payload;
/// Called when a client connects to the Channel
/// \param client The Client that just connected to the Channel
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// Called when a client disconnects from the Channel
/// \param client The Client that just disconnected from the Channel
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// Called when a Channel Error is fired
/// \param error The error
///
- (void)onError:(NSError * _Nonnull)error;
@end


/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
SWIFT_PROTOCOL("_TtP9SmartView18ConnectionDelegate_")
@protocol ConnectionDelegate
@optional
/// event occur when connection occur with channel.
/// \param error connection error
///
- (void)onConnect:(NSError * _Nullable)error;
/// event occur when Disconnection occur with channel.
/// \param error disconnect error.
///
- (void)onDisconnect:(NSError * _Nullable)error;
/// event occur when other client connects with channel.
/// \param client client info.
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// event occur when other client disconnects with channel.
/// \param client client info.
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// event occur when a Channel Error is fired
/// \param error error.
///
- (void)onError:(NSError * _Nonnull)error;
/// event occur when the host app is ready to send or receive messages
- (void)onReady;
@end


/// This class is wrapper which handle tv media calls.
/// its basic functionality is to launch DMP on TV and whatever notification comes from TV side it passes on to further module.
SWIFT_CLASS("_TtC9SmartView11MediaPlayer")
@interface MediaPlayer : NSObject
/// TV service name
@property (nonatomic, readonly, strong) Service * _Nonnull service SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Application Connection Status with TV.
@property (nonatomic, readonly) BOOL connected SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.connected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@interface MediaPlayer (SWIFT_EXTENSION(SmartView)) <ChannelDelegate>
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(Message * _Nonnull)message;
/// event occur when connection occur with channel
/// <ul>
///   <li>
///     client: The client that is connecting which is yourself
///   </li>
///   <li>
///     error: An error info if connect fails
///   </li>
/// </ul>
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// event occur when disconnection occur with channel.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
- (void)onError:(NSError * _Nonnull)error;
- (void)onReady;
@end


/// This class encapsulates the message that
SWIFT_CLASS("_TtC9SmartView7Message")
@interface Message : NSObject
/// The event name
@property (nonatomic, readonly, copy) NSString * _Null_unspecified event SWIFT_DEPRECATED_OBJC("Swift property 'Message.event' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The publisher of the event
@property (nonatomic, readonly, copy) NSString * _Null_unspecified from SWIFT_DEPRECATED_OBJC("Swift property 'Message.from' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary containig the message
@property (nonatomic, readonly, strong) id _Nullable data SWIFT_DEPRECATED_OBJC("Swift property 'Message.data' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol PhotoPlayerDelegate;

/// Photo Player Class handle the Photo share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11PhotoPlayer")
@interface PhotoPlayer : BasePlayer
/// The Photo Player delegate protocol defines the event methods available for a Photo.
@property (nonatomic, weak) id <PhotoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'PhotoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play image content on TV.
/// \param contentURL image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play image content on TV.
/// \param contentURL image URL
///
/// \param title image Title
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// sets background audio in slide show.
/// \param contentURL Background audio contentURL.
///
- (void)setBackgroundMusic:(NSURL * _Nonnull)contentURL;
/// stops background audio in slide show.
- (void)stopBackgroundMusic;
/// resumes TV widget/application from background process.
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific image from player list.
/// \param contentURL image URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// add image to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl Album Art URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title;
/// add Photo item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end


/// The Photo Player delegate protocol defines the event methods available for a Photo.
SWIFT_PROTOCOL("_TtP9SmartView19PhotoPlayerDelegate_")
@protocol PhotoPlayerDelegate
@optional
/// event occurs when Photo is shared with TV for the first time or after audio/video share.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Photo is shared after audio/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused photo player list is played.
- (void)onPlay;
/// event occurs on photo player list pause.
- (void)onPause;
/// event occurs on photo player list stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on photo(image) addition in TV queue(player list).
/// \param enqueuedItem enqueued photo item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on photo remove from TV queue(player list).
/// \param dequeuedItem dequeued photo item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// occurs when new photo is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

enum ServiceSearchDiscoveryType : NSInteger;
@class VideoPlayer;
@class ServiceSearch;

/// A Service instance represents the multiscreen service root on the remote device
/// Use the class to control top level services of the device
SWIFT_CLASS("_TtC9SmartView7Service")
@interface Service : NSObject
/// Discovery Type LAN/BLE
@property (nonatomic, readonly) enum ServiceSearchDiscoveryType discoveryType SWIFT_DEPRECATED_OBJC("Swift property 'Service.discoveryType' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The id of the service
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'Service.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the service (http://<ip>:<port>/api/v2/)
@property (nonatomic, readonly, copy) NSString * _Nonnull uri SWIFT_DEPRECATED_OBJC("Swift property 'Service.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The name of the service (Living Room TV)
@property (nonatomic, readonly, copy) NSString * _Nonnull name SWIFT_DEPRECATED_OBJC("Swift property 'Service.name' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The version of the service (x.x.x)
@property (nonatomic, readonly, copy) NSString * _Nonnull version SWIFT_DEPRECATED_OBJC("Swift property 'Service.version' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The type of the service (Samsung SmartTV)
@property (nonatomic, readonly, copy) NSString * _Nonnull type SWIFT_DEPRECATED_OBJC("Swift property 'Service.type' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The service description
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
/// This asynchronously method retrieves a dictionary of additional information about the device the service is running on
/// \param timeout timeout
///
/// \param completionHandler A block to handle the response dictionary
/// <ul>
///   <li>
///     deviceInfo: The device info dictionary
///   </li>
///   <li>
///     error: An error info if getDeviceInfo failed
///   </li>
/// </ul>
///
- (void)getDeviceInfo:(NSInteger)timeout completionHandler:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getDeviceInfo(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates an application instance belonging to that service
/// \param id The id of the application
/// <ul>
///   <li>
///     For an installed application this is the string id as provided by Samsung, If your TV app is still in development, you can use the folder name of your app as the id. Once the TV app has been released into Samsung Apps, you must use the supplied app id.`
///   </li>
///   <li>
///     For a cloud application this is the application’s URL
///   </li>
/// </ul>
///
/// \param channelURI The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
/// \param args A dictionary of command line aruguments to be passed to the Host TV App
///
///
/// returns:
/// An Application instance or nil if application id or channel id is empty
- (Application * _Nullable)createApplication:(id _Nonnull)id channelURI:(NSString * _Nonnull)channelURI args:(NSDictionary<NSString *, id> * _Nullable)args SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createApplication(_:channelURI:args:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a channel instance belonging to that service (“mychannel”)
/// \param ` The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
///
/// returns:
/// A Channel instance
- (Channel * _Nonnull)createChannel:(NSString * _Nonnull)channelURI SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createChannel(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates video player instance
/// \param appName 
///
///
/// returns:
/// VideoPlayer instance
- (VideoPlayer * _Nonnull)createVideoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createVideoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates audio player instance
/// \param appName 
///
///
/// returns:
/// AudioPlayer instance
- (AudioPlayer * _Nonnull)createAudioPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createAudioPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates photo player instance
/// \param appName 
///
///
/// returns:
/// PhotoPlayer instance
- (PhotoPlayer * _Nonnull)createPhotoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createPhotoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a service search object
///
/// returns:
/// An instance of ServiceSearch
+ (ServiceSearch * _Nonnull)search SWIFT_WARN_UNUSED_RESULT;
/// This asynchronous method retrieves a service instance given a service URI
/// \param uri The uri of the service
///
/// \param timeOut 
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     timeout: The timeout for the request
///   </li>
///   <li>
///     error: An error info if getByURI fails
///   </li>
/// </ul>
///
+ (void)getByURI:(NSString * _Nonnull)uri timeout:(NSTimeInterval)timeout completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getByURI(_:timeout:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// This asynchronous method retrieves a service instance given a service id
/// \param id The id of the service
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     error: An error info if getById fails
///   </li>
/// </ul>
///
+ (void)getById:(NSString * _Nonnull)id completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getById(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet for WakeOnWirelessLan.
/// \param macAddr Mac Address of TV
///
+ (void)WakeOnWirelessLan:(NSString * _Nonnull)macAddr SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessLan(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param timeOut timeout to wakeup
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri timeOut:(NSTimeInterval)timeOut completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:timeOut:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (void)isSecurityModeSupportedWithCompletionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.isSecurityModeSupported(completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Tries to Remove the standby service from the DB
- (void)remove SWIFT_DEPRECATED_OBJC("Swift method 'Service.remove()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Checks whether DMP is supported by the Service or not.
/// <ul>
///   <li>
///     returns Bool: True if DMP is supported
///   </li>
/// </ul>
- (BOOL)isDMPSupported SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.isDMPSupported()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



@protocol ServiceSearchDelegate;

/// This class searches the local network for compatible multiscreen services
SWIFT_CLASS("_TtC9SmartView13ServiceSearch")
@interface ServiceSearch : NSObject
/// Set a delegate to receive search events.
@property (nonatomic, weak) id <ServiceSearchDelegate> _Nullable delegate;
/// The search status
@property (nonatomic, readonly) BOOL isSearching;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// request for TV list found on Network/BLE.
///
/// returns:
/// returns TV List.
- (NSArray<Service *> * _Nonnull)getServices SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to suscribe for notifications using blocks
/// \param notificationName The name of the notification
///
/// \param performClosure The notification block, this block will be executed in the main thread
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nonnull)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to unsuscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer;
/// Start searching for devices
- (void)start;
/// Start searching for devices, overloaded function
/// \param showStandByTv false if Standby devices not to be shown
///
- (void)start:(BOOL)showStandByTv;
/// check bluetooth searching is on or off
///
/// returns:
/// true if bluetooth discovery on otherwise false
- (BOOL)isSearchingBLE SWIFT_WARN_UNUSED_RESULT;
/// Start BLE Search Process
///
/// returns:
/// returns ‘True’ if using BLE otherwise ‘False’
- (BOOL)startUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stop BLE Search Process
///
/// returns:
/// True
- (BOOL)stopUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stops the Device discovery.
- (void)stop;
/// Returns what status is set to StandbyMode.
/// <ul>
///   <li>
///     returns Bool: true if standby devices are shown
///   </li>
/// </ul>
- (BOOL)getStandByMode SWIFT_WARN_UNUSED_RESULT;
@end






@interface ServiceSearch (SWIFT_EXTENSION(SmartView))
/// Clear the standby devices from the DB
/// \param None No parameter required
///
- (void)clearStandbyDevices;
@end


/// This protocol defines the methods for ServiceSearch discovery
SWIFT_PROTOCOL("_TtP9SmartView21ServiceSearchDelegate_")
@protocol ServiceSearchDelegate
@optional
/// The ServiceSearch will call this delegate method when a service is found
/// \param service The found service
///
- (void)onServiceFound:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method when a service is lost
/// \param service The lost service
///
- (void)onServiceLost:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method after stopping the search
- (void)onStop;
/// The ServiceSearch will call this delegate method after the search has started
- (void)onStart;
/// If BLE device is found
/// \param NameOfTV Name of TV found on Bluetooth
///
- (void)onFoundOnlyBLE:(NSString * _Nonnull)NameOfTV;
/// Find other network (other than BLE)
/// \param NameOfTV Name of TV found on Network
///
- (void)onFoundOtherNetwork:(NSString * _Nonnull)NameOfTV;
@end

/// Describe Service Search DiscoveryType
typedef SWIFT_ENUM(NSInteger, ServiceSearchDiscoveryType, closed) {
/// LAN type
  ServiceSearchDiscoveryTypeLAN = 0,
/// Cloud Type
  ServiceSearchDiscoveryTypeCLOUD = 1,
};

@protocol VideoPlayerDelegate;
enum VideoRepeatMode : NSInteger;

/// Video Player Class handle the Video share, control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11VideoPlayer")
@interface VideoPlayer : BasePlayer
/// The Video Player delegate protocol defines the event methods available for a Video.
@property (nonatomic, weak) id <VideoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'VideoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play video content on TV.
/// \param contentURL video Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play video content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param thumbnailURL Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nullable)thumbnailURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// This method sends request to player for fast forwarding the video.
- (void)forward;
/// This method sends request to player for rewind the video.
- (void)rewind;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum VideoRepeatMode)mode;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific video content from player list.
/// \param contentURL video URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add video item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param thumbnailURL thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nonnull)thumbnailURL;
/// Add video item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, VideoRepeatMode, closed) {
/// Repeat Off
  VideoRepeatModeRepeatOff = 0,
/// Repeat Single
  VideoRepeatModeRepeatSingle = 1,
/// repeat All
  VideoRepeatModeRepeatAll = 2,
};


/// The Video Player delegate protocol defines the event methods available for a Video.
SWIFT_PROTOCOL("_TtP9SmartView19VideoPlayerDelegate_")
@protocol VideoPlayerDelegate
@optional
/// event occurs on Buffering of Video Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Video Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when video buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when video streaming is going on.
/// \param progress current playing time of video.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when video streaming start.
/// \param duration total duration of video.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when video streaming completed.
- (void)onStreamCompleted;
/// event occurs when video is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (video is shared after photo/audio share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused video is played.
- (void)onPlay;
/// event occurs on video pause.
- (void)onPause;
/// event occurs on video stop.
- (void)onStop;
/// event occurs on fast forwarding the video.
- (void)onForward;
/// event occurs on rewind the video.
- (void)onRewind;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on video addition in TV queue(player list).
/// \param enqueuedItem enqueued video item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on video remove from TV queue(player list).
/// \param dequeuedItem dequeued video Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

@class NSStream;

SWIFT_CLASS("_TtC9SmartView9WebSocket")
@interface WebSocket : NSObject <NSStreamDelegate>
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ErrorDomain SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)ErrorDomain SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nonnull callbackQueue SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.callbackQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onDisconnect)(NSError * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onDisconnect' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onText)(NSString * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onText' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onData)(NSData * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onData' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onPong)(NSData * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onPong' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull headers SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.headers' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL voipEnabled SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.voipEnabled' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL disableSSLCertValidation SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.disableSSLCertValidation' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSArray<NSNumber *> * _Nullable enabledSSLCipherSuites SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.enabledSSLCipherSuites' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSString * _Nullable origin SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.origin' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) NSInteger timeout SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.timeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly, copy) NSURL * _Nonnull currentURL SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.currentURL' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Used for setting protocols.
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url protocols:(NSArray<NSString *> * _Nullable)protocols OBJC_DESIGNATED_INITIALIZER SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url writeQueueQOS:(enum NSQualityOfService)writeQueueQOS protocols:(NSArray<NSString *> * _Nullable)protocols SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:writeQueueQOS:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connect to the WebSocket server on a background thread.
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a string to the websocket. This sends it as a text frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param str The string to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithString:(NSString * _Nonnull)string completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(string:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write binary data to the websocket. This sends it as a binary frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param data The data to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithData:(NSData * _Nonnull)data completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(data:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a ping to the websocket. This sends it as a control frame.
/// Yodel a   sound  to the planet.    This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s
- (void)writeWithPing:(NSData * _Nonnull)ping completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(ping:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Delegate for the stream methods. Processes incoming bytes
- (void)stream:(NSStream * _Nonnull)aStream handleEvent:(NSStreamEvent)eventCode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop

#elif defined(__ARM_ARCH_7A__) && __ARM_ARCH_7A__
// Generated by Apple Swift version 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Dispatch;
@import Foundation;
@import ObjectiveC;
@import Security.CipherSuite;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="SmartView",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class Service;
@class ChannelClient;
@protocol ChannelDelegate;
@class NSError;

/// A Channel is a discreet connection where multiple clients can communicate
SWIFT_CLASS("_TtC9SmartView7Channel")
@interface Channel : NSObject
/// The connection status of the channel
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'Channel.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the channel (‘chat’)
@property (nonatomic, readonly, copy) NSString * _Null_unspecified uri SWIFT_DEPRECATED_OBJC("Swift property 'Channel.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// the service that is suplaying the channel connection
@property (nonatomic, readonly, strong) Service * _Null_unspecified service SWIFT_DEPRECATED_OBJC("Swift property 'Channel.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The client that owns this channel instance
@property (nonatomic, strong) ChannelClient * _Null_unspecified me SWIFT_DEPRECATED_OBJC("Swift property 'Channel.me' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nullable completionQueue SWIFT_DEPRECATED_OBJC("Swift property 'Channel.completionQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The delegate for handling channel events
@property (nonatomic, weak) id <ChannelDelegate> _Nullable delegate SWIFT_DEPRECATED_OBJC("Swift property 'Channel.delegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The timeout for channel transport connection.
/// The connection will be closed if no ping is received within the defined timeout
@property (nonatomic) NSTimeInterval connectionTimeout SWIFT_DEPRECATED_OBJC("Swift property 'Channel.connectionTimeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connects to the channel. This method will asynchronously call the delegate’s onConnect method and post a
/// ChannelEvent.Connect notification upon completion.
/// When a TV application connects to this channel, the onReady method/notification is also fired
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.connect(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects from the channel. This method will asynchronously call the delegate’s onDisconnect and post a
/// ChannelEvent.Disconnect notification upon completion.
- (void)disconnect SWIFT_DEPRECATED_OBJC("Swift method 'Channel.disconnect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event with text message payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Publish an event containing a text message and binary payload to one or more targets
/// \param event The event name
///
/// \param message A JSON serializable message object
///
/// \param data Any binary data to send with the message
///
/// \param target The target recipient(s) of the message.Can be a string client id, a collection of ids or a string MessageTarget (like MessageTarget.All.rawValue)
///
- (void)publishWithEvent:(NSString * _Nonnull)event message:(id _Nullable)message data:(NSData * _Nonnull)data target:(id _Nonnull)target SWIFT_DEPRECATED_OBJC("Swift method 'Channel.publish(event:message:data:target:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A snapshot of the list of clients currently connected to the channel
///
/// returns:
/// list of clients currently connected to the channel
- (NSArray<ChannelClient *> * _Nonnull)getClients SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.getClients()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to subscribe for notifications using blocks.
/// \param notificationName The name of the notification.
///
/// \param performClosure The notification closure, which will be executed in the main thread.
/// Make sure to control the ownership of a variables captured by the closure you provide in this parameter
/// (e.g. use [unowned self] or [weak self] to make sure that self is released even if you did not unsubscribe from notification)
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nullable)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Channel.on(_:performClosure:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A convenience method to unsubscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer SWIFT_DEPRECATED_OBJC("Swift method 'Channel.off(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (void)setSecurityModeWithSecurity:(BOOL)security completionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Channel.setSecurityMode(security:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// An Application represents an application on the TV device.
/// Use this class to control various aspects of the application such as launching the app or getting information
SWIFT_CLASS("_TtC9SmartView11Application")
@interface Application : Channel
/// The id of the channel
@property (nonatomic, readonly, copy) NSString * _Null_unspecified id SWIFT_DEPRECATED_OBJC("Swift property 'Application.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// start arguments
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable args SWIFT_DEPRECATED_OBJC("Swift property 'Application.args' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Bundle Indentifier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull BUNDLE_IDENTIFIER SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)BUNDLE_IDENTIFIER SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.BUNDLE_IDENTIFIER' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// property value library
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PROPERTY_VALUE_LIBRARY SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)PROPERTY_VALUE_LIBRARY SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'Application.PROPERTY_VALUE_LIBRARY' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Retrieves information about the Application on the TV
/// \param completionHandler The callback handler with the status dictionary and an error if any
///
- (void)getInfo:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.getInfo(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Launches the application on the remote device, if the application is already running it returns success = true.
/// If the startOnConnect is set to false this method needs to be called in order to start the application
/// \param completionHandler The callback handler
///
- (void)start:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.start(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Stops the application on the TV
/// \param completionHandler The callback handler
///
- (void)stop:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.stop(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Starts the application install on the TV, this method will fail for cloud applications
/// \param completionHandler The callback handler
///
- (void)install:(void (^ _Nullable)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.install(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// override channel connect.
/// connects your client with the host TV app
/// \param attributes Any attributes you want to associate with the client (ie. [“name”:“FooBar”])
///
/// \param completionHandler The callback handler
///
- (void)connect:(NSDictionary<NSString *, NSString *> * _Nullable)attributes completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
/// Disconnects your client with the host TV app
/// \param leaveHostRunning True leaves the TV app running ,False stops the TV app if yours is the last client
///
/// \param completionHandler The callback handler
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and leave the host application running if leaveHostRunning is set to true and you are the last client
/// \param leaveHostRunning True leaves the TV app running False stops the TV app if yours is the last client
///
- (void)disconnectWithLeaveHostRunning:(BOOL)leaveHostRunning SWIFT_DEPRECATED_OBJC("Swift method 'Application.disconnect(leaveHostRunning:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnect from the channel and terminate the host application if you are the last client
/// \param completionHandler The callback handler
///
- (void)disconnect:(void (^ _Nullable)(ChannelClient * _Nullable, NSError * _Nullable))completionHandler;
@end



@protocol ConnectionDelegate;

/// Base class for audio, video and photo player
SWIFT_CLASS("_TtC9SmartView10BasePlayer")
@interface BasePlayer : NSObject
/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
@property (nonatomic, weak) id <ConnectionDelegate> _Nullable connectionDelegate SWIFT_DEPRECATED_OBJC("Swift property 'BasePlayer.connectionDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Disconnects to the channel. This method will asynchronously call the delegate’s onDisconnect method and post a
/// ChannelEvent.
/// \param completionHandler callback handler of OnDisconnect
///
- (void)disconnect:(BOOL)leaveHostRunning completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// connects to the DMP standby screen with provides functionality to launch with Logo or upto three Background images
/// \param screenSaverURL1 Optional Background Image Url
///
/// \param screenSaverURL2 Optional Background Image Url
///
/// \param screenSaverURL3 Optional Background Image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)standbyConnect:(NSURL * _Nullable)screenSaverURL1 screenSaverURL2:(NSURL * _Nullable)screenSaverURL2 screenSaverURL3:(NSURL * _Nullable)screenSaverURL3 completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Sets the Watermark for the player
/// \param watermarkUrl Url from where watermark image will be downloaded
///
- (void)setPlayerWatermark:(NSURL * _Nullable)watermarkUrl;
/// Removes Player watermark set
- (void)removePlayerWatermark;
/// Play last sent media contents.
- (void)play;
/// Pause currently playing media.
- (void)pause;
/// Stop currently playing media.
- (void)stop;
/// Mute the volume of player on a connected device.
- (void)mute;
/// UnMute the volume of player on a connected device.
- (void)unMute;
/// Request previous to the player on a connected device.
- (void)previous;
/// Request next to the player on a connected device.
- (void)next;
/// Set volume on device playing media.
/// \param volume Integer value between 0 and 100.
///
- (void)setVolume:(uint8_t)volume;
/// Volume Up.
/// \code
/// increase volume of the player by 1.
///
/// \endcode
- (void)volumeUp;
/// decrease volume of the player by 1.
- (void)volumeDown;
/// get the control status of the player - like volume etc.
- (void)getControlStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol AudioPlayerDelegate;
enum AudioRepeatMode : NSInteger;

/// Audio Player Class handle the Audio share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11AudioPlayer")
@interface AudioPlayer : BasePlayer
/// The Audio Player delegate protocol defines the event methods available for a Audio.
@property (nonatomic, weak) id <AudioPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'AudioPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play Audio content on TV.
/// \param contentURL Audio Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// play Audio content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param albumName Content album name
///
/// \param albumArtUrl Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nullable)albumArtUrl completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum AudioRepeatMode)mode;
/// shuffle player list.
- (void)shuffle;
/// shuffle player list.
- (void)setShuffle:(BOOL)mode;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific audio from player list.
/// \param contentURL Audio URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add Audio item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title albumName:(NSString * _Nonnull)albumName albumArtUrl:(NSURL * _Nonnull)albumArtUrl;
/// Add Audio item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, AudioRepeatMode, closed) {
/// Repeat Off
  AudioRepeatModeRepeatOff = 0,
/// Repeat Single
  AudioRepeatModeRepeatSingle = 1,
/// repeat All
  AudioRepeatModeRepeatAll = 2,
};


SWIFT_PROTOCOL("_TtP9SmartView19AudioPlayerDelegate_")
@protocol AudioPlayerDelegate
@optional
/// event occurs on Buffering of Audio Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Audio Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when audio buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when Audio streaming is going on.
/// \param progress current playing time of Audio.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when Audio streaming start.
/// \param duration total duration of audio.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when Audio streaming completed.
- (void)onStreamCompleted;
/// event occurs when Audio is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Audio is shared after photo/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused audio is played.
- (void)onPlay;
/// event occurs on audio pause.
- (void)onPause;
/// event occurs on audio stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus shuffleStatus:(BOOL)shuffleStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on audio addition in TV queue(player list).
/// \param enqueuedItem enqueued audio item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on audio remove from TV queue(player list).
/// \param dequeuedItem dequeued audio Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs when player list is shuffled.
/// \param status shuffle status(true/false)
///
- (void)onShuffle:(BOOL)status;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end












/// A client currently connected to the channel
SWIFT_CLASS("_TtC9SmartView13ChannelClient")
@interface ChannelClient : NSObject
/// The id of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The time which the client connected in epoch milliseconds
@property (nonatomic, readonly, copy) NSDate * _Nullable connectTime SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.connectTime' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary of attributes passed by the client when connecting
@property (nonatomic, readonly, strong) id _Nullable attributes SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.attributes' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Flag for determining if the client is the host
@property (nonatomic, readonly) BOOL isHost SWIFT_DEPRECATED_OBJC("Swift property 'ChannelClient.isHost' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The description of the client
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class Message;

/// The channel delegate protocol defines the event methods available for a channel
SWIFT_PROTOCOL("_TtP9SmartView15ChannelDelegate_")
@protocol ChannelDelegate
@optional
/// Called when the Channel is connected
/// \param client The Client that just connected to the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the host app is ready to send or receive messages
- (void)onReady;
/// Called when the Channel is disconnected
/// \param client The Client that just disconnected from the Channel
///
/// \param error An error info if any
///
/// \param error An error info if any
///
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// Called when the Channel receives a text message
/// \param message Text message received
///
- (void)onMessage:(Message * _Nonnull)message;
/// Called when the Channel receives a binary data message
/// \param message Text message received
///
/// \param payload Binary payload data
///
- (void)onData:(Message * _Nonnull)message payload:(NSData * _Nonnull)payload;
/// Called when a client connects to the Channel
/// \param client The Client that just connected to the Channel
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// Called when a client disconnects from the Channel
/// \param client The Client that just disconnected from the Channel
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// Called when a Channel Error is fired
/// \param error The error
///
- (void)onError:(NSError * _Nonnull)error;
@end


/// The Connection delegate protocol defines the event methods available for channel Connection/DisConnection.
SWIFT_PROTOCOL("_TtP9SmartView18ConnectionDelegate_")
@protocol ConnectionDelegate
@optional
/// event occur when connection occur with channel.
/// \param error connection error
///
- (void)onConnect:(NSError * _Nullable)error;
/// event occur when Disconnection occur with channel.
/// \param error disconnect error.
///
- (void)onDisconnect:(NSError * _Nullable)error;
/// event occur when other client connects with channel.
/// \param client client info.
///
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
/// event occur when other client disconnects with channel.
/// \param client client info.
///
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
/// event occur when a Channel Error is fired
/// \param error error.
///
- (void)onError:(NSError * _Nonnull)error;
/// event occur when the host app is ready to send or receive messages
- (void)onReady;
@end


/// This class is wrapper which handle tv media calls.
/// its basic functionality is to launch DMP on TV and whatever notification comes from TV side it passes on to further module.
SWIFT_CLASS("_TtC9SmartView11MediaPlayer")
@interface MediaPlayer : NSObject
/// TV service name
@property (nonatomic, readonly, strong) Service * _Nonnull service SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.service' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Application Connection Status with TV.
@property (nonatomic, readonly) BOOL connected SWIFT_DEPRECATED_OBJC("Swift property 'MediaPlayer.connected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@interface MediaPlayer (SWIFT_EXTENSION(SmartView)) <ChannelDelegate>
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(Message * _Nonnull)message;
/// event occur when connection occur with channel
/// <ul>
///   <li>
///     client: The client that is connecting which is yourself
///   </li>
///   <li>
///     error: An error info if connect fails
///   </li>
/// </ul>
- (void)onConnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
/// event occur when disconnection occur with channel.
/// <ul>
///   <li>
///     client: The client that is disconnecting which is yourself
///   </li>
///   <li>
///     error: An error info if disconnect fails
///   </li>
/// </ul>
- (void)onDisconnect:(ChannelClient * _Nullable)client error:(NSError * _Nullable)error;
- (void)onClientConnect:(ChannelClient * _Nonnull)client;
- (void)onClientDisconnect:(ChannelClient * _Nonnull)client;
- (void)onError:(NSError * _Nonnull)error;
- (void)onReady;
@end


/// This class encapsulates the message that
SWIFT_CLASS("_TtC9SmartView7Message")
@interface Message : NSObject
/// The event name
@property (nonatomic, readonly, copy) NSString * _Null_unspecified event SWIFT_DEPRECATED_OBJC("Swift property 'Message.event' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The publisher of the event
@property (nonatomic, readonly, copy) NSString * _Null_unspecified from SWIFT_DEPRECATED_OBJC("Swift property 'Message.from' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// A dictionary containig the message
@property (nonatomic, readonly, strong) id _Nullable data SWIFT_DEPRECATED_OBJC("Swift property 'Message.data' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol PhotoPlayerDelegate;

/// Photo Player Class handle the Photo share,control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11PhotoPlayer")
@interface PhotoPlayer : BasePlayer
/// The Photo Player delegate protocol defines the event methods available for a Photo.
@property (nonatomic, weak) id <PhotoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'PhotoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play image content on TV.
/// \param contentURL image Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play image content on TV.
/// \param contentURL image URL
///
/// \param title image Title
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// sets background audio in slide show.
/// \param contentURL Background audio contentURL.
///
- (void)setBackgroundMusic:(NSURL * _Nonnull)contentURL;
/// stops background audio in slide show.
- (void)stopBackgroundMusic;
/// resumes TV widget/application from background process.
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific image from player list.
/// \param contentURL image URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// add image to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param albumName Album NAme
///
/// \param albumArtUrl Album Art URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title;
/// add Photo item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end


/// The Photo Player delegate protocol defines the event methods available for a Photo.
SWIFT_PROTOCOL("_TtP9SmartView19PhotoPlayerDelegate_")
@protocol PhotoPlayerDelegate
@optional
/// event occurs when Photo is shared with TV for the first time or after audio/video share.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (Photo is shared after audio/video share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused photo player list is played.
- (void)onPlay;
/// event occurs on photo player list pause.
- (void)onPause;
/// event occurs on photo player list stop.
- (void)onStop;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on photo(image) addition in TV queue(player list).
/// \param enqueuedItem enqueued photo item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on photo remove from TV queue(player list).
/// \param dequeuedItem dequeued photo item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// occurs when new photo is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

enum ServiceSearchDiscoveryType : NSInteger;
@class VideoPlayer;
@class ServiceSearch;

/// A Service instance represents the multiscreen service root on the remote device
/// Use the class to control top level services of the device
SWIFT_CLASS("_TtC9SmartView7Service")
@interface Service : NSObject
/// Discovery Type LAN/BLE
@property (nonatomic, readonly) enum ServiceSearchDiscoveryType discoveryType SWIFT_DEPRECATED_OBJC("Swift property 'Service.discoveryType' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The id of the service
@property (nonatomic, readonly, copy) NSString * _Nonnull id SWIFT_DEPRECATED_OBJC("Swift property 'Service.id' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The uri of the service (http://<ip>:<port>/api/v2/)
@property (nonatomic, readonly, copy) NSString * _Nonnull uri SWIFT_DEPRECATED_OBJC("Swift property 'Service.uri' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The name of the service (Living Room TV)
@property (nonatomic, readonly, copy) NSString * _Nonnull name SWIFT_DEPRECATED_OBJC("Swift property 'Service.name' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The version of the service (x.x.x)
@property (nonatomic, readonly, copy) NSString * _Nonnull version SWIFT_DEPRECATED_OBJC("Swift property 'Service.version' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The type of the service (Samsung SmartTV)
@property (nonatomic, readonly, copy) NSString * _Nonnull type SWIFT_DEPRECATED_OBJC("Swift property 'Service.type' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// The service description
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
/// This asynchronously method retrieves a dictionary of additional information about the device the service is running on
/// \param timeout timeout
///
/// \param completionHandler A block to handle the response dictionary
/// <ul>
///   <li>
///     deviceInfo: The device info dictionary
///   </li>
///   <li>
///     error: An error info if getDeviceInfo failed
///   </li>
/// </ul>
///
- (void)getDeviceInfo:(NSInteger)timeout completionHandler:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getDeviceInfo(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates an application instance belonging to that service
/// \param id The id of the application
/// <ul>
///   <li>
///     For an installed application this is the string id as provided by Samsung, If your TV app is still in development, you can use the folder name of your app as the id. Once the TV app has been released into Samsung Apps, you must use the supplied app id.`
///   </li>
///   <li>
///     For a cloud application this is the application’s URL
///   </li>
/// </ul>
///
/// \param channelURI The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
/// \param args A dictionary of command line aruguments to be passed to the Host TV App
///
///
/// returns:
/// An Application instance or nil if application id or channel id is empty
- (Application * _Nullable)createApplication:(id _Nonnull)id channelURI:(NSString * _Nonnull)channelURI args:(NSDictionary<NSString *, id> * _Nullable)args SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createApplication(_:channelURI:args:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a channel instance belonging to that service (“mychannel”)
/// \param ` The uri of the Channel (“com.samsung.multiscreen.helloworld”)
///
///
/// returns:
/// A Channel instance
- (Channel * _Nonnull)createChannel:(NSString * _Nonnull)channelURI SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createChannel(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates video player instance
/// \param appName 
///
///
/// returns:
/// VideoPlayer instance
- (VideoPlayer * _Nonnull)createVideoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createVideoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates audio player instance
/// \param appName 
///
///
/// returns:
/// AudioPlayer instance
- (AudioPlayer * _Nonnull)createAudioPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createAudioPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates photo player instance
/// \param appName 
///
///
/// returns:
/// PhotoPlayer instance
- (PhotoPlayer * _Nonnull)createPhotoPlayer:(NSString * _Nonnull)appName SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.createPhotoPlayer(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Creates a service search object
///
/// returns:
/// An instance of ServiceSearch
+ (ServiceSearch * _Nonnull)search SWIFT_WARN_UNUSED_RESULT;
/// This asynchronous method retrieves a service instance given a service URI
/// \param uri The uri of the service
///
/// \param timeOut 
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     timeout: The timeout for the request
///   </li>
///   <li>
///     error: An error info if getByURI fails
///   </li>
/// </ul>
///
+ (void)getByURI:(NSString * _Nonnull)uri timeout:(NSTimeInterval)timeout completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getByURI(_:timeout:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// This asynchronous method retrieves a service instance given a service id
/// \param id The id of the service
///
/// \param completionHandler The completion handler with the service instance or an error
/// <ul>
///   <li>
///     service: The service instance
///   </li>
///   <li>
///     error: An error info if getById fails
///   </li>
/// </ul>
///
+ (void)getById:(NSString * _Nonnull)id completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.getById(_:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet for WakeOnWirelessLan.
/// \param macAddr Mac Address of TV
///
+ (void)WakeOnWirelessLan:(NSString * _Nonnull)macAddr SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessLan(_:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Send a packet via WakeOnWirelessLan and create and connect to particular appilcation
/// \param macAddr Mac Address of TV
///
/// \param uri The uri of service
///
/// \param timeOut timeout to wakeup
///
/// \param service The service instance
///
/// \param error An error info if getByURI fails
///
+ (void)WakeOnWirelessAndConnect:(NSString * _Nonnull)macAddr uri:(NSString * _Nonnull)uri timeOut:(NSTimeInterval)timeOut completionHandler:(void (^ _Nonnull)(Service * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.WakeOnWirelessAndConnect(_:uri:timeOut:completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (void)isSecurityModeSupportedWithCompletionHandler:(void (^ _Nonnull)(BOOL, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_OBJC("Swift method 'Service.isSecurityModeSupported(completionHandler:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Tries to Remove the standby service from the DB
- (void)remove SWIFT_DEPRECATED_OBJC("Swift method 'Service.remove()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Checks whether DMP is supported by the Service or not.
/// <ul>
///   <li>
///     returns Bool: True if DMP is supported
///   </li>
/// </ul>
- (BOOL)isDMPSupported SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift method 'Service.isDMPSupported()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



@protocol ServiceSearchDelegate;

/// This class searches the local network for compatible multiscreen services
SWIFT_CLASS("_TtC9SmartView13ServiceSearch")
@interface ServiceSearch : NSObject
/// Set a delegate to receive search events.
@property (nonatomic, weak) id <ServiceSearchDelegate> _Nullable delegate;
/// The search status
@property (nonatomic, readonly) BOOL isSearching;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// request for TV list found on Network/BLE.
///
/// returns:
/// returns TV List.
- (NSArray<Service *> * _Nonnull)getServices SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to suscribe for notifications using blocks
/// \param notificationName The name of the notification
///
/// \param performClosure The notification block, this block will be executed in the main thread
///
///
/// returns:
/// An observer handler for removing/unsubscribing the block from notifications
- (id _Nonnull)on:(NSString * _Nonnull)notificationName performClosure:(void (^ _Nonnull)(NSNotification * _Nullable))performClosure SWIFT_WARN_UNUSED_RESULT;
/// A convenience method to unsuscribe from notifications
/// \param observer The observer object to unregister observations
///
- (void)off:(id _Nonnull)observer;
/// Start searching for devices
- (void)start;
/// Start searching for devices, overloaded function
/// \param showStandByTv false if Standby devices not to be shown
///
- (void)start:(BOOL)showStandByTv;
/// check bluetooth searching is on or off
///
/// returns:
/// true if bluetooth discovery on otherwise false
- (BOOL)isSearchingBLE SWIFT_WARN_UNUSED_RESULT;
/// Start BLE Search Process
///
/// returns:
/// returns ‘True’ if using BLE otherwise ‘False’
- (BOOL)startUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stop BLE Search Process
///
/// returns:
/// True
- (BOOL)stopUsingBLE SWIFT_WARN_UNUSED_RESULT;
/// Stops the Device discovery.
- (void)stop;
/// Returns what status is set to StandbyMode.
/// <ul>
///   <li>
///     returns Bool: true if standby devices are shown
///   </li>
/// </ul>
- (BOOL)getStandByMode SWIFT_WARN_UNUSED_RESULT;
@end






@interface ServiceSearch (SWIFT_EXTENSION(SmartView))
/// Clear the standby devices from the DB
/// \param None No parameter required
///
- (void)clearStandbyDevices;
@end


/// This protocol defines the methods for ServiceSearch discovery
SWIFT_PROTOCOL("_TtP9SmartView21ServiceSearchDelegate_")
@protocol ServiceSearchDelegate
@optional
/// The ServiceSearch will call this delegate method when a service is found
/// \param service The found service
///
- (void)onServiceFound:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method when a service is lost
/// \param service The lost service
///
- (void)onServiceLost:(Service * _Nonnull)service;
/// The ServiceSearch will call this delegate method after stopping the search
- (void)onStop;
/// The ServiceSearch will call this delegate method after the search has started
- (void)onStart;
/// If BLE device is found
/// \param NameOfTV Name of TV found on Bluetooth
///
- (void)onFoundOnlyBLE:(NSString * _Nonnull)NameOfTV;
/// Find other network (other than BLE)
/// \param NameOfTV Name of TV found on Network
///
- (void)onFoundOtherNetwork:(NSString * _Nonnull)NameOfTV;
@end

/// Describe Service Search DiscoveryType
typedef SWIFT_ENUM(NSInteger, ServiceSearchDiscoveryType, closed) {
/// LAN type
  ServiceSearchDiscoveryTypeLAN = 0,
/// Cloud Type
  ServiceSearchDiscoveryTypeCLOUD = 1,
};

@protocol VideoPlayerDelegate;
enum VideoRepeatMode : NSInteger;

/// Video Player Class handle the Video share, control and TV Player queue.
SWIFT_CLASS("_TtC9SmartView11VideoPlayer")
@interface VideoPlayer : BasePlayer
/// The Video Player delegate protocol defines the event methods available for a Video.
@property (nonatomic, weak) id <VideoPlayerDelegate> _Nullable playerDelegate SWIFT_DEPRECATED_OBJC("Swift property 'VideoPlayer.playerDelegate' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// this method play video content on TV.
/// \param contentURL video Url
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nonnull)contentURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// this method play video content on TV.
/// \param contentURL Content URL
///
/// \param title Content Title
///
/// \param thumbnailURL Content thumbnail URL
///
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)playContent:(NSURL * _Nullable)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nullable)thumbnailURL completionHandler:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// This method sends request to player for fast forwarding the video.
- (void)forward;
/// This method sends request to player for rewind the video.
- (void)rewind;
/// Seek the given time in currently playing media.
/// \param time Time in seconds within length of currently playing media.
///
- (void)seek:(NSTimeInterval)time;
/// repeat player list.
- (void)repeat;
/// Set player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
- (void)setRepeat:(enum VideoRepeatMode)mode;
/// resumes TV widget/application from background process.
/// \param completionHandler The response completion closure, it will be executed in the request queue i.e. in a backgound thread.
///
- (void)resumeApplicationInForeground:(void (^ _Nullable)(NSError * _Nullable))completionHandler;
/// request player list i.e currently playing on TV.
- (void)getList;
/// request to delete(removeAll) player list.
- (void)clearList;
/// remove specific video content from player list.
/// \param contentURL video URL
///
- (void)removeFromList:(NSURL * _Nonnull)contentURL;
/// Add video item to player list.
/// \param contentURL URL
///
/// \param title Title
///
/// \param thumbnailURL thumbnail URL
///
- (void)addToList:(NSURL * _Nonnull)contentURL title:(NSString * _Nonnull)title thumbnailURL:(NSURL * _Nonnull)thumbnailURL;
/// Add video item to player list.
/// \param arrayDictofData list data in form array of dictionary
///
- (void)addToList:(NSArray<NSDictionary<NSString *, id> *> * _Nonnull)arrayDictofData;
/// Notification of any data received from TV player
/// \param notification contains player queue event and action
///
- (void)onMessage:(NSNotification * _Null_unspecified)notification;
@end

/// Enum for Player list mode
/// Supported mode: repeatAll,repeatOff,repeatSingle
typedef SWIFT_ENUM(NSInteger, VideoRepeatMode, closed) {
/// Repeat Off
  VideoRepeatModeRepeatOff = 0,
/// Repeat Single
  VideoRepeatModeRepeatSingle = 1,
/// repeat All
  VideoRepeatModeRepeatAll = 2,
};


/// The Video Player delegate protocol defines the event methods available for a Video.
SWIFT_PROTOCOL("_TtP9SmartView19VideoPlayerDelegate_")
@protocol VideoPlayerDelegate
@optional
/// event occurs on Buffering of Video Start.
- (void)onBufferingStart;
/// event occurs on Buffering of Video Complete.
- (void)onBufferingComplete;
/// event occurs asynchronously when video buffering is in progress.
/// \param progress current Buffer Progerss
///
- (void)onBufferingProgress:(NSInteger)progress;
/// event occurs continously when video streaming is going on.
/// \param progress current playing time of video.
///
- (void)onCurrentPlayTime:(NSInteger)progress;
/// event occurs when video streaming start.
/// \param duration total duration of video.
///
- (void)onStreamingStarted:(NSInteger)duration;
/// event occurs when video streaming completed.
- (void)onStreamCompleted;
/// event occurs when video is shared with TV for the first time.
- (void)onPlayerInitialized;
/// event occurs when different type of media is shared with TV.
/// (video is shared after photo/audio share)
/// \param playerType current player type (photo/audio/video)
///
- (void)onPlayerChange:(NSString * _Nonnull)playerType;
/// event occurs when paused video is played.
- (void)onPlay;
/// event occurs on video pause.
- (void)onPause;
/// event occurs on video stop.
- (void)onStop;
/// event occurs on fast forwarding the video.
- (void)onForward;
/// event occurs on rewind the video.
- (void)onRewind;
/// event occurs on Player mute.
- (void)onMute;
/// event occurs on Player unMute.
- (void)onUnMute;
/// event occurs when Player plays next content.
- (void)onNext;
/// event occurs when Player plays previous content.
- (void)onPrevious;
/// provides the status of play controls like volume, mute/unmute and mode of player like single or repeat all
/// \param volLevel player volume level
///
/// \param muteStatus player mute status
///
/// \param shuffleStatus player shuffle status
///
/// \param mode player mode single or repeat all
///
- (void)onControlStatus:(NSInteger)volLevel muteStatus:(BOOL)muteStatus mode:(NSString * _Nonnull)mode;
/// event occurs on  player volume change.
/// \param volLevel player volume to be set.
///
- (void)onVolumeChange:(NSInteger)volLevel;
/// event occurs on video addition in TV queue(player list).
/// \param enqueuedItem enqueued video item.
///
- (void)onAddToList:(NSDictionary<NSString *, id> * _Nonnull)enqueuedItem;
/// event occurs on video remove from TV queue(player list).
/// \param dequeuedItem dequeued video Item.
///
- (void)onRemoveFromList:(NSDictionary<NSString *, id> * _Nonnull)dequeuedItem;
/// event occurs on TV queue(player list) deletion.
- (void)onClearList;
/// event occurs when player list(TV queue) is recieved.
/// \param queueList play list of TV
///
- (void)onGetList:(NSDictionary<NSString *, id> * _Nonnull)queueList;
/// event occurs on player list repeat.
/// \param mode specify repeat all/repeat single audio
///
- (void)onRepeat:(NSString * _Nonnull)mode;
/// occurs when new audio is shared with TV.
/// \param currentItem current shared item.
///
- (void)onCurrentPlaying:(NSDictionary<NSString *, id> * _Nonnull)currentItem;
/// occurs when TV Application/widget goes into background.
- (void)onApplicationSuspend;
/// occurs when  TV Application/widget comes in foreground.
- (void)onApplicationResume;
/// occurs when error is occured in playing Audio
/// \param error eror details
///
- (void)onError:(NSError * _Nonnull)error;
@end

@class NSStream;

SWIFT_CLASS("_TtC9SmartView9WebSocket")
@interface WebSocket : NSObject <NSStreamDelegate>
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ErrorDomain SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");)
+ (NSString * _Nonnull)ErrorDomain SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.ErrorDomain' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, strong) dispatch_queue_t _Nonnull callbackQueue SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.callbackQueue' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onDisconnect)(NSError * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onDisconnect' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onText)(NSString * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onText' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onData)(NSData * _Nonnull) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onData' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) void (^ _Nullable onPong)(NSData * _Nullable) SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.onPong' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull headers SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.headers' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL voipEnabled SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.voipEnabled' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) BOOL disableSSLCertValidation SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.disableSSLCertValidation' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSArray<NSNumber *> * _Nullable enabledSSLCipherSuites SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.enabledSSLCipherSuites' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, copy) NSString * _Nullable origin SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.origin' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic) NSInteger timeout SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.timeout' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly) BOOL isConnected SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.isConnected' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
@property (nonatomic, readonly, copy) NSURL * _Nonnull currentURL SWIFT_DEPRECATED_OBJC("Swift property 'WebSocket.currentURL' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Used for setting protocols.
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url protocols:(NSArray<NSString *> * _Nullable)protocols OBJC_DESIGNATED_INITIALIZER SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
- (nonnull instancetype)initWithUrl:(NSURL * _Nonnull)url writeQueueQOS:(enum NSQualityOfService)writeQueueQOS protocols:(NSArray<NSString *> * _Nullable)protocols SWIFT_DEPRECATED_OBJC("Swift initializer 'WebSocket.init(url:writeQueueQOS:protocols:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Connect to the WebSocket server on a background thread.
- (void)connect SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.connect()' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a string to the websocket. This sends it as a text frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param str The string to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithString:(NSString * _Nonnull)string completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(string:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write binary data to the websocket. This sends it as a binary frame.
/// If you supply a non-nil completion block, I will perform it when the write completes.
/// \param data The data to write.
///
/// \param completion The (optional) completion handler.
///
- (void)writeWithData:(NSData * _Nonnull)data completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(data:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Write a ping to the websocket. This sends it as a control frame.
/// Yodel a   sound  to the planet.    This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s
- (void)writeWithPing:(NSData * _Nonnull)ping completion:(void (^ _Nullable)(void))completion SWIFT_DEPRECATED_OBJC("Swift method 'WebSocket.write(ping:completion:)' uses '@objc' inference deprecated in Swift 4; add '@objc' to provide an Objective-C entrypoint");
/// Delegate for the stream methods. Processes incoming bytes
- (void)stream:(NSStream * _Nonnull)aStream handleEvent:(NSStreamEvent)eventCode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop

#endif
#endif
