ifish/Ifish/GWP2PSDK/GWP2P.framework/Headers/GWP2PClient.h

229 lines
10 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
/** @file GWP2PClient.h @brief P2P客户端及其协议,连接与断连P2P服务器,获取连接状态,获取AP模式ID等 */
// P2PSDK
//
// Created by apple on 16/12/9.
// Copyright © 2016年 gwell. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "GWP2PDefine.h"
@class GWP2PClient;
#pragma mark - GWP2PClientProtocol
/**
@brief P2P客户端协议,包含接收设备报警和文件下载等回调
*/
@protocol GWP2PClientProtocol <NSObject>
@optional
/**
接收到设备报警推送(包括门铃响铃推送的一种,而且是设备常用的一种):
alarmDictionary字典各键对应的信息
@"alarm type" : 报警类型 GWSensorAlarmType 枚举值
@"can delete binded push ID" : 是否支持删除绑定的推送ID即能否解除当前账号的报警推送
@"sensor name" : 传感器名字
报警图片,由于情景模式设备与其它的设备图片存储方式不一样,因此可能返回@"scene mode device picture"与@"common device picture"两个键中的一个或两个,如果返回两个,要先判断设备类型,再用对应的图片路径去获取图片才能获取到
@"scene mode device picture" : 情景模式设备报警图片, 对应一个字典
@"common device picture" : 普通设备报警图片, 对应一个字典
图片对应的字典@{@"path" : 图片在设备的路径,用来下载图片, @"picture number" : @"报警时,设备截图数量"}
@param client GWP2PClient类
@param alarmDictionary 保存报警信息的字典
*/
- (void)client:(GWP2PClient *)client receavedDeviceAlarm:(NSDictionary<NSString *, id> *)alarmDictionary;
/**
串口透传接收到门铃的响铃推送,门铃响铃有两种方式推送到手机端:
一是通过报警推送, 其报警类型@"alarm type"的值为 GWSensorAlarmTypeDoorbellPush , 即 13,
二是通过串口透传,此方法接收到的报警信息就是通过串口透传推送的,
ringingDictionary字典各键对应的信息:
@"device ID" : @"设备id";
@"cmd" : @"串口透传命令";
@param client GWP2PClient类
@param ringingDictionary 保存响铃信息的字典
*/
- (void)client:(GWP2PClient *)client receavedDoorbellRingingBySerialTransmission:(NSDictionary<NSString *, id> *)ringingDictionary;
/**
下载文件回调
@param client GWP2PClient 类
@param filePath 若下载成功,此路径为本地存储路径,若下载失败,此路径为远程路径或nil
@param deviceID 设备ID
@param success 是否下载成功
@param resultDictionary 保存下载失败原因的字典
*/
- (void)client:(GWP2PClient *)client didDownloadFile:(BOOL)success withFilePath:(NSString *)filePath deviceID:(NSString *)deviceID result:(NSDictionary<NSString *, NSString *> *)resultDictionary;
/**
更新进度
给设备发送更新命令后,设备开始更新,此方法会不停的调用,返回更新进度百分比,此方法在主线程运行方便UI处理
@param client GWP2PClient 类
@param persent 更新到百分之多少
@param resultCode NSNumber对应更新结果1更新中 65更新完成
@param deviceID 设备ID
*/
- (void)client:(GWP2PClient *)client updateProgress:(NSInteger)persent resultCode:(NSNumber *)resultCode ofDeviceID:(NSString *)deviceID;
/**
收到串口透传的数据
@param client GWP2PClient 类
@param data 串口透传回来的二进制数据,最大为248个字节
*/
- (void)client:(GWP2PClient *)client receavedSerialTransmissionData:(NSDictionary *)data;
/**
P2P库接收到通知包括 设备升级、系统消息、权限通知等
@param client GWP2PClient 类
@param noti 通知数据字典
"PermissionMessage"
"AppNeedUpdate"
"SystemMessage"
*/
- (void)client:(GWP2PClient *)client didReceivedNotification:(NSDictionary *)userInfo;
@end
#pragma mark - GWP2PClient类
/**
@brief 控制设备的类,用单例,连接与断连P2P服务器,获取连接状态,获取AP模式ID等
*/
@interface GWP2PClient : NSObject
/**
收到设备不支持的回调
由于给设备发指令,收到设备回复时,是以指令类型去判断是哪条消息,而有的指令设备不支持这一数据覆盖了指令类型,所以设备不支持对应不到具体指令,只能单独传出来
*/
@property (nonatomic, copy) void (^deviceNotSupportBlock)(GWP2PClient *client, NSString *deviceID);
@property (nonatomic, assign) P2PLinkStatus linkStatus; /**< p2p连接状态 */
@property (nonatomic, weak) id<GWP2PClientProtocol> delegate;/**< GWP2PClient的代理一些设备事件的通知对象 */
@property (nonatomic, assign) BOOL isAPMode;/**< 是不是AP模式。此属性只保存上次与路由器交互后的数据调 getDeviceIDInAPMode 方法会重新与路由器交互更新APMode状态每次app进入前台时会更新APMode状态 */
@property (nonatomic, assign) NSInteger port;/**< 广播端口 */
@property (nonatomic, strong) NSString* apSSIDPrefix;/**< 自定ap模式wifi前缀如GW_AP_XXXXXXXX,传 GW_AP_ */
@property (nonatomic, assign) BOOL ackBackPreset;/**< 是否预置位ack回复就返回成功默认是等转到位置再回复*/
@property (nonatomic, assign) BOOL supportIPSendCommand;/**< 是否预设备在局域网内用ip发送命令默认为NO*/
@property (nonatomic, copy) NSString *serverList; /**< P2P服务器列表自建服务器需要设置此属性格式"|p2p1.cloudlinks.cn|p2p2.cloudlinks.cn|p2p3.cloud-links.net" */
@property (nonatomic, copy) NSString *appVersion;
#pragma mark 获取单例
/**
* 获取单例
*/
+ (instancetype)sharedClient;
#pragma mark 连接服务器
/**
@method
@abstract 连接服务器
@discussion 程序启动时首先要连接服务器才能与设备通信。如果只需支持某一公司的设备那么请向技威的技术支持咨询获取你们的客户ID
@param account 用户账号,不是注册时的邮箱,手机号,是登陆或注册时返回的值取后31位:[json[@"UserID"] intValue] & 0x7fffffff
@param codeStr1 用户账号登陆成功后返回的 P2PVerifyCode1 , 为固定值
@param codeStr2 用户账号登陆成功后返回的 P2PVerifyCode2 , 为固定值
@param sessionID1 用户账号登陆成功后返回的 sessionId1 , 每次登陆返回值不固定
@param sessionID2 用户账号登陆成功后返回的 sessionId2 , 每次登陆返回值不固定
@param customerIDsArray 技威客户公司id数组传nil表示支持所有技威方案的设备。数组内传了几个公司的ID连接后就支持对应公司的设备。最多支持10个。传入的ID值不正确时支持不了设备都传0时与传nil效果一样。要了解具体客户ID请联系技威客服。
@result 返回值代表是否连接成功
*/
- (BOOL)connectWithAccount:(NSString *)account
codeStr1:(NSString *)codeStr1
codeStr2:(NSString *)codeStr2
sessionID1:(NSString *)sessionID1
sessionID2:(NSString *)sessionID2
customerIDs:(NSArray <NSNumber *> *)customerIDsArray;
/**
@method
@abstract 连接服务器(为支持P2P通知消息增加三个参数
@discussion 程序启动时首先要连接服务器才能与设备通信。如果只需支持某一公司的设备那么请向技威的技术支持咨询获取你们的客户ID
@param account 用户账号,不是注册时的邮箱,手机号,是登陆或注册时返回的值取后31位:[json[@"UserID"] intValue] & 0x7fffffff
@param codeStr1 用户账号登陆成功后返回的 P2PVerifyCode1 , 为固定值
@param codeStr2 用户账号登陆成功后返回的 P2PVerifyCode2 , 为固定值
@param sessionID1 用户账号登陆成功后返回的 sessionId1 , 每次登陆返回值不固定
@param sessionID2 用户账号登陆成功后返回的 sessionId2 , 每次登陆返回值不固定
@param customerIDsArray 技威客户公司id数组传nil表示支持所有技威方案的设备。数组内传了几个公司的ID连接后就支持对应公司的设备。最多支持10个。传入的ID值不正确时支持不了设备都传0时与传nil效果一样。要了解具体客户ID请联系技威客服。
@param appVersion 向技威申请得到的AppVersion(格式如00.46.03.03)
@param messageLanguage P2P通知消息语言请传nil设置无效目前根据系统语言判定。
@param lastSystemMessageID 最后一个系统消息ID
@param lastAuthorityMessageID 权限系统消息ID配网时传密码也会走这个消息
@result 返回值代表是否连接成功
*/
- (BOOL)connectWithAccount:(NSString *)account
codeStr1:(NSString *)codeStr1
codeStr2:(NSString *)codeStr2
sessionID1:(NSString *)sessionID1
sessionID2:(NSString *)sessionID2
customerIDs:(NSArray <NSNumber *> *)customerIDsArray
appVersion:(NSString *)appVersion
messageLanguage:(NSString *)messageLanguage
lastSystemMessageID:(NSString *)lastSystemMessageID
lastAuthorityMessageID:(NSString *)lastAuthorityMessageID;
/**
@abstract 断开连接
*/
- (void)disconnect;
/**
AP模式下获取设备ID只有当设备为AP模式且手机连接到设备的wifi时才能成功获取并更新设备的APMode状态
@return 设备ID。返回值不为0时可确定设备处于AP模式返回值为0时可能为AP也可能是手机未连接到设备wifi
*/
- (NSUInteger)getDeviceIDInAPMode;
#pragma mark - 发送二进制数据给设备
/**
直接向设备发送原始数据,本接口是为满足一些客户定制的需求,一般用户不需要直接使用此接口,具体的数据格式根据功能来定,请咨询技威客服
在 GWP2PClient 的分类中各接口都是把各个功能的数据封装好后,进行调用.为了满足一些客户的特殊要求,公开这条接口,让客户自己去封装数据,回调的数据也是 NSData 类型,定制功能使用此接口时,用户需要自己将数据封装成 NSData 类型,然后传入此接口参数data中,封装时一定要注意字节对齐.
如果是 GWP2PClient 分类中有的指令,调这条接口直接发二进制数据是收不到回调数据的
此接口发送后不能连续发这个条指令,必需要上一条数据返回时才能发下一条指令
@param deviceID 设备ID
@param devicePassword 设备密码
@param data 要发送的数据,数据结构是由技威定义的结构体,封装成NSData时一定要注意字节对齐
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sendBinaryDataToDevice:(NSString *)deviceID
withDevicePassword:(NSString *)devicePassword
data:(NSData *)data
completionBlock:(CompletionBlock)completionBlock;
@end