123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- //
- // 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
|