Example #1
0
        public static void QueueWrite(Stream stream, byte[] data, long fileOffset, int dataOffset, long length, DiskIOWriteCallback callback,
                                      object state)
        {
            while (WriteQueue.Count > MaxPendingOps)
            {
                Thread.Sleep(10);
            }

            DiskIOWriteState writeData = WriteCache.Get().Init(stream, data, fileOffset, dataOffset, length, callback, state);

            WriteQueue.Enqueue(writeData);
            if (WriteQueue.Count > MinPendingOps)
            {
                IOHandle.Set();
            }
        }
Example #2
0
        private static void Write(DiskIOWriteState state)
        {
            try
            {
                lock (state.Data)
                {
                    if (!state.Stream.CanWrite)
                    {
                        throw new TorrentException("Stream unwritable.");
                    }

                    state.Stream.Seek(state.FileOffset, SeekOrigin.Begin);
                    state.Stream.Write(state.Data, state.DataOffset, (int)state.Length);
                    state.Callback(true, (int)state.Length, state.State);
                    WriteCache.Put(state);
                }
            }
            catch (Exception)
            {
                state.Callback(false, 0, state.State);
                WriteCache.Put(state);
            }
        }
Example #3
0
        private static void Write(DiskIOWriteState state)
        {
            try
            {
                lock (state.Data)
                {
                    if (!state.Stream.CanWrite) throw new TorrentException("Stream unwritable.");

                    state.Stream.Seek(state.FileOffset, SeekOrigin.Begin);
                    state.Stream.Write(state.Data, state.DataOffset, (int)state.Length);
                    state.Callback(true, (int)state.Length, state.State);
                    WriteCache.Put(state);
                }
            }
            catch (Exception)
            {
                state.Callback(false, 0, state.State);
                WriteCache.Put(state);
            }
        }