Skip to content

Instantly share code, notes, and snippets.

@k0t0vich
Created January 22, 2016 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save k0t0vich/3bbd12de00023c614108 to your computer and use it in GitHub Desktop.
Save k0t0vich/3bbd12de00023c614108 to your computer and use it in GitHub Desktop.
private function writeNextFile():void {
Tracer.add("DownloadTarResourcesCommand.writeNextFile:",_filesToWriteCount, _filesToWrite.length, MAX_FILES_TO_WRITE, _totalFilesToWriteCount);
var tarFile:TarFile;
if (_filesToWriteCount <= MAX_FILES_TO_WRITE && _filesToWrite.length > 0){
tarFile = _filesToWrite.pop();
_filesToWriteCount++;
var path: String = _context.hash[tarFile.name].md5Name;
var file: File = _context.urlRewriter.baseDir.resolvePath(path);
file.preventBackup = true;
var data: ByteArray = tarFile.data;
var fileStream: FileStream = new FileStream();
var fileStreamClear:Function = function():void {
fileStream.removeEventListener(IOErrorEvent.IO_ERROR, fileStreamError);
fileStream.removeEventListener(OutputProgressEvent.OUTPUT_PROGRESS, fileStreamComplete);
fileStream.close();
}
var fileStreamComplete:Function = function(e:Event = null):void {
_so.data.downloaded[tarFile.name] = {name: path};
_filesToWriteCount--;
_loaded++;
fileStreamClear();
data.clear();
Tracer.add("fileStreamComplete", path,_loaded, _total);
dispatchEvent(new ProgressEvent(ProgressEvent.PROGRESS, false, false, _loaded, _total));
if (_loaded >= _total)
updateCompleteHandler();
else
writeNextFile();
};
var fileStreamError:Function = function(e:Event = null):void {
fileStreamClear();
// уменьшаем число потоков и пробуем записать ещё раз
if (MAX_FILES_TO_WRITE > 1)
MAX_FILES_TO_WRITE--;
_filesToWriteCount--;
_filesToWrite.push(tarFile);
Tracer.add("fileStreamError", path, _filesToWriteCount, _filesToWrite.length, MAX_FILES_TO_WRITE, data.length);
setTimeout(writeNextFile, 500);
};
fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, fileStreamComplete);
fileStream.addEventListener(IOErrorEvent.IO_ERROR, fileStreamError);
Tracer.add("fileStreamStart", path, data.length);
fileStream.openAsync(file, FileMode.WRITE);
fileStream.writeBytes(data, 0, data.length);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment