更新时间:2023-05-22 06:38:32
在传统的方案中,App 和设备的数据传输都是经过服务器进行转发,当传输数据较大时需要占用服务器大量的空间和流量,运营成本较高。涂鸦 P2P(Peer-to-peer)连接方案可以有效地解决这个问题,降低运营商的流量成本,具体实现通过 TuyaSmartP2pChannel
类来完成。
在 Podfile 中添加:
pod 'TuyaSmartP2pChannelKit'
一般在登录时候调用。P2P 初始化和反初始化调用,请确保配对使用。
接口说明
- (void)initP2PSDKWithUid:(NSString *)uid;
参数说明
参数 | 说明 |
---|---|
uid | 用户 ID,登录账号后可以通过 TuyaSmartUser.uid 查询 |
示例代码
NSString *uid = [TuyaSmartUser sharedInstance].uid;
[[TuyaSmartP2pChannel sharedInstance] initP2PSDKWithUid:uid]
一般退出登录的时候调用反初始化,否则可能导致 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 连接会话,支持 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 连接时返回的跟踪标识 |
接口说明
- (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 | 连接正常 |
属性说明
@property (nonatomic, assign, readonly) NSString *p2pVersion;
目前在涂鸦智能设备的数据协议中,每一个 P2P 会话中会初始化 8 个数据通道,已经定义和使用的通道有 6 个。
通道号 | 说明 |
---|---|
0 | 控制命令收发通道 |
1 | 视频数据传输通道 |
2 | 音频数据传输通道 |
3 | 存储卡回放视频传输通道 |
4 | 数据透传通道 |
5 | 文件下载传输通道 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈