本文整理汇总了C#中MonoTorrent.Client.PeerId.Dequeue方法的典型用法代码示例。如果您正苦于以下问题:C# PeerId.Dequeue方法的具体用法?C# PeerId.Dequeue怎么用?C# PeerId.Dequeue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MonoTorrent.Client.PeerId
的用法示例。
在下文中一共展示了PeerId.Dequeue方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ProcessQueue
/// <param name="id">The peer whose message queue you want to start processing</param>
internal void ProcessQueue(PeerId id)
{
if (id.QueueLength == 0)
{
id.ProcessingQueue = false;
return;
}
PeerMessage msg = id.Dequeue();
if (msg is PieceMessage)
{
using (ManualResetEvent handle = new ManualResetEvent(false)) {
PieceMessage pm = (PieceMessage)msg;
pm.Data = BufferManager.EmptyBuffer;
ClientEngine.BufferManager.GetBuffer(ref pm.Data, pm.ByteLength);
engine.DiskManager.QueueRead(id.TorrentManager, pm.StartOffset + ((long) pm.PieceIndex * id.TorrentManager.Torrent.PieceLength), pm.Data, pm.RequestLength, delegate
{
handle.Set();
});
handle.WaitOne();
id.PiecesSent++;
}
}
try
{
SendMessage(id, msg, this.messageSentCallback);
}
catch (Exception e)
{
CleanupSocket(id, "Exception calling SendMessage: " + e.Message);
}
}
示例2: RejectPendingRequests
/// <summary>
/// Checks the send queue of the peer to see if there are any outstanding pieces which they requested
/// and rejects them as necessary
/// </summary>
/// <param name="Peer"></param>
private void RejectPendingRequests(PeerId Peer)
{
PeerMessage message;
PieceMessage pieceMessage;
int length = Peer.QueueLength;
for (int i = 0; i < length; i++)
{
message = Peer.Dequeue();
if (!(message is PieceMessage))
{
Peer.Enqueue(message);
continue;
}
pieceMessage = (PieceMessage)message;
// If the peer doesn't support fast peer, then we will never requeue the message
if (!(Peer.SupportsFastPeer && ClientEngine.SupportsFastPeer))
{
Peer.IsRequestingPiecesCount--;
continue;
}
// If the peer supports fast peer, queue the message if it is an AllowedFast piece
// Otherwise send a reject message for the piece
if (Peer.AmAllowedFastPieces.Contains(pieceMessage.PieceIndex))
Peer.Enqueue(pieceMessage);
else
{
Peer.IsRequestingPiecesCount--;
Peer.Enqueue(new RejectRequestMessage(pieceMessage));
}
}
}
示例3: HandleCancelMessage
protected virtual void HandleCancelMessage(PeerId id, CancelMessage message)
{
PeerMessage msg;
for (int i = 0; i < id.QueueLength; i++)
{
msg = id.Dequeue();
if (!(msg is PieceMessage))
{
id.Enqueue(msg);
continue;
}
PieceMessage piece = msg as PieceMessage;
if (!(piece.PieceIndex == message.PieceIndex && piece.StartOffset == message.StartOffset && piece.RequestLength == message.RequestLength))
{
id.Enqueue(msg);
}
else
{
id.IsRequestingPiecesCount--;
}
}
for (int i = 0; i < id.PieceReads.Count; i++)
{
if (id.PieceReads[i].PieceIndex == message.PieceIndex && id.PieceReads[i].StartOffset == message.StartOffset && id.PieceReads[i].RequestLength == message.RequestLength)
{
id.IsRequestingPiecesCount--;
id.PieceReads.RemoveAt(i);
break;
}
}
}
示例4: ProcessQueue
/// <summary>
/// This method should be called to begin processing messages stored in the SendQueue
/// </summary>
/// <param name="id">The peer whose message queue you want to start processing</param>
internal void ProcessQueue(PeerId id)
{
if (id.QueueLength == 0)
{
id.ProcessingQueue = false;
return;
}
PeerMessage msg = id.Dequeue();
if (msg is PieceMessage)
id.PiecesSent++;
try
{
SendMessage(id, msg, this.messageSentCallback);
}
catch (Exception e)
{
CleanupSocket(id, "Exception calling SendMessage: " + e.Message);
}
}