P2P 功能

更新时间:2023-05-22 06:38:32

在传统的方案中,App 和设备的数据传输都是经过服务器进行转发,当传输数据较大时需要占用服务器大量的空间和流量,运营成本较高。涂鸦 P2P(Peer-to-peer)连接方案可以有效地解决这个问题,降低运营商的流量成本,具体实现通过 TuyaSmartP2pChannel 类来完成。

集成服务

在 Podfile 中添加:

pod 'TuyaSmartP2pChannelKit'

初始化 P2P

一般在登录时候调用。P2P 初始化和反初始化调用,请确保配对使用。

接口说明

- (void)initP2PSDKWithUid:(NSString *)uid;

参数说明

参数 说明
uid 用户 ID,登录账号后可以通过 TuyaSmartUser.uid 查询

示例代码

NSString *uid = [TuyaSmartUser sharedInstance].uid;
[[TuyaSmartP2pChannel sharedInstance] initP2PSDKWithUid:uid]

反初始化 P2P

一般退出登录的时候调用反初始化,否则可能导致 P2P 消息错乱。

接口说明

- (void)deInitP2PSDK;

初始化资源

需要使用 P2P 能力时调用。初始化 P2P 内部资源,需要和用户 UID 绑定。资源初始化和反初始化需配对调用。调用初始化后,需在适当时候调用反初始化资源。

接口说明

- (void)initSDKWithUid:(NSString *)uid;

参数说明

参数 说明
uid 用户 ID,登录账号后可以通过 TuyaSmartUser.uid 查询

示例代码

NSString *uid = [TuyaSmartUser sharedInstance].uid;
[[TuyaSmartP2pChannel sharedInstance] initSDKWithUid:uid]

反初始化资源

无需使用 P2P 能力时调用,释放 P2P 内部资源。释放后,再使用 P2P 能力,需要重新初始化资源。

接口说明

- (void)deInitSDK;

建立 P2P 连接

与指定设备建立 P2P 连接会话,支持 v3.4.8 版本。

接口说明

- (NSString *)connectWithDeviceId:(NSString *)devId mode:(TuyaSmartP2pConnectMode)mode timeout:(NSInteger)timeout success:(void(^)(int p2pHandle))success failure:(void(^)(NSInteger errCode))failure;

参数说明

参数 说明
devId 设备的唯一标识符
mode 优先连接方式
timeout 连接超时时间,单位为毫秒
success 成功的回调,返回 P2P 连接会话的 ID,负数表示连接失败
failure 失败的回调

TuyaSmartP2pConnectMode

枚举值 说明
TuyaSmartP2pConnectModeInternet 外网连接优先
TuyaSmartP2pConnectModeLAN 局域网连接优先

返回值

返回值 说明
traceId 作为整个连接生命周期的跟踪标识,取消 P2P 连接时需要传入 traceId

取消正在尝试的连接

取消 P2P 连接,已经建立成功的连接不受影响。

接口说明

- (void)breakConnectWithTraceId:(NSString *)traceId;

参数说明

参数 说明
traceId 建立 P2P 连接时返回的跟踪标识

关闭 P2P 连接

接口说明

- (void)disconnectWithP2pHandle:(int)handle;

参数说明

参数 说明
handle 要断开的 P2P 会话 ID,在 P2P 连接成功时会返回

接收会话数据

通过指定的 P2P 会话,从指定的通道读取数据。

接口说明

- (int)readDataWithP2pHandle:(int)handle channel:(int)channel buffer:(unsigned char*)buffer timeout:(int)timeout;

参数说明

参数 说明
handle P2P 会话 ID
channel 通道号
buffer 接收数据的缓冲区
timeout 超时时间,单位为毫秒

返回值说明

返回值 说明
< 0 接收数据出错,-3 表示超时,其他错误表示连接已断开
>= 0 实际接收到的数据长度

向通道发送数据

通过指定的 P2P 会话,向指定的通道发送数据。

接口说明

- (int)sendDataWithP2pHandle:(int)handle channel:(int)channel buffer:(unsigned char*)buffer length:(int)len timeout:(int)timeout;

参数说明

参数 说明
handle P2P 会话 ID
channel 通道号
buffer 发送数据的指针
len 缓存的长度
timeout 超时时间,单位为毫秒

返回值说明

返回值 说明
< 0 发送数据出错,-3 表示超时,其他错误表示连接已断开
>= 0 发送成功的数据长度

检查连接是否正常

查询 P2P 会话的当前状态,需要轮询检查。

接口说明

- (int)activeCheckWithHandle:(int)p2pHandle;

参数说明

参数 说明
p2pHandle P2P 会话 ID

返回值

返回值 说明
< 0 连接已断开
>= 0 连接正常

查询 P2P SDK 版本号

属性说明

@property (nonatomic, assign, readonly) NSString *p2pVersion;

数据通道编号

目前在涂鸦智能设备的数据协议中,每一个 P2P 会话中会初始化 8 个数据通道,已经定义和使用的通道有 6 个。

通道号 说明
0 控制命令收发通道
1 视频数据传输通道
2 音频数据传输通道
3 存储卡回放视频传输通道
4 数据透传通道
5 文件下载传输通道