ソースを参照

1.nas 页面检测心跳---完成部分

huangxiaodong 4 ヶ月 前
コミット
3bf53c6275

+ 74 - 0
创维盒子/code/NAS/NASViewController.m

@@ -40,6 +40,8 @@
 #import "UpgradeInfoModel.h"
 #import "imageVersionUpdateDoneView.h"
 #import "imageVersionUpdateFailView.h"
+#import "queryHeartbeatModel.h"
+#import "BoxHeartbeatAlertTool.h"
 
 @interface NASViewController ()<UITableViewDelegate,UITableViewDataSource>
 {
@@ -51,6 +53,7 @@
     BOOL hadDownloadTaskType;
     
     NSInteger tryLinkNum;
+    NSInteger tryLinkFrpNum;//frp接口连接次数
     
     imageVersionRenewTipView * RenewTipView;
     imageVersionUpdateDoneView* imageVersionUpdateDoneV;
@@ -680,9 +683,18 @@
 - (void)setMySpaceDataFun
 {
     if(ksharedAppDelegate.cloudPhoneExtraFileListMod){
+        tryLinkFrpNum = 0;
         [_NASMySpaceV setProgressFun];
     }
     else{
+        
+        tryLinkFrpNum ++;
+        
+        if(tryLinkFrpNum == 3){
+            tryLinkFrpNum = 0;
+            [self checkBoxHeartbeatFun];
+        }
+        
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
             //[self setMySpaceDataFun];
             [self getExtraFilesByFrpHttpFun];
@@ -984,5 +996,67 @@
 - (void)applicationDidBecomeActive:(NSNotification *)notification
 {
     //[self beginShowAlertFun];
+    
+    [self checkBoxHeartbeatFun];
+}
+
+#pragma mark 检测盒子的心跳情况
+- (void)checkBoxHeartbeatFun
+{
+    //1.隐私模式密码界面 3秒检测一次是否输入完成密码了
+    if(ksharedAppDelegate.isDidShowPwdType){
+        KWeakSelf
+        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+            [weakSelf checkBoxHeartbeatFun];
+        });
+        
+        return;
+    }
+    
+    [[BoxHeartbeatAlertTool shareInstance] showBoxHeartbeatAlertFun:1 didClickBut:^(NSInteger tag) {
+                
+    }];
+    
+    if(ksharedAppDelegate.isWebSockLinkOKAginType && ksharedAppDelegate.cloudPhoneExtraFileListMod){
+        return;
+    }
+    
+    NSMutableDictionary *paraDict = [NSMutableDictionary new];
+   
+    KWeakSelf
+    [[netWorkManager shareInstance] CommonGetWithCallBackCode:queryHeartbeat Parameters:paraDict success:^(id  _Nonnull responseObject){
+        queryHeartbeatModel *heartbeatMod = [[queryHeartbeatModel alloc] initWithDictionary:responseObject error:nil];
+        if(heartbeatMod && heartbeatMod.data){
+            [weakSelf checkBoxHeartbeatToShowPopViewFunBy:heartbeatMod];
+        }
+        
+    } failure:^(NSError * _Nonnull error) {
+    }];
+
 }
+
+#pragma mark 根据盒子的心跳情况 显示异常谈了
+- (void)checkBoxHeartbeatToShowPopViewFunBy:(queryHeartbeatModel*)heartbeatMod
+{
+    if(!heartbeatMod || !heartbeatMod.data){
+        return;
+    }
+    
+    if (!heartbeatMod.data.frpStatus
+        &&!heartbeatMod.data.hostAgentStatus
+        &&!heartbeatMod.data.containerAgentStatus) {//全部异常
+        
+        [[BoxHeartbeatAlertTool shareInstance] showBoxHeartbeatAlertFun:1 didClickBut:^(NSInteger tag) {
+                    
+        }];
+    }
+    else if (heartbeatMod.data.hostAgentStatus
+            && !heartbeatMod.data.frpStatus
+            && heartbeatMod.data.containerAgentStatus) {//frp异常
+        [[BoxHeartbeatAlertTool shareInstance] showBoxHeartbeatAlertFun:2 didClickBut:^(NSInteger tag) {
+                    
+        }];
+    }
+}
+
 @end

+ 22 - 0
创维盒子/code/NAS/model/queryHeartbeatModel.h

@@ -0,0 +1,22 @@
+//
+//  queryHeartbeatModel.h
+//  隐私保护
+//
+//  Created by xd h on 2025/2/7.
+//
+
+#import "SuperModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface queryHeartbeatDateModel : SuperModel
+@property(nonatomic,assign) BOOL frpStatus;//frp状态 0=离线 1=在线
+@property(nonatomic,assign) BOOL hostAgentStatus; //宿主机状态 0=离线 1=在线
+@property(nonatomic,assign) BOOL containerAgentStatus;//容器状态 0=离线 1=在线
+@end
+
+@interface queryHeartbeatModel : SuperModel
+@property(nonatomic,strong) queryHeartbeatDateModel*data;
+@end
+
+NS_ASSUME_NONNULL_END

+ 16 - 0
创维盒子/code/NAS/model/queryHeartbeatModel.m

@@ -0,0 +1,16 @@
+//
+//  queryHeartbeatModel.m
+//  隐私保护
+//
+//  Created by xd h on 2025/2/7.
+//
+
+#import "queryHeartbeatModel.h"
+
+@implementation queryHeartbeatDateModel
+
+@end
+
+@implementation queryHeartbeatModel
+
+@end

+ 27 - 0
创维盒子/code/NAS/view/BoxHeartbeatAlertTool.h

@@ -0,0 +1,27 @@
+//
+//  BoxHeartbeatAlertTool.h
+//  隐私保护
+//
+//  Created by xd h on 2025/2/7.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ *
+ */
+typedef void (^BoxHeartbeat_DidClickButFun) (NSInteger tag); // 1 2 3 //表示点击弹框按钮的 index
+
+@interface BoxHeartbeatAlertTool : NSObject
++ (instancetype)shareInstance;
+
+#pragma mark 网络异常弹框 type == 1 全部心跳异常  2 是部分异常
+-(void)showBoxHeartbeatAlertFun:(NSInteger)type didClickBut:(BoxHeartbeat_DidClickButFun)didClickBut;
+
+#pragma mark 网络异常弹框 消失
+- (void)dismissErrorAlertFun;
+@end
+
+NS_ASSUME_NONNULL_END

+ 174 - 0
创维盒子/code/NAS/view/BoxHeartbeatAlertTool.m

@@ -0,0 +1,174 @@
+//
+//  BoxHeartbeatAlertTool.m
+//  隐私保护
+//
+//  Created by xd h on 2025/2/7.
+//
+
+#import "BoxHeartbeatAlertTool.h"
+
+#import "ComontAlretViewController.h"
+//#import "ComontAlretType2ViewController.h"
+
+static BoxHeartbeatAlertTool *shareInstance = nil;
+
+@interface BoxHeartbeatAlertTool ()
+{
+    /*弹窗提示链接失败 网络或者云机*/
+    ComontAlretViewController *linkFailAlretVC;
+    //ComontAlretType2ViewController * linkFailAlretType2VC;
+    
+    
+    BoxHeartbeat_DidClickButFun curDidClickButFun;
+}
+
+@end
+
+@implementation BoxHeartbeatAlertTool
+
++ (instancetype)shareInstance {
+    
+    static dispatch_once_t onceToken;
+    
+    dispatch_once(&onceToken, ^{
+        shareInstance = [[BoxHeartbeatAlertTool alloc] init];
+        
+    });
+    
+    return shareInstance;
+}
+
+#pragma mark 网络异常弹框 消失
+- (void)dismissErrorAlertFun
+{
+    KWeakSelf
+    mainBlock(^{
+        [weakSelf dismissErrorAlertInMainFun];
+    });
+}
+
+- (void)dismissErrorAlertInMainFun{
+    if(linkFailAlretVC){
+        [self->linkFailAlretVC dismissViewControllerAnimated:YES completion:^{
+            
+        }];
+        self->linkFailAlretVC = nil;
+    }
+}
+
+#pragma mark 网络异常弹框
+-(void)showBoxHeartbeatAlertFun:(NSInteger)type didClickBut:(BoxHeartbeat_DidClickButFun)didClickBut
+{
+    curDidClickButFun = didClickBut;
+    KWeakSelf
+    mainBlock(^{
+        [weakSelf showNetErrorAlertFunInMain:type];
+    });
+}
+
+-(void)showNetErrorAlertFunInMain:(NSInteger)type
+{
+    
+    NSString* linkErrTitle = NSLocalizedString(@"Heartbeat_box_all_fail_title",nil);
+    NSString* linkErrTip = NSLocalizedString(@"Heartbeat_box_all_fail_tip",nil);
+    NSString* buttonTitle = NSLocalizedString(@"common_I_know",nil);
+    
+    if(type != 1){
+        linkErrTitle = NSLocalizedString(@"Heartbeat_box_part_fail_title",nil);
+        linkErrTip = NSLocalizedString(@"Heartbeat_box_part_fail_tip",nil);
+        buttonTitle = NSLocalizedString(@"Heartbeat_box_restart_phone",nil);
+    }
+    
+
+        KWeakSelf
+        linkFailAlretVC= [[ComontAlretViewController alloc] initWithTiTle:linkErrTitle
+                                                                                          msg:linkErrTip
+                                                                                     imageStr:@""
+                                                                                  cancelTitle:buttonTitle
+                                                                                      okTitle:@""
+                                                                            isOkBtnHighlight:NO
+                                                                                   didClickOk:^{
+           
+            
+            if(self->curDidClickButFun){
+                self->curDidClickButFun(1);
+            }
+            
+            if(type != 1){
+                [weakSelf needToRebootFun];
+            }
+            
+         } didClickCancel:^{
+            
+         }];
+        
+         linkFailAlretVC.modalPresentationStyle = UIModalPresentationCustom;
+         [linkFailAlretVC setMsgTextAlignment:NSTextAlignmentLeft];
+         [ksharedAppDelegate.window.rootViewController presentViewController:linkFailAlretVC animated:YES completion:^{
+             self->linkFailAlretVC.view.superview.backgroundColor = [UIColor clearColor];
+         }];
+    
+   
+    linkFailAlretVC.view.tag = type;
+}
+
+
+#pragma mark 重启云机
+- (void)needToRebootFun
+{
+    linkFailAlretVC = nil;
+    
+    [[webRtcManager shareManager] needToRebootFun];
+    
+    [self startForceStartTimerFun];
+}
+
+#pragma mark 启动timer 秒后检查是否软件重启成功
+- (void)startForceStartTimerFun
+{
+    KWeakSelf
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [weakSelf gotoUpdateForceStartFun];
+    });
+    
+}
+
+- (void)gotoUpdateForceStartFun
+{
+    [self updateForceStartFun];
+    
+    //KWeakSelf
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        //[weakSelf reconnectDevice];
+        [[webRtcManager shareManager] relinkWebRtcFun];
+    });
+}
+
+#pragma mark 需要强制重启
+- (void)updateForceStartFun{
+    
+    NSString* curSn = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn;
+    
+    NSMutableDictionary *paraDict = [NSMutableDictionary dictionary];
+    [paraDict setValue:curSn forKey:@"sn"];
+    [paraDict setValue:[NSNumber numberWithBool:YES] forKey:@"isForceStart"];
+    
+    [[netWorkManager shareInstance] CommonPostCallBackCode:updateForceStart Parameters:paraDict success:^(id  _Nonnull responseObject) {
+        
+      SuperModel *model = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
+
+       if (model.status == 0) {
+          
+       }
+       else
+       {
+           
+       }
+
+    } failure:^(NSError * _Nonnull error) {
+       HLog(@"%@", error);
+    }];
+}
+
+
+@end

+ 6 - 0
创维盒子/code/netWork/newWorkInterface.h

@@ -180,5 +180,11 @@
  返回数据模型 */
 #define updateOTAPopButton  @"/box/upgrade/info/detail/updatePopButton"
 
+/*26 根据sn查询心跳  get请求
+输入参数
+ 
+ 返回数据模型 */
+#define queryHeartbeat  @"/box/heartbeat/check/queryHeartbeat"
+
 
 #endif /* newWorkInterface_h */

+ 7 - 0
创维盒子/code/zh-Hans.lproj/Localizable.strings

@@ -651,3 +651,10 @@
 "image_version_update_fail_title"   = "设备升级异常";
 "image_version_update_fail_tip1"   = "1、请检查您的盒子与手机网络连接是否正常。\n2、您可以尝试断电重启盒子来进行升级,并在升级完成后确认是否成功。\n3、如果仍未能成功升级,请提供设备的序列号";
 "image_version_update_fail_tip2"   = "并联系我们的客服团队获取帮助";
+
+"Heartbeat_box_all_fail_title"   = "设备状态异常";
+"Heartbeat_box_all_fail_tip"   = "检测到设备状态异常导致云手机连接失败,请检查设备电源和网络是否连接正常。若还无法连接请提供SN联系官方客服获取帮助。";
+
+"Heartbeat_box_part_fail_title"   = "云手机连接失败";
+"Heartbeat_box_part_fail_tip"   = "检测到设备状态异常导致云手机连接失败,请检查设备电源和网络是否连接正常。若还无法连接请提供SN联系官方客服获取帮助。";
+"Heartbeat_box_restart_phone" = "重启云手机";

+ 32 - 8
创维盒子/双子星云手机.xcodeproj/project.pbxproj

@@ -1348,6 +1348,14 @@
 		6BF558D82C45488A00701854 /* addAudioToPlayListBottomView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF558D52C45488A00701854 /* addAudioToPlayListBottomView.h */; };
 		6BF558D92C45488A00701854 /* addAudioToPlayListBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF558D62C45488A00701854 /* addAudioToPlayListBottomView.m */; };
 		6BF558DA2C45488A00701854 /* addAudioToPlayListBottomView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF558D52C45488A00701854 /* addAudioToPlayListBottomView.h */; };
+		6BF62B182D55D9E400E7A98A /* queryHeartbeatModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF62B172D55D9E400E7A98A /* queryHeartbeatModel.m */; };
+		6BF62B192D55D9E400E7A98A /* queryHeartbeatModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF62B162D55D9E400E7A98A /* queryHeartbeatModel.h */; };
+		6BF62B1A2D55D9E400E7A98A /* queryHeartbeatModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF62B162D55D9E400E7A98A /* queryHeartbeatModel.h */; };
+		6BF62B1B2D55D9E400E7A98A /* queryHeartbeatModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF62B172D55D9E400E7A98A /* queryHeartbeatModel.m */; };
+		6BF62B1E2D55E2F700E7A98A /* BoxHeartbeatAlertTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF62B1D2D55E2F700E7A98A /* BoxHeartbeatAlertTool.m */; };
+		6BF62B1F2D55E2F700E7A98A /* BoxHeartbeatAlertTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF62B1C2D55E2F700E7A98A /* BoxHeartbeatAlertTool.h */; };
+		6BF62B202D55E2F700E7A98A /* BoxHeartbeatAlertTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF62B1C2D55E2F700E7A98A /* BoxHeartbeatAlertTool.h */; };
+		6BF62B212D55E2F700E7A98A /* BoxHeartbeatAlertTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF62B1D2D55E2F700E7A98A /* BoxHeartbeatAlertTool.m */; };
 		6BFF26882AF8949F00FCB4F7 /* playerShowSecretkeyView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BFF26862AF8949F00FCB4F7 /* playerShowSecretkeyView.h */; };
 		6BFF26892AF8949F00FCB4F7 /* playerShowSecretkeyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BFF26872AF8949F00FCB4F7 /* playerShowSecretkeyView.m */; };
 		6BFF268C2AF8E1C600FCB4F7 /* forgetPwdViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BFF268A2AF8E1C600FCB4F7 /* forgetPwdViewController.h */; };
@@ -2164,6 +2172,10 @@
 		6BF558D02C45442100701854 /* addAudioToPlayListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = addAudioToPlayListViewController.m; sourceTree = "<group>"; };
 		6BF558D52C45488A00701854 /* addAudioToPlayListBottomView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = addAudioToPlayListBottomView.h; sourceTree = "<group>"; };
 		6BF558D62C45488A00701854 /* addAudioToPlayListBottomView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = addAudioToPlayListBottomView.m; sourceTree = "<group>"; };
+		6BF62B162D55D9E400E7A98A /* queryHeartbeatModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = queryHeartbeatModel.h; sourceTree = "<group>"; };
+		6BF62B172D55D9E400E7A98A /* queryHeartbeatModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = queryHeartbeatModel.m; sourceTree = "<group>"; };
+		6BF62B1C2D55E2F700E7A98A /* BoxHeartbeatAlertTool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BoxHeartbeatAlertTool.h; sourceTree = "<group>"; };
+		6BF62B1D2D55E2F700E7A98A /* BoxHeartbeatAlertTool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BoxHeartbeatAlertTool.m; sourceTree = "<group>"; };
 		6BFF26862AF8949F00FCB4F7 /* playerShowSecretkeyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = playerShowSecretkeyView.h; sourceTree = "<group>"; };
 		6BFF26872AF8949F00FCB4F7 /* playerShowSecretkeyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = playerShowSecretkeyView.m; sourceTree = "<group>"; };
 		6BFF268A2AF8E1C600FCB4F7 /* forgetPwdViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = forgetPwdViewController.h; sourceTree = "<group>"; };
@@ -3288,11 +3300,11 @@
 		6B5D86632C227C4A008D25EA /* NAS */ = {
 			isa = PBXGroup;
 			children = (
+				6BF62B122D55D57700E7A98A /* model */,
 				6BB573312C8076A600713351 /* nasBackupsManager */,
 				6B9773982C637BFB00213317 /* nasUploadManager */,
 				6B238C8B2C60AA1B00C5AC2F /* nasDownloadManager */,
 				6B8A5ADD2C3BCB2700E40B19 /* recenFile */,
-				6BC741362C23C7BE0049BA8D /* model */,
 				6B5D866A2C22AE0B008D25EA /* view */,
 				6B5D86642C227C71008D25EA /* NASViewController.h */,
 				6B5D86652C227C71008D25EA /* NASViewController.m */,
@@ -3325,6 +3337,8 @@
 				6B9283652C4B62A30098CC75 /* newerGuideView.m */,
 				6B92836A2C4B94310098CC75 /* errorAlertTool.h */,
 				6B92836B2C4B94310098CC75 /* errorAlertTool.m */,
+				6BF62B1C2D55E2F700E7A98A /* BoxHeartbeatAlertTool.h */,
+				6BF62B1D2D55E2F700E7A98A /* BoxHeartbeatAlertTool.m */,
 				6B0A75DD2C4CA3D300DCB32D /* audioPlayingView.h */,
 				6B0A75DE2C4CA3D300DCB32D /* audioPlayingView.m */,
 			);
@@ -3577,13 +3591,6 @@
 			path = DDYLanguageTool;
 			sourceTree = "<group>";
 		};
-		6BC741362C23C7BE0049BA8D /* model */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = model;
-			sourceTree = "<group>";
-		};
 		6BC741372C23C8210049BA8D /* cloudPhone */ = {
 			isa = PBXGroup;
 			children = (
@@ -3646,6 +3653,15 @@
 			path = customLaunchView;
 			sourceTree = "<group>";
 		};
+		6BF62B122D55D57700E7A98A /* model */ = {
+			isa = PBXGroup;
+			children = (
+				6BF62B162D55D9E400E7A98A /* queryHeartbeatModel.h */,
+				6BF62B172D55D9E400E7A98A /* queryHeartbeatModel.m */,
+			);
+			path = model;
+			sourceTree = "<group>";
+		};
 		6BFF268E2AF9D86600FCB4F7 /* AuthCodeView */ = {
 			isa = PBXGroup;
 			children = (
@@ -4181,6 +4197,7 @@
 				6B8661D72BBA53B600B19846 /* noticeModel.h in Headers */,
 				6B2C1E462C070ADE00FDCF82 /* ZFSmallFloatControlView.h in Headers */,
 				6BF558C02C4515B500701854 /* audioPlayListManager.h in Headers */,
+				6BF62B202D55E2F700E7A98A /* BoxHeartbeatAlertTool.h in Headers */,
 				6B2C1E1C2C070ADE00FDCF82 /* ZFAVPlayerManager.h in Headers */,
 				6B8FF6C12B05B24D00800981 /* uploadFileRecordCell.h in Headers */,
 				6B3E7A892C8A9FFA00B032C4 /* pingManager.h in Headers */,
@@ -4246,6 +4263,7 @@
 				18F9CB092ABD7835003FF71A /* TipsQRCodeForChangeDeviceViewController.h in Headers */,
 				6B07AC2B2BF8D38F005C2B0E /* NASFileAudioModel.h in Headers */,
 				6B2C1E522C070ADE00FDCF82 /* ZFVolumeBrightnessView.h in Headers */,
+				6BF62B1A2D55D9E400E7A98A /* queryHeartbeatModel.h in Headers */,
 				6B5B60722B3D8098009A2AE2 /* fileTransferPathCheckTableViewCell.h in Headers */,
 				6B2C1E282C070ADE00FDCF82 /* ZFLandScapeControlView.h in Headers */,
 				6B3A4B152B6F69A500F74679 /* cloudPhoneCommonModel.h in Headers */,
@@ -4476,6 +4494,7 @@
 				6B8661D82BBA53B600B19846 /* noticeModel.h in Headers */,
 				6B2C1E472C070ADE00FDCF82 /* ZFSmallFloatControlView.h in Headers */,
 				6BF558C22C4515B500701854 /* audioPlayListManager.h in Headers */,
+				6BF62B1F2D55E2F700E7A98A /* BoxHeartbeatAlertTool.h in Headers */,
 				6B2C1E1D2C070ADE00FDCF82 /* ZFAVPlayerManager.h in Headers */,
 				6BD506E22B9576A4006E7CB0 /* uploadFileRecordCell.h in Headers */,
 				6B3E7A8B2C8A9FFB00B032C4 /* pingManager.h in Headers */,
@@ -4541,6 +4560,7 @@
 				6BD506F72B9576A4006E7CB0 /* TipsQRCodeForChangeDeviceViewController.h in Headers */,
 				6B07AC2E2BF8D38F005C2B0E /* NASFileAudioModel.h in Headers */,
 				6B2C1E532C070ADE00FDCF82 /* ZFVolumeBrightnessView.h in Headers */,
+				6BF62B192D55D9E400E7A98A /* queryHeartbeatModel.h in Headers */,
 				6BD506F82B9576A4006E7CB0 /* fileTransferPathCheckTableViewCell.h in Headers */,
 				6B2C1E292C070ADE00FDCF82 /* ZFLandScapeControlView.h in Headers */,
 				6BD506F92B9576A4006E7CB0 /* cloudPhoneCommonModel.h in Headers */,
@@ -4952,6 +4972,7 @@
 				6B7E04372C3E5A98004B4948 /* NSURLSession+customDownloadTask.m in Sources */,
 				6B3958722C34FA25003FC6C3 /* NasPreviewVideoViewController.m in Sources */,
 				6BD507402B9576A4006E7CB0 /* DDYLanguageTool.m in Sources */,
+				6BF62B1E2D55E2F700E7A98A /* BoxHeartbeatAlertTool.m in Sources */,
 				6B7EA7A12BF5E0ED002D5CC2 /* NASMsgModel.m in Sources */,
 				6BD507412B9576A4006E7CB0 /* AudioSessionObject.m in Sources */,
 				6B6ABEDD2BFF3AA400480BAC /* receiveView.m in Sources */,
@@ -5103,6 +5124,7 @@
 				6BD507912B9576A4006E7CB0 /* HWVersionModel.m in Sources */,
 				6B5BE57C2BFC767100A1B9B3 /* previewFileAndFolderViewController.m in Sources */,
 				6B2C1E552C070ADE00FDCF82 /* ZFVolumeBrightnessView.m in Sources */,
+				6BF62B182D55D9E400E7A98A /* queryHeartbeatModel.m in Sources */,
 				6BD507922B9576A4006E7CB0 /* NSArray+Log.m in Sources */,
 				6BA08F4E2C01D05B00A2242D /* CWFileStreamSeparation.m in Sources */,
 				6BD507942B9576A4006E7CB0 /* downloadFileRecordCell.m in Sources */,
@@ -5329,6 +5351,7 @@
 				6B7E04362C3E5A98004B4948 /* NSURLSession+customDownloadTask.m in Sources */,
 				6B3958702C34FA25003FC6C3 /* NasPreviewVideoViewController.m in Sources */,
 				6BBB35E32AE935C000E4A59B /* DDYLanguageTool.m in Sources */,
+				6BF62B212D55E2F700E7A98A /* BoxHeartbeatAlertTool.m in Sources */,
 				6B7EA79F2BF5E0ED002D5CC2 /* NASMsgModel.m in Sources */,
 				6BBB35DE2AE76AD800E4A59B /* AudioSessionObject.m in Sources */,
 				6B6ABEDB2BFF3AA400480BAC /* receiveView.m in Sources */,
@@ -5480,6 +5503,7 @@
 				184C8ADE2A949DBD00F26650 /* HWVersionModel.m in Sources */,
 				6B5BE57A2BFC767100A1B9B3 /* previewFileAndFolderViewController.m in Sources */,
 				6B2C1E542C070ADE00FDCF82 /* ZFVolumeBrightnessView.m in Sources */,
+				6BF62B1B2D55D9E400E7A98A /* queryHeartbeatModel.m in Sources */,
 				6B21709D2B15CDB600656670 /* NSArray+Log.m in Sources */,
 				6BA08F4D2C01D05B00A2242D /* CWFileStreamSeparation.m in Sources */,
 				6BED888F2B4E901900F76DDC /* downloadFileRecordCell.m in Sources */,