Author: alanmc
Date: 2008-02-09 20:50:57 -0500 (Sat, 09 Feb 2008)
New Revision: 95352
Added:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/PieceData.cs
Removed:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/BufferedFileWrite.cs
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/EventArgs/BlockEventArgs.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/FileManager.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/PieceManager.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/StandardMessages/PieceMessage.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/PiecePickerBase.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/StandardPicker.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/DiskWriter.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/IPieceWriter.cs
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/MemoryWriter.cs
trunk/bitsharp/src/SampleClient/TestManualConnection.cs
Log:
Refactored the way i keep track of the data for AsyncWrites. Much cleaner now.
Deleted: trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/BufferedFileWrite.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/BufferedFileWrite.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/BufferedFileWrite.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using MonoTorrent.Common;
-using System.Threading;
-using MonoTorrent.Client.Messages;
-
-namespace MonoTorrent.Client
-{
- public class BufferedIO
- {
- #region Fields
-
- public ArraySegment<byte> Buffer;
- internal PeerIdInternal Id;
- public PeerMessage Message;
- public Piece Piece;
- public ManualResetEvent WaitHandle;
-
- #endregion Fields
-
-
- #region Constructors
-
- internal BufferedIO(PeerIdInternal id, ArraySegment<byte> buffer,
PeerMessage message, Piece piece)
- : this(id, buffer, message, piece, null)
- {
-
- }
-
- internal BufferedIO(PeerIdInternal id, ArraySegment<byte> buffer,
PeerMessage message, Piece piece, ManualResetEvent handle)
- {
- this.Id = id;
- this.Buffer = buffer;
- this.Message = message;
- this.Piece = piece;
- this.WaitHandle = handle;
- }
-
- #endregion Constructors
- }
-}
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/EventArgs/BlockEventArgs.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/EventArgs/BlockEventArgs.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/EventArgs/BlockEventArgs.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -56,16 +56,28 @@
internal BlockEventArgs(TorrentManager manager, Block block, Piece
piece, PeerId id)
: base(manager)
{
- this.block = block;
- this.id = id;
- this.piece = piece;
+ Init(block, piece, id);
}
+ internal BlockEventArgs(PieceData data)
+ : base(data.Id.TorrentManager)
+ {
+ Block b =
data.Piece[PiecePickerBase.GetBlockIndex(data.Piece.Blocks, data.StartOffset,
data.Count)];
+ Init(b, data.Piece, data.Id.PublicId);
+ }
internal BlockEventArgs(TorrentManager manager, Block block, Piece
piece, PeerIdInternal id)
- :this(manager, block, piece, id.PublicId)
+ : base(manager)
{
+ Init(block, piece, id.PublicId);
}
+ private void Init(Block block, Piece piece, PeerId id)
+ {
+ this.block = block;
+ this.id = id;
+ this.piece = piece;
+ }
+
#endregion
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -15,7 +15,7 @@
#region Member Variables
Queue<BufferedFileRead> bufferedReads;
- Queue<BufferedIO> bufferedWrites;
+ Queue<PieceData> bufferedWrites;
private ClientEngine engine;
private ConnectionMonitor monitor;
@@ -76,7 +76,7 @@
internal DiskManager(ClientEngine engine, IPieceWriter writer)
{
this.bufferedReads = new Queue<BufferedFileRead>();
- this.bufferedWrites = new Queue<BufferedIO>();
+ this.bufferedWrites = new Queue<PieceData>();
this.engine = engine;
this.ioActive = true;
this.ioThread = new Thread(new ThreadStart(RunIO));
@@ -113,26 +113,21 @@
/// Performs the buffered write
/// </summary>
/// <param name="bufferedFileIO"></param>
- private void PerformWrite(BufferedIO bufferedFileIO)
+ private void PerformWrite(PieceData data)
{
- PeerIdInternal id = bufferedFileIO.Id;
- ArraySegment<byte> recieveBuffer = bufferedFileIO.Buffer;
- PieceMessage message = (PieceMessage)bufferedFileIO.Message;
- Piece piece = bufferedFileIO.Piece;
+ PeerIdInternal id = data.Id;
+ ArraySegment<byte> recieveBuffer = data.Buffer;
+ Piece piece = data.Piece;
// Find the block that this data belongs to and set it's state to
"Written"
- int index = PiecePickerBase.GetBlockIndex(piece.Blocks,
message.StartOffset, message.RequestLength);
+ int index = data.BlockIndex;
// Perform the actual write
using (new ReaderLock(this.streamsLock))
- {
- // Calculate the index where we will start to write the data
- long writeIndex = (long)message.PieceIndex *
message.PieceLength + message.StartOffset;
- writer.Write(bufferedFileIO, recieveBuffer.Array,
recieveBuffer.Offset, writeIndex, message.RequestLength);
- }
+ writer.Write(data);
piece.Blocks[index].Written = true;
- id.TorrentManager.FileManager.RaiseBlockWritten(new
BlockEventArgs(id.TorrentManager, piece.Blocks[index], piece, id));
+ id.TorrentManager.FileManager.RaiseBlockWritten(new
BlockEventArgs(data));
// Release the buffer back into the buffer manager.
//ClientEngine.BufferManager.FreeBuffer(ref bufferedFileIO.Buffer);
@@ -144,7 +139,7 @@
// Hashcheck the piece as we now have all the blocks.
bool result =
id.TorrentManager.Torrent.Pieces.IsValid(id.TorrentManager.FileManager.GetHash(piece.Index,
false), piece.Index);
- id.TorrentManager.Bitfield[message.PieceIndex] = result;
+ id.TorrentManager.Bitfield[data.PieceIndex] = result;
lock (id.TorrentManager.PieceManager.UnhashedPieces)
id.TorrentManager.PieceManager.UnhashedPieces[piece.Index] =
false;
@@ -182,7 +177,6 @@
return writer.Read(fileManager, buffer, bufferOffset,
pieceStartIndex, bytesToRead);
}
-
/// <summary>
/// Queues a block of data to be written asynchronously
/// </summary>
@@ -190,18 +184,11 @@
/// <param name="recieveBuffer">The array containing the block</param>
/// <param name="message">The PieceMessage</param>
/// <param name="piece">The piece that the block to be written is part
of</param>
- internal void QueueWrite(PeerIdInternal id, ArraySegment<byte>
recieveBuffer, PieceMessage message, Piece piece)
+ internal void QueueWrite(PieceData data)
{
lock (this.queueLock)
{
- // Request a new buffer from the buffermanager and copy the
data from the receive buffer
- // into this new buffer. This is needed as the main code will
automatically release the receive buffer
- // and we will lose the data.
- ArraySegment<byte> buffer = BufferManager.EmptyBuffer;
- ClientEngine.BufferManager.GetBuffer(ref buffer,
recieveBuffer.Count);
- Buffer.BlockCopy(recieveBuffer.Array, recieveBuffer.Offset,
buffer.Array, buffer.Offset, recieveBuffer.Count);
-
- bufferedWrites.Enqueue(new BufferedIO(id, buffer, message,
piece));
+ bufferedWrites.Enqueue(data);
SetHandleState(true);
}
}
@@ -222,7 +209,7 @@
/// </summary>
private void RunIO()
{
- BufferedIO write;
+ PieceData write;
BufferedFileRead read;
while (ioActive)
{
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/FileManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/FileManager.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/FileManager.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -319,9 +319,9 @@
/// <param name="recieveBuffer">The array containing the block</param>
/// <param name="message">The PieceMessage</param>
/// <param name="piece">The piece that the block to be written is part
of</param>
- internal void QueueWrite(PeerIdInternal id, ArraySegment<byte>
recieveBuffer, PieceMessage message, Piece piece)
+ internal void QueueWrite(PieceData data)
{
- manager.Engine.DiskManager.QueueWrite(id, recieveBuffer, message,
piece);
+ manager.Engine.DiskManager.QueueWrite(data);
}
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/PieceManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/PieceManager.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Managers/PieceManager.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -186,10 +186,9 @@
this.piecePicker.RemoveRequests(id);
}
-
- internal PieceEvent ReceivedPieceMessage(PeerIdInternal id,
ArraySegment<byte> buffer, PieceMessage message)
+ internal PieceEvent ReceivedPieceMessage(PieceData data)
{
- return this.piecePicker.ReceivedPieceMessage(id, buffer, message);
+ return this.piecePicker.ReceivedPieceMessage(data);
}
internal void Reset()
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/StandardMessages/PieceMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/StandardMessages/PieceMessage.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/StandardMessages/PieceMessage.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -34,9 +34,6 @@
namespace MonoTorrent.Client.Messages.Standard
{
- /// <summary>
- ///
- /// </summary>
public class PieceMessage : PeerMessage
{
public const byte MessageId = 7;
@@ -148,6 +145,7 @@
this.dataOffset = offset;
+ // This buffer will be freed after the PieceWriter has finished
with it
this.data = BufferManager.EmptyBuffer;
ClientEngine.BufferManager.GetBuffer(ref this.data, requestLength);
Buffer.BlockCopy(buffer, offset, this.data.Array,
this.data.Offset, requestLength);
@@ -209,22 +207,16 @@
/// <param name="id">The Peer who's message will be handled</param>
internal override void Handle(PeerIdInternal id)
{
- try
- {
- id.TorrentManager.PieceManager.ReceivedPieceMessage(id,
this.data, this);
+ PieceData d = new PieceData(data, pieceIndex, startOffset,
requestLength, id);
+ id.TorrentManager.PieceManager.ReceivedPieceMessage(d);
- // Keep adding new piece requests to this peers queue until we
reach the max pieces we're allowed queue
- while (id.TorrentManager.PieceManager.AddPieceRequest(id)) { }
+ // Keep adding new piece requests to this peers queue until we
reach the max pieces we're allowed queue
+ while (id.TorrentManager.PieceManager.AddPieceRequest(id)) { }
- if (!id.Connection.ProcessingQueue)
- {
- id.Connection.ProcessingQueue = true;
- id.ConnectionManager.MessageHandler.EnqueueSend(id);
- }
- }
- finally
+ if (!id.Connection.ProcessingQueue)
{
- ClientEngine.BufferManager.FreeBuffer(ref this.data);
+ id.Connection.ProcessingQueue = true;
+ id.ConnectionManager.MessageHandler.EnqueueSend(id);
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/PiecePickerBase.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/PiecePickerBase.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/PiecePickerBase.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -69,7 +69,7 @@
public abstract RequestMessage PickPiece(PeerIdInternal id,
List<PeerIdInternal> otherPeers);
public abstract void ReceivedChokeMessage(PeerIdInternal id);
public abstract void ReceivedRejectRequest(PeerIdInternal id,
RejectRequestMessage message);
- public abstract PieceEvent ReceivedPieceMessage(PeerIdInternal id,
ArraySegment<byte> buffer, PieceMessage message);
+ public abstract PieceEvent ReceivedPieceMessage(PieceData data);
public abstract void RemoveRequests(PeerIdInternal id);
public abstract void Reset();
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/StandardPicker.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/StandardPicker.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PiecePicking/StandardPicker.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -588,19 +588,21 @@
/// <param name="offset"></param>
/// <param name="writeIndex"></param>
/// <param name="p"></param>
- public override PieceEvent ReceivedPieceMessage(PeerIdInternal id,
ArraySegment<byte> recieveBuffer, PieceMessage message)
+ public override PieceEvent ReceivedPieceMessage(PieceData data)
{
+ PeerIdInternal id = data.Id;
lock (this.requests)
{
- Piece piece = requests.Find(delegate(Piece p) { return p.Index
== message.PieceIndex; });
+ Piece piece = requests.Find(delegate(Piece p) { return p.Index
== data.PieceIndex; });
+ data.Piece = piece;
if (piece == null)
{
- Logger.Log(id.Connection.Connection, "Received block from
unrequested piece");
+ Logger.Log(data.Id.Connection.Connection, "Received block
from unrequested piece");
return PieceEvent.BlockNotRequested;
}
// Pick out the block that this piece message belongs to
- int blockIndex = PiecePickerBase.GetBlockIndex(piece.Blocks,
message.StartOffset, message.RequestLength);
+ int blockIndex = PiecePickerBase.GetBlockIndex(piece.Blocks,
data.StartOffset, data.Count);
if (blockIndex == -1 ||
!id.Equals(piece.Blocks[blockIndex].RequestedOff))
{
Logger.Log(id.Connection.Connection, "Invalid block start
offset returned");
@@ -623,8 +625,8 @@
piece.Blocks[blockIndex].Received = true;
id.Connection.AmRequestingPiecesCount--;
- id.TorrentManager.PieceManager.RaiseBlockReceived(new
BlockEventArgs(id.TorrentManager, piece.Blocks[blockIndex], piece, id));
- id.TorrentManager.FileManager.QueueWrite(id, recieveBuffer,
message, piece);
+ id.TorrentManager.PieceManager.RaiseBlockReceived(new
BlockEventArgs(data));
+ id.TorrentManager.FileManager.QueueWrite(data);
if (piece.AllBlocksReceived)
{
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/DiskWriter.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/DiskWriter.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/DiskWriter.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -88,9 +88,13 @@
return totalRead;
}
- public void Write(BufferedIO io, byte[] buffer, int bufferOffset, long
offset, int count)
+ public void Write(PieceData data)
{
- FileManager manager = io.Id.TorrentManager.FileManager;
+ byte[] buffer = data.Buffer.Array;
+ long offset = data.WriteOffset;
+ int count = data.Count;
+
+ FileManager manager = data.Id.TorrentManager.FileManager;
if (buffer == null)
throw new ArgumentNullException("buffer");
@@ -128,7 +132,7 @@
bytesWritten = ((count - totalWritten) > bytesWeCanWrite)
? bytesWeCanWrite : (count - totalWritten);
// Write the data
- stream.Write(buffer, bufferOffset + (int)totalWritten,
(int)bytesWritten);
+ stream.Write(buffer, data.Buffer.Offset +
(int)totalWritten, (int)bytesWritten);
stream.Flush();
// Any further data should be written to the next
available file
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/IPieceWriter.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/IPieceWriter.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/IPieceWriter.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -9,7 +9,7 @@
{
int Read(FileManager manager, byte[] buffer, int bufferOffset, long
offset, int count);
- void Write(BufferedIO io, byte[] buffer, int bufferOffset, long
offset, int count);
+ void Write(PieceData data);
void CloseFileStreams(TorrentManager manager);
Modified:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/MemoryWriter.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/MemoryWriter.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/MemoryWriter.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -6,29 +6,10 @@
namespace MonoTorrent.Client.PieceWriter
{
- internal class MemIO
- {
- public FileManager manager;
- public byte[] buffer;
- public int bufferOffset;
- public long offset;
- public int count;
- public BufferedIO io;
-
- public MemIO(FileManager manager, BufferedIO io, byte[] buffer, int
bufferOffset, long offset, int count)
- {
- this.manager = manager;
- this.io = io;
- this.buffer = buffer;
- this.bufferOffset = bufferOffset;
- this.offset = offset;
- this.count = count;
- }
- }
public class MemoryWriter : IPieceWriter
{
private int capacity;
- private List<MemIO> memoryBuffer;
+ private List<PieceData> memoryBuffer;
private IPieceWriter writer;
@@ -42,7 +23,7 @@
get
{
int count = 0;
- memoryBuffer.ForEach(delegate(MemIO i) { count += i.count; });
+ memoryBuffer.ForEach(delegate(PieceData i) { count += i.Count;
});
return count;
}
}
@@ -61,7 +42,7 @@
if (capacity < 0)
throw new ArgumentOutOfRangeException("capacity");
- memoryBuffer = new List<MemIO>();
+ memoryBuffer = new List<PieceData>();
this.capacity = capacity;
this.writer = writer;
}
@@ -77,12 +58,12 @@
int origCount = count;
while (count != 0)
{
- memoryBuffer.Sort(delegate(MemIO left, MemIO right) { return
left.offset.CompareTo(right.offset); });
- MemIO io = memoryBuffer.Find(delegate(MemIO m) { return
((offset >= m.offset) && (offset < (m.offset + m.count))); });
+ memoryBuffer.Sort(delegate(PieceData left, PieceData right) {
return left.WriteOffset.CompareTo(right.WriteOffset); });
+ PieceData io = memoryBuffer.Find(delegate(PieceData m) {
return ((offset >= m.WriteOffset) && (offset < (m.WriteOffset + m.Count))); });
if (io != null)
{
- int toCopy = Math.Min(count, io.count + (int)(io.offset -
offset));
- Buffer.BlockCopy(io.buffer, io.bufferOffset +
(int)(io.offset - offset), buffer, bufferOffset + (origCount - count), toCopy);
+ int toCopy = Math.Min(count, io.Count +
(int)(io.WriteOffset - offset));
+ Buffer.BlockCopy(io.Buffer.Array, io.Buffer.Offset +
(int)(io.WriteOffset - offset), buffer, io.Buffer.Offset + (origCount - count),
toCopy);
offset += toCopy;
count -= toCopy;
}
@@ -95,37 +76,34 @@
return writer.Read(manager, buffer, bufferOffset, offset, count) +
(origCount - count);
}
- private void Write(MemIO m)
- {
- Write(m.io, m.buffer, m.bufferOffset, m.offset, m.count, true);
- }
-
- public void Write(BufferedIO io, byte[] buffer, int bufferOffset, long
offset, int count)
+ public void Write(PieceData data)
{
- Write(io, buffer, bufferOffset, offset, count, false);
+ Write(data, false);
}
- public void Write(BufferedIO io, byte[] buffer, int bufferOffset, long
offset, int count, bool forceWrite)
+ public void Write(PieceData data, bool forceWrite)
{
if (forceWrite)
{
- writer.Write(io, buffer, bufferOffset, offset, count);
+ writer.Write(data);
return;
}
- if (Used >= (Capacity - count))
+ if (Used >= (Capacity - data.Count))
FlushSome();
- memoryBuffer.Add(new MemIO(io.Id.TorrentManager.FileManager, io,
buffer, bufferOffset, offset, count));
+ memoryBuffer.Add(data);
}
private void FlushSome()
{
int count = Math.Min(5, memoryBuffer.Count);
for (int i = 0; i < count; i++)
- Write(memoryBuffer[i]);
-
+ {
+ Write(memoryBuffer[i], true);
+ ClientEngine.BufferManager.FreeBuffer(ref
memoryBuffer[i].Buffer);
+ }
memoryBuffer.RemoveRange(0, count);
}
@@ -140,8 +118,15 @@
public void Flush(TorrentManager manager)
{
- memoryBuffer.ForEach(delegate(MemIO io) { if (io.manager ==
manager.FileManager) Write(io); });
- memoryBuffer.RemoveAll(delegate(MemIO io) { return io.manager ==
manager.FileManager; });
+ memoryBuffer.ForEach(delegate(PieceData io)
+ {
+ if (io.Manager != manager.FileManager)
+ return;
+
+ Write(io, true);
+ ClientEngine.BufferManager.FreeBuffer(ref io.Buffer);
+ });
+ memoryBuffer.RemoveAll(delegate(PieceData io) { return io.Manager
== manager.FileManager; });
}
}
}
Added:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/PieceData.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/PieceData.cs
2008-02-10 01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/PieceData.cs
2008-02-10 01:50:57 UTC (rev 95352)
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace MonoTorrent.Client
+{
+ public class PieceData
+ {
+ public ArraySegment<byte> Buffer;
+ private int count;
+ private PeerIdInternal id;
+ private Piece piece;
+ private int pieceIndex;
+ private int startOffset;
+
+
+ public int BlockIndex
+ {
+ get { return PiecePickerBase.GetBlockIndex(piece.Blocks,
startOffset, count); }
+ }
+
+ public int Count
+ {
+ get { return count; }
+ }
+
+ internal PeerIdInternal Id
+ {
+ get { return id; }
+ }
+
+ public FileManager Manager
+ {
+ get { return id.TorrentManager.FileManager; }
+ }
+
+ public Piece Piece
+ {
+ get { return piece; }
+ set { piece = value; }
+ }
+
+ public int PieceIndex
+ {
+ get { return pieceIndex; }
+ }
+
+ public int StartOffset
+ {
+ get { return startOffset; }
+ }
+
+ public long WriteOffset
+ {
+ get { return (long)id.TorrentManager.Torrent.PieceLength *
pieceIndex + startOffset; }
+ }
+
+
+ internal PieceData(ArraySegment<byte> buffer, int pieceIndex, int
startOffset, int count, PeerIdInternal id)
+ {
+ this.Buffer = buffer;
+ this.count = count;
+ this.id = id;
+ this.pieceIndex = pieceIndex;
+ this.startOffset = startOffset;
+ }
+ }
+}
Property changes on:
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/PieceWriter/PieceData.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/bitsharp/src/SampleClient/TestManualConnection.cs
===================================================================
--- trunk/bitsharp/src/SampleClient/TestManualConnection.cs 2008-02-10
01:47:53 UTC (rev 95351)
+++ trunk/bitsharp/src/SampleClient/TestManualConnection.cs 2008-02-10
01:50:57 UTC (rev 95352)
@@ -143,9 +143,9 @@
public EngineTestRig(string savePath)
{
listener = new CustomListener();
- engine = new ClientEngine(EngineSettings.DefaultSettings(),
listener);
+ engine = new ClientEngine(new EngineSettings(), listener);
torrent = Torrent.Load(CreateTorrent());
- manager = new TorrentManager(torrent, savePath,
TorrentSettings.DefaultSettings());
+ manager = new TorrentManager(torrent, savePath, new
TorrentSettings());
engine.Register(manager);
manager.Start();
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches