Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public void SaveChunkMetadata(ChunkMetadata metadata)
        {
            string content = JsonConvert.SerializeObject(metadata);

            File.WriteAllText(settings.basepath + settings.metafile + "\\chunk-" + metadata.chunkId + ".meta", content);
        }