public static void UnpackageArchive(string filename, AssetLoadedCallback assetCallback, TerrainLoadedCallback terrainCallback, SceneObjectLoadedCallback objectCallback) { int successfulAssetRestores = 0; int failedAssetRestores = 0; try { using (FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read)) { using (GZipStream loadStream = new GZipStream(fileStream, CompressionMode.Decompress)) { TarArchiveReader archive = new TarArchiveReader(loadStream); string filePath = "ERROR"; byte[] data; TarArchiveReader.TarEntryType entryType; while ((data = archive.ReadEntry(out filePath, out entryType)) != null) { if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH)) { // Deserialize the XML bytes LoadObjects(data, objectCallback, fileStream.Position, fileStream.Length); } else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) { if (LoadAsset(filePath, data, assetCallback, fileStream.Position, fileStream.Length)) successfulAssetRestores++; else failedAssetRestores++; } else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH)) { LoadTerrain(filePath, data, terrainCallback, fileStream.Position, fileStream.Length); } else if (filePath.StartsWith(ArchiveConstants.SETTINGS_PATH)) { // FIXME: Support this //LoadRegionSettings(filePath, data); } } archive.Close(); } } } catch (Exception e) { Logger.Log("[OarFile] Error loading OAR file: " + e.Message, Helpers.LogLevel.Error); return; } if (failedAssetRestores > 0) Logger.Log(String.Format("[OarFile]: Failed to load {0} assets", failedAssetRestores), Helpers.LogLevel.Warning); }
public static void UnpackageArchive(string filename, AssetLoadedCallback assetCallback, TerrainLoadedCallback terrainCallback, SceneObjectLoadedCallback objectCallback, SettingsLoadedCallback settingsCallback) { int successfulAssetRestores = 0; int failedAssetRestores = 0; try { using (FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read)) { using (GZipStream loadStream = new GZipStream(fileStream, CompressionMode.Decompress)) { TarArchiveReader archive = new TarArchiveReader(loadStream); string filePath; byte[] data; TarArchiveReader.TarEntryType entryType; while ((data = archive.ReadEntry(out filePath, out entryType)) != null) { if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH)) { // Deserialize the XML bytes if (objectCallback != null) { LoadObjects(data, objectCallback, fileStream.Position, fileStream.Length); } } else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) { if (assetCallback != null) { if (LoadAsset(filePath, data, assetCallback, fileStream.Position, fileStream.Length)) { successfulAssetRestores++; } else { failedAssetRestores++; } } } else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH)) { if (terrainCallback != null) { LoadTerrain(filePath, data, terrainCallback, fileStream.Position, fileStream.Length); } } else if (filePath.StartsWith(ArchiveConstants.SETTINGS_PATH)) { if (settingsCallback != null) { LoadRegionSettings(filePath, data, settingsCallback); } } } archive.Close(); } } } catch (Exception e) { Logger.Log("[OarFile] Error loading OAR file: " + e.Message, Helpers.LogLevel.Error); return; } if (failedAssetRestores > 0) { Logger.Log(String.Format("[OarFile]: Failed to load {0} assets", failedAssetRestores), Helpers.LogLevel.Warning); } }