private void OnLoadReadWriteVersionListSuccess(string fileUri, byte[] bytes, float duration, object userData) { MemoryStream memoryStream = null; try { memoryStream = new MemoryStream(bytes, false); LocalVersionList versionList = m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream); if (!versionList.IsValid) { throw new GameFrameworkException("Deserialize read write version list failure."); } LocalVersionList.Resource[] resources = versionList.GetResources(); LocalVersionList.FileSystem[] fileSystems = versionList.GetFileSystems(); Dictionary <ResourceName, string> resourceInFileSystemNames = new Dictionary <ResourceName, string>(); foreach (LocalVersionList.FileSystem fileSystem in fileSystems) { int[] resourceIndexes = fileSystem.GetResourceIndexes(); foreach (int resourceIndex in resourceIndexes) { LocalVersionList.Resource resource = resources[resourceIndex]; resourceInFileSystemNames.Add(new ResourceName(resource.Name, resource.Variant, resource.Extension), fileSystem.Name); } } long totalLength = 0L; foreach (LocalVersionList.Resource resource in resources) { ResourceName resourceName = new ResourceName(resource.Name, resource.Variant, resource.Extension); string fileSystemName = null; resourceInFileSystemNames.TryGetValue(resourceName, out fileSystemName); totalLength += resource.Length; m_VerifyInfos.Add(new VerifyInfo(resourceName, fileSystemName, (LoadType)resource.LoadType, resource.Length, resource.HashCode)); } m_LoadReadWriteVersionListComplete = true; if (ResourceVerifyStart != null) { ResourceVerifyStart(m_VerifyInfos.Count, totalLength); } } catch (Exception exception) { if (exception is GameFrameworkException) { throw; } throw new GameFrameworkException(Utility.Text.Format("Parse read-write version list exception '{0}'.", exception), exception); } finally { if (memoryStream != null) { memoryStream.Dispose(); memoryStream = null; } } }
private void OnLoadReadWriteVersionListSuccess(string fileUri, byte[] bytes, float duration, object userData) { if (m_ReadWriteVersionListReady) { throw new GameFrameworkException("Read write version list has been parsed."); } MemoryStream memoryStream = null; try { memoryStream = new MemoryStream(bytes, false); LocalVersionList versionList = m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream); if (!versionList.IsValid) { throw new GameFrameworkException("Deserialize read write version list failure."); } LocalVersionList.Resource[] resources = versionList.GetResources(); LocalVersionList.FileSystem[] fileSystems = versionList.GetFileSystems(); foreach (LocalVersionList.FileSystem fileSystem in fileSystems) { int[] resourceIndexes = fileSystem.GetResourceIndexes(); foreach (int resourceIndex in resourceIndexes) { LocalVersionList.Resource resource = resources[resourceIndex]; SetCachedFileSystemName(new ResourceName(resource.Name, resource.Variant, resource.Extension), fileSystem.Name); } } foreach (LocalVersionList.Resource resource in resources) { ResourceName resourceName = new ResourceName(resource.Name, resource.Variant, resource.Extension); SetReadWriteInfo(resourceName, (LoadType)resource.LoadType, resource.Length, resource.HashCode); } m_ReadWriteVersionListReady = true; RefreshCheckInfoStatus(); } catch (Exception exception) { if (exception is GameFrameworkException) { throw; } throw new GameFrameworkException(Utility.Text.Format("Parse read write version list exception '{0}'.", exception.ToString()), exception); } finally { if (memoryStream != null) { memoryStream.Dispose(); memoryStream = null; } } }
/// <summary> /// 解析读写区版本资源列表。 /// </summary> /// <param name="fileUri">读写区版本资源列表文件路径。</param> /// <param name="bytes">要解析的数据。</param> /// <param name="errorMessage">错误信息。</param> private void ParseReadWriteVersionList(string fileUri, byte[] bytes, string errorMessage) { if (m_ReadWriteVersionListReady) { throw new GameFrameworkException("Read write version list has been parsed."); } if (bytes == null || bytes.Length <= 0) { m_ReadWriteVersionListReady = true; RefreshCheckInfoStatus(); return; } MemoryStream memoryStream = null; try { memoryStream = new MemoryStream(bytes, false); LocalVersionList versionList = m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream); if (!versionList.IsValid) { throw new GameFrameworkException("Deserialize read write version list failure."); } LocalVersionList.Resource[] resources = versionList.GetResources(); foreach (LocalVersionList.Resource resource in resources) { ResourceName resourceName = new ResourceName(resource.Name, resource.Variant); SetReadWriteInfo(resourceName, (LoadType)resource.LoadType, resource.Length, resource.HashCode); m_ResourceManager.m_ReadWriteResourceInfos.Add(resourceName, new ReadWriteResourceInfo((LoadType)resource.LoadType, resource.Length, resource.HashCode)); } m_ReadWriteVersionListReady = true; RefreshCheckInfoStatus(); } catch (Exception exception) { if (exception is GameFrameworkException) { throw; } throw new GameFrameworkException(Utility.Text.Format("Parse read write version list exception '{0}'.", exception.ToString()), exception); } finally { if (memoryStream != null) { memoryStream.Dispose(); memoryStream = null; } } }
private void GenerateReadWriteVersionList() { if (File.Exists(m_ReadWriteVersionListFileName)) { if (File.Exists(m_ReadWriteVersionListBackupFileName)) { File.Delete(m_ReadWriteVersionListBackupFileName); } File.Move(m_ReadWriteVersionListFileName, m_ReadWriteVersionListBackupFileName); } FileStream fileStream = null; try { fileStream = new FileStream(m_ReadWriteVersionListFileName, FileMode.CreateNew, FileAccess.Write); LocalVersionList.Resource[] resources = m_ResourceManager.m_ReadWriteResourceInfos.Count > 0 ? new LocalVersionList.Resource[m_ResourceManager.m_ReadWriteResourceInfos.Count] : null; if (resources != null) { int index = 0; foreach (KeyValuePair <ResourceName, ReadWriteResourceInfo> i in m_ResourceManager.m_ReadWriteResourceInfos) { resources[index++] = new LocalVersionList.Resource(i.Key.Name, i.Key.Variant, i.Key.Extension, (byte)i.Value.LoadType, i.Value.Length, i.Value.HashCode); } } LocalVersionList versionList = new LocalVersionList(resources); if (!m_ResourceManager.m_ReadWriteVersionListSerializer.Serialize(fileStream, versionList)) { throw new GameFrameworkException("Serialize read write version list failure."); } if (fileStream != null) { fileStream.Dispose(); fileStream = null; } if (!string.IsNullOrEmpty(m_ReadWriteVersionListBackupFileName)) { File.Delete(m_ReadWriteVersionListBackupFileName); } } catch (Exception exception) { if (fileStream != null) { fileStream.Dispose(); fileStream = null; } if (File.Exists(m_ReadWriteVersionListFileName)) { File.Delete(m_ReadWriteVersionListFileName); } if (!string.IsNullOrEmpty(m_ReadWriteVersionListBackupFileName)) { File.Move(m_ReadWriteVersionListBackupFileName, m_ReadWriteVersionListFileName); } throw new GameFrameworkException(Utility.Text.Format("Generate read write version list exception '{0}'.", exception.ToString()), exception); } }
private void GenerateReadWriteVersionList() { FileStream fileStream = null; try { fileStream = new FileStream(m_ReadWriteVersionListTempFileName, FileMode.Create, FileAccess.Write); LocalVersionList.Resource[] resources = m_ResourceManager.m_ReadWriteResourceInfos.Count > 0 ? new LocalVersionList.Resource[m_ResourceManager.m_ReadWriteResourceInfos.Count] : null; if (resources != null) { int index = 0; foreach (KeyValuePair <ResourceName, ReadWriteResourceInfo> i in m_ResourceManager.m_ReadWriteResourceInfos) { resources[index] = new LocalVersionList.Resource(i.Key.Name, i.Key.Variant, i.Key.Extension, (byte)i.Value.LoadType, i.Value.Length, i.Value.HashCode); if (i.Value.UseFileSystem) { List <int> resourceIndexes = null; if (!m_CachedFileSystemsForGenerateReadWriteVersionList.TryGetValue(i.Value.FileSystemName, out resourceIndexes)) { resourceIndexes = new List <int>(); m_CachedFileSystemsForGenerateReadWriteVersionList.Add(i.Value.FileSystemName, resourceIndexes); } resourceIndexes.Add(index); } index++; } } LocalVersionList.FileSystem[] fileSystems = m_CachedFileSystemsForGenerateReadWriteVersionList.Count > 0 ? new LocalVersionList.FileSystem[m_CachedFileSystemsForGenerateReadWriteVersionList.Count] : null; if (fileSystems != null) { int index = 0; foreach (KeyValuePair <string, List <int> > i in m_CachedFileSystemsForGenerateReadWriteVersionList) { fileSystems[index++] = new LocalVersionList.FileSystem(i.Key, i.Value.ToArray()); i.Value.Clear(); } } LocalVersionList versionList = new LocalVersionList(resources, fileSystems); if (!m_ResourceManager.m_ReadWriteVersionListSerializer.Serialize(fileStream, versionList)) { throw new GameFrameworkException("Serialize read-write version list failure."); } if (fileStream != null) { fileStream.Dispose(); fileStream = null; } } catch (Exception exception) { if (fileStream != null) { fileStream.Dispose(); fileStream = null; } if (File.Exists(m_ReadWriteVersionListTempFileName)) { File.Delete(m_ReadWriteVersionListTempFileName); } throw new GameFrameworkException(Utility.Text.Format("Generate read-write version list exception '{0}'.", exception.ToString()), exception); } if (File.Exists(m_ReadWriteVersionListFileName)) { File.Delete(m_ReadWriteVersionListFileName); } File.Move(m_ReadWriteVersionListTempFileName, m_ReadWriteVersionListFileName); m_CurrentGenerateReadWriteVersionListLength = 0; }
private void GenerateReadWriteVersionList() { string readWriteVersionListFileName = Utility.Path.GetRegularPath(Path.Combine(m_ResourceManager.m_ReadWritePath, LocalVersionListFileName)); string readWriteVersionListTempFileName = Utility.Text.Format("{0}.{1}", readWriteVersionListFileName, TempExtension); SortedDictionary <string, List <int> > cachedFileSystemsForGenerateReadWriteVersionList = new SortedDictionary <string, List <int> >(StringComparer.Ordinal); FileStream fileStream = null; try { fileStream = new FileStream(readWriteVersionListTempFileName, FileMode.Create, FileAccess.Write); LocalVersionList.Resource[] resources = m_VerifyInfos.Count > 0 ? new LocalVersionList.Resource[m_VerifyInfos.Count] : null; if (resources != null) { int index = 0; foreach (VerifyInfo i in m_VerifyInfos) { resources[index] = new LocalVersionList.Resource(i.ResourceName.Name, i.ResourceName.Variant, i.ResourceName.Extension, (byte)i.LoadType, i.Length, i.HashCode); if (i.UseFileSystem) { List <int> resourceIndexes = null; if (!cachedFileSystemsForGenerateReadWriteVersionList.TryGetValue(i.FileSystemName, out resourceIndexes)) { resourceIndexes = new List <int>(); cachedFileSystemsForGenerateReadWriteVersionList.Add(i.FileSystemName, resourceIndexes); } resourceIndexes.Add(index); } index++; } } LocalVersionList.FileSystem[] fileSystems = cachedFileSystemsForGenerateReadWriteVersionList.Count > 0 ? new LocalVersionList.FileSystem[cachedFileSystemsForGenerateReadWriteVersionList.Count] : null; if (fileSystems != null) { int index = 0; foreach (KeyValuePair <string, List <int> > i in cachedFileSystemsForGenerateReadWriteVersionList) { fileSystems[index++] = new LocalVersionList.FileSystem(i.Key, i.Value.ToArray()); i.Value.Clear(); } } LocalVersionList versionList = new LocalVersionList(resources, fileSystems); if (!m_ResourceManager.m_ReadWriteVersionListSerializer.Serialize(fileStream, versionList)) { throw new GameFrameworkException("Serialize read-write version list failure."); } if (fileStream != null) { fileStream.Dispose(); fileStream = null; } } catch (Exception exception) { if (fileStream != null) { fileStream.Dispose(); fileStream = null; } if (File.Exists(readWriteVersionListTempFileName)) { File.Delete(readWriteVersionListTempFileName); } throw new GameFrameworkException(Utility.Text.Format("Generate read-write version list exception '{0}'.", exception), exception); } if (File.Exists(readWriteVersionListFileName)) { File.Delete(readWriteVersionListFileName); } File.Move(readWriteVersionListTempFileName, readWriteVersionListFileName); }