public ulong GetFreeChunk(ulong offset) { // Check all loaded chunks foreach (KeyValuePair <ulong, Chunk> chk in loadedChunks) { if (!chk.Value.IsFull()) { return(chk.Key); } } // How about unloaded chunks? foreach (KeyValuePair <ulong, ChunkMetadata> chkmd in chunkMetadata) { if (loadedChunks.ContainsKey(chkmd.Key)) { continue; } if (chkmd.Value.TotalLength < settings.chunkSize) { return(chkmd.Key); } } // Still nothing? New chunk! ChunkMetadata nmd = new ChunkMetadata { chunkId = (ulong)chunkMetadata.Count, files = new Dictionary <string, FileMetadata>() }; chunkMetadata.Add((ulong)nmd.chunkId, nmd); return((ulong)nmd.chunkId); }
public void SaveChunkMetadata(ChunkMetadata metadata) { string content = JsonConvert.SerializeObject(metadata); File.WriteAllText(settings.basepath + settings.metafile + "\\chunk-" + metadata.chunkId + ".meta", content); }