美文网首页iOS Developer
物联网应用-基于Aspects的AOP实战

物联网应用-基于Aspects的AOP实战

作者: makemake | 来源:发表于2018-01-27 18:29 被阅读56次
    项目背景:

    蓝牙或WiFi的项目,通常会按照订制好的协议交互数据。比如从BLE接收到数据:0x01,按照协议解析数据0x01的意思是设备已打开,我们需要在客户端需要做相应的业务逻辑处理。

    上面一段项目背景中我们可以提取一下开发关键词:

    • 蓝牙(WiFi)交互数据:在客户端可以从相应的代理或者Block拿到发送过来的NSData
    • 协议:定义客户端与硬件端交互数据所代表的意义,如0x01:开灯。如果协议较为复杂,可以尝试将协议转模型。
    所以在开发过程中我们通常的流程是: 流程图.png
    其中:根据解析结果派发数据,常规做法为: 未命名文件-3.png
    通过走代理、通知、blcok的方式将结果传输到各个界面,完成相应的业务逻辑。

    但是在AOP中,我们并不需要大量的使用通知、代理、blcok,只需要在需要使用数据的地方对解析结果进行拦截,从而获取我们需要的数据,流程如下:


    未命名文件-5.png

    数据拦截库的实现:基于Appects框架封装回调方法,可实现勾取对应解析结果具体可看:Aspects

    代码片段:

    接收数据
    + (void)receiveData:(NSData *)data{
        
        NSString *dataString =  [NSString convertDataToHexStr:[data subdataWithRange:NSMakeRange(0, 1)]];
       
       int backCode = [[NSString hexStringToDecima:dataString] intValue];
    
        switch (backCode) {
            case 0x1:
            {
                
            }
                break;
            case 0x2:
            {
                
            }
            case 0x0F: 
            {
    
            }
            default:
                break;
        }
    } 
    
    数据解析

    数据转模型可以写一个runtime工具类去处理。

    + (HNGetDeviceInfoCode *)getDeviceInfoModel:(NSData *)data{
       HNGetDeviceInfoCode *code = [HNGetDeviceInfoCode AnalysisDataToModel:data BytesArray:@[@1,@1,@1,@1,@6,@1,@1]];
        DLog(@"%@",code);
        return code;
    }
    
    数据拦截库
    +(void)getDeviceUpdateStatus:(void (^)(BOOL isSuccess))handlerBlock{
        
        [object_getClass([HNBLEDataManager class]) aspect_hookSelector:@selector(getDeviceUpdataStatus:) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo,NSData *data){
            BOOL isSuccess;
            [aspectInfo.originalInvocation getReturnValue:&isSuccess];
            if (handlerBlock) {
                handlerBlock(isSuccess);
            }
        } error:NULL];
    }
    

    Aspects
    浅谈iOS在物联网应用中的架构

    相关文章

      网友评论

        本文标题:物联网应用-基于Aspects的AOP实战

        本文链接:https://www.haomeiwen.com/subject/wlznaxtx.html