Exemplo n.º 1
0
        BitArray GetClientNAKState(ClientHost host, TarballStreamReader tarball)
        {
            Console.WriteLine("Receiving {0} files to '{1}':", tarball.Files.Count, downloadDirectory.FullName);
            foreach (var fi in tarball.Files)
            {
                Console.WriteLine("{0,15} {1}", fi.Length.ToString("##,#"), fi.RelativePath);
            }
            Console.WriteLine();
            Console.WriteLine("{0,15} chunks @ {1,13} bytes/chunk", host.NumChunks.ToString("##,0"), host.ChunkSize.ToString("##,0"));

            this.numChunks = host.NumChunks;
            int numChunkBytes = host.NumBytes;

            nakBuf = new byte[numChunkBytes];
            for (int i = 0; i < numChunkBytes; ++i)
            {
                nakBuf[i] = 0xFF;
            }

            if (!testMode)
            {
                localStateFile.Refresh();
                if (localStateFile.Exists)
                {
                    if (localStateStream != null)
                    {
                        localStateStream.Close();
                    }
                    localStateStream = localStateFile.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
                    if (localStateStream.Length != numChunkBytes)
                    {
                        localStateStream.Close();
                        Console.Error.WriteLine("Inconsistent state file. Overwriting with new state.");
                        localStateFile.Delete();
                        localStateFile.Refresh();
                    }
                    else
                    {
                        // Read the NAK state:
                        localStateStream.Seek(0L, SeekOrigin.Begin);
                        localStateStream.Read(nakBuf, 0, numChunkBytes);
                    }
                }

                localStateFile.Refresh();
                if (!localStateFile.Exists)
                {
                    // Create a new file and allocate enough space for storing a NAK bit array:
                    localStateStream = localStateFile.Open(FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read);
                    localStateStream.SetLength(numChunkBytes);
                    localStateStream.Seek(0L, SeekOrigin.Begin);
                    localStateStream.Write(nakBuf, 0, numChunkBytes);
                }
            }

            return(new BitArray(nakBuf).Clone() as BitArray);
        }
Exemplo n.º 2
0
 BitArray GetClientNAKState(ClientHost host, TarballStreamReader tarball)
 {
     // TODO: Copy over code from LCC to maintain resumable download state.
     return(new BitArray(host.NumBytes).Not());
 }
Exemplo n.º 3
0
 BitArray GetClientNAKState(ClientHost host, TarballStreamReader tarball)
 {
     // TODO: Copy over code from LCC to maintain resumable download state.
     return new BitArray(host.NumBytes).Not();
 }
Exemplo n.º 4
0
        BitArray GetClientNAKState(ClientHost host, TarballStreamReader tarball)
        {
            Console.WriteLine("Receiving {0} files to '{1}':", tarball.Files.Count, downloadDirectory.FullName);
            foreach (var fi in tarball.Files)
            {
                Console.WriteLine("{0,15} {1}", fi.Length.ToString("##,#"), fi.RelativePath);
            }
            Console.WriteLine();
            Console.WriteLine("{0,15} chunks @ {1,13} bytes/chunk", host.NumChunks.ToString("##,0"), host.ChunkSize.ToString("##,0"));

            this.numChunks = host.NumChunks;
            int numChunkBytes = host.NumBytes;
            nakBuf = new byte[numChunkBytes];
            for (int i = 0; i < numChunkBytes; ++i) nakBuf[i] = 0xFF;

            if (!testMode)
            {
                localStateFile.Refresh();
                if (localStateFile.Exists)
                {
                    if (localStateStream != null)
                    {
                        localStateStream.Close();
                    }
                    localStateStream = localStateFile.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
                    if (localStateStream.Length != numChunkBytes)
                    {
                        localStateStream.Close();
                        Console.Error.WriteLine("Inconsistent state file. Overwriting with new state.");
                        localStateFile.Delete();
                        localStateFile.Refresh();
                    }
                    else
                    {
                        // Read the NAK state:
                        localStateStream.Seek(0L, SeekOrigin.Begin);
                        localStateStream.Read(nakBuf, 0, numChunkBytes);
                    }
                }

                localStateFile.Refresh();
                if (!localStateFile.Exists)
                {
                    // Create a new file and allocate enough space for storing a NAK bit array:
                    localStateStream = localStateFile.Open(FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read);
                    localStateStream.SetLength(numChunkBytes);
                    localStateStream.Seek(0L, SeekOrigin.Begin);
                    localStateStream.Write(nakBuf, 0, numChunkBytes);
                }
            }

            return new BitArray(nakBuf).Clone() as BitArray;
        }