网络游戏下载(更新)解压

需求需要进行游戏的下载和解压等一系列操作,一些研究结果如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSFileManager *filemanager = [NSFileManager defaultManager];
    //从系统偏好设置中取出游戏版本号
    NSString *version=[[NSUserDefaults standardUserDefaults]objectForKey:@"gameVersion"];
    //版本不为空,更新游戏
    if (version) {
// NSRange range= [version rangeOfString:@"="];
// NSString *versioNumber = [version substringFromIndex:range.location+1];
        //目录中存放的版本号
        NSInteger versionTxt = [self getVersionFromTxt];
        if ([version integerValue]<versionTxt) {

            //有新版本时,先删除旧版本
            if ([self deleteOldVersionGame]) {
                //删除成功,下载新版本游戏
                [self loadGameZipWithUrl:CDXGameUrl];
            }
        }
        else{
            //游戏的目录地址
            NSString * documentpath= [self getGamePath];
            //判断是否有游戏目录
            NSString* gamefilePath = [documentpath stringByAppendingString:@"/xxx"] ;
            if ([filemanager fileExistsAtPath:gamefilePath]) {
                //存在游戏目录加载游戏
                [self openLocalCDX];
            }
            else{
             //游戏目录不存在,需要下载游戏并解压
                [self loadGameZipWithUrl:XXXGameUrl];
            }
        }
    }
    else{
        //下载游戏,下载成功后解压
        [self loadGameZipWithUrl:XXXGameUrl];
    }
}

获取压缩包游戏地址

#pragma mark - 获取压缩包游戏地址
-(NSString *)getGamePath{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentpath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return documentpath;
}

下载游戏方法

#pragma mark -下载游戏
-(void)loadGameZipWithUrl:(NSString *)gameUrl{
    //初始化队列
    NSOperationQueue *queue = [[NSOperationQueue alloc ]init];
    //下载地址
    NSURL *url = [NSURL URLWithString:gameUrl];
    //下载游戏的本地地址
    NSString * documentpath= [self getGamePath];
    //存放zip路径
    NSString* unzipfilePath = [documentpath stringByAppendingString:@"/xxx.zip"];
    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc]initWithRequest:[NSURLRequest requestWithURL:url]];
    //设置存储路径
    op.outputStream = [NSOutputStream outputStreamToFileAtPath:unzipfilePath append:NO];
    // 下载进度
    [op setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
        CGFloat precent = (CGFloat)totalBytesRead / totalBytesExpectedToRead;
        //设置进度
        NSLog(@"process ==>%f",precent);
    }];

    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"下载成功");
        UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"提示" message:@"下载成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alertView show];

        //下载完成,解压游戏,并删除zip包
        [self unZipGame];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"下载失败");
        UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"提示" message:error delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alertView show];
    }];
    //开始下载
    [queue addOperation:op];
}

删除旧版本游戏

#pragma mark-删除旧版本游戏
-(BOOL)deleteOldVersionGame{
    NSFileManager *filemanager = [NSFileManager defaultManager];
    //下载游戏的本地地址
    NSString * documentpath= [self getGamePath];
    //删除就版本,判断是否有游戏目录
    NSString* gamefilePath = [documentpath stringByAppendingString:@"/xxx"] ;
    if ([filemanager fileExistsAtPath:gamefilePath]) {
        //删除本地游戏
        if ([filemanager removeItemAtPath:gamefilePath error:nil]) {
            NSLog(@"删除成功");
            return  YES;
        }
    }
    return  NO;
}

解压游戏,删除.zip,并存储游戏版本方法

#pragma mark-解压游戏,删除.zip,并存储游戏版本
-(void)unZipGame{
     NSFileManager *filemanager = [NSFileManager defaultManager];
    //下载游戏的本地地址
    NSString * documentpath= [self getGamePath];
    //被解压路径
    NSString* unzipfilePath = [documentpath stringByAppendingString:@"/xxx.zip"];
    if (unzipfilePath) {
        // 利用SSZipArchive解压
        BOOL isAlerady=[SSZipArchive unzipFileAtPath:unzipfilePath toDestination:documentpath];
        if (isAlerady&&[filemanager fileExistsAtPath:unzipfilePath]) { //解压成功删除.zip
            if ([filemanager removeItemAtPath:unzipfilePath error:nil]) {
                NSLog(@"删除成功");
            }
        }
    }

    //更新版本号,从文件中读取
    NSString *path = [documentpath stringByAppendingString:@"/xxx/version.txt"];
    //存入第一个版本信息
    if ([filemanager fileExistsAtPath:path]) {
        //读取文件
        NSData *data=[NSData dataWithContentsOfFile:path];
        NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@",dataString);
        [[NSUserDefaults standardUserDefaults]setValue:dataString forKey:@"gameVersion"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        //打开游戏
        [self openLocalXXX];
    }

}

打开游戏方法

#pragma mark-打开游戏
-(void)openLocalXXX{
// NSString *documentPaht = [self getGamePath];
    //加载本地游戏
    NSString * documentpath= [self getGamePath];
    NSString *path = [documentpath stringByAppendingString:@"/xxx/index.html"];

   NSURL * url=[NSURL URLWithString:path];

    GameWebController * gameWeb = [[GameWebController alloc]init];
    gameWeb.gameDetialUrl =url;
    [self.navigationController pushViewController:gameWeb animated:YES];
}

从游戏目录获取游戏版本号方法

#pragma mark-从游戏目录获取游戏版本号
-(NSInteger)getVersionFromTxt{
    NSFileManager *filemanager = [NSFileManager defaultManager];
    //下载游戏的本地地址
    NSString * documentpath= [self getGamePath];
    NSString *path = [documentpath stringByAppendingString:@"/xxx/version.txt"];
    //存入第一个版本信息
    if ([filemanager fileExistsAtPath:path]) {
        //读取文件
        NSData *data=[NSData dataWithContentsOfFile:path];
        NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@",dataString);
// NSRange range= [dataString rangeOfString:@"="];
// NSString *versioNumber = [dataString substringFromIndex:range.location+1];
// return [versioNumber integerValue];
         return [dataString integerValue];
    }
    return 0;
}

利用SSZipArchive解压缩的方法可以参考
http://blog.csdn.net/zww1984774346/article/details/50965665

你可能感兴趣的:(下载,解压,网络游戏,AFN)