private static bool LoadRegionSettings(string filePath, byte[] data, SettingsLoadedCallback settingsCallback) { RegionSettings settings = null; bool loaded = false; try { using (MemoryStream stream = new MemoryStream(data)) settings = RegionSettings.FromStream(stream); loaded = true; } catch (Exception ex) { Logger.Log("[OarFile] Failed to parse region settings file " + filePath + ": " + ex.Message, Helpers.LogLevel.Warning); } // Parse the region name out of the filename string regionName = Path.GetFileNameWithoutExtension(filePath); if (loaded) { settingsCallback(regionName, settings); } return(loaded); }
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); }
private static bool LoadRegionSettings(string filePath, byte[] data, SettingsLoadedCallback settingsCallback) { RegionSettings settings = null; bool loaded = false; try { using (MemoryStream stream = new MemoryStream(data)) settings = RegionSettings.FromStream(stream); loaded = true; } catch (Exception ex) { Logger.Log("[OarFile] Failed to parse region settings file " + filePath + ": " + ex.Message, Helpers.LogLevel.Warning); } // Parse the region name out of the filename string regionName = Path.GetFileNameWithoutExtension(filePath); if (loaded) settingsCallback(regionName, settings); return loaded; }
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); } }