// // webSocketManager+baseDownload.m // 双子星云手机 // // Created by xd h on 2024/6/20. // #import "webSocketManager+baseDownload.h" @implementation webSocketManager (baseDownload) // NSData转int - (int)data2Int:(NSData *)data{ Byte *byte = (Byte *)[data bytes]; // 有大小端模式问题? return (byte[0] << 24) + (byte[1] << 16) + (byte[2] << 8) + (byte[3]); } - (void)handleDownloadResponseFunBy:(id)message { NSData *curData = (NSData *)message; // if(curData.length < 20){ // return; // } //head NSData *headData = [curData subdataWithRange:NSMakeRange(0, 1)]; char head = 0;//104; [headData getBytes:&head length:sizeof(head)]; //HLog(@"head: %d",head); //msgType 0x11(17) NSData *msgTypeData = [curData subdataWithRange:NSMakeRange(1, 1)]; char msgType = 0; [msgTypeData getBytes:&msgType length:sizeof(msgType)]; HLog(@"msgType: %d",msgType); //taskId 6位字符串 NSData *taskIdData = [curData subdataWithRange:NSMakeRange(2, 6)]; NSString* taskIdStr = [[NSString alloc] initWithData:taskIdData encoding:NSUTF8StringEncoding];; HLog(@"taskId: %@",taskIdStr); if(curData.length <= 15){ HLog(@"消息长度不对不处理"); return; } //datalen NSData *datalenData = [curData subdataWithRange:NSMakeRange(8, 4)]; int datalen = [self data2Int:datalenData]; //HLog(@"datalen: %d",datalen); //curNum NSData *curNumData = [curData subdataWithRange:NSMakeRange(12, 4)]; int curNum = [self data2Int:curNumData];; //HLog(@"curNum: %d",curNum); //totalNum NSData *totalNumData = [curData subdataWithRange:NSMakeRange(16, 4)]; int totalNum = [self data2Int:totalNumData]; //HLog(@"totalNum: %d",totalNum); BOOL isDownloadDone = curNum == totalNum ? YES : NO; HLog(@"taskUid:%@ curNum:%d totalNum: %d datalen:%d isDownloadDone:%d",taskIdStr,curNum,totalNum,datalen -8,isDownloadDone); if(curData.length <= 23){ //data 的位置 装 成功或者失败 NSData *failTypeData = [curData subdataWithRange:NSMakeRange(20, 1)]; //0xcc (204)失败 0xcd (205)文件不存在 0xdd (221)完成 0xbb 187 完成 __block Byte failType; [failTypeData getBytes:&failType length:sizeof(failType)]; if(taskIdStr && [taskIdStr isEqualToString:self.downloadFileTaskUid]){ if(failType == 0xcc || failType == 0xcf){ [[downloadManager shareInstance] DownloadFileFailOneFileFun]; } else if(failType == 0xcd ){ [[downloadManager shareInstance] suspendDownloadFileFun:YES withModel:nil]; NSString *tipStr = NSLocalizedString(@"disk_not_find_tip",nil); mainBlock(^{ [[iToast makeText:tipStr] show]; }); } else if(failType == 0xdd || failType == 0xbb){ [self downloadFileFunServiceResponseFun:[NSData new] with:YES]; } else{ HLog(@"下载数据未知错误"); [[downloadManager shareInstance] DownloadFileFailOneFileFun]; } } return; } if(curData.length <= (20 + datalen - 8)){ HLog(@"下载数据解析出错了"); return; } NSData *fileData = [curData subdataWithRange:NSMakeRange(20, datalen-8)]; if([taskIdStr isEqualToString:self.downloadFileTaskUid]){ [self downloadFileFunServiceResponseFun:fileData with:NO]; } else if ([taskIdStr isEqualToString:self.downloadThumbnailTaskUid]){ [self downloadThumbnailFileFunServiceResponseFun:fileData with:YES]; } } @end