-
-
Save k0t0vich/3bbd12de00023c614108 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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