private static Message Convert(string exchangeCode, CancelCommand cancelCommand) { CancelMessage cancelMessage = new CancelMessage(exchangeCode,cancelCommand.TransactionID, (TransactionError)cancelCommand.ErrorCode, (iExchange.Common.CancelReason)cancelCommand.CancelReason); return cancelMessage; }
public void OnMessageReceived(IMessageReceivedContext context) { // Read message CommonPeerMessage message = MessageHandler.ReadMessage(context.Metainfo, context.Reader, context.MessageLength, (byte)context.MessageId); if (message == null) { // Something went wrong context.Peer.Disconnect(); return; } var peer = context.Peer; // Process message switch (message.ID) { case ChokeMessage.MessageID: SetChokedByPeer(peer, true); break; case UnchokeMessage.MessageID: SetChokedByPeer(peer, false); break; case InterestedMessage.MessageID: SetPeerInterested(peer, true); UnchokePeer(peer); break; case NotInterestedMessage.MessageID: SetPeerInterested(peer, false); break; case HaveMessage.MessageId: { HaveMessage haveMessage = message as HaveMessage; SetPeerBitfield(context, peer, haveMessage.Piece.Index, true); break; } case BitfieldMessage.MessageId: { BitfieldMessage bitfieldMessage = message as BitfieldMessage; SetPeerBitfield(peer, bitfieldMessage.Bitfield); if (IsBitfieldInteresting(context, bitfieldMessage.Bitfield)) { peer.IsInterestedInRemotePeer = true; peer.SendMessage(new InterestedMessage()); } break; } case RequestMessage.MessageID: { RequestMessage requestMessage = message as RequestMessage; SetBlockRequestedByPeer(peer, requestMessage.Block); break; } case CancelMessage.MessageID: { CancelMessage cancelMessage = message as CancelMessage; SetBlockCancelledByPeer(peer, cancelMessage.Block); break; } case PieceMessage.MessageId: { PieceMessage pieceMessage = message as PieceMessage; BlockReceived(context, peer, pieceMessage.Block); break; } } }
protected virtual void HandleCancelMessage(PeerId id, CancelMessage message) { for (var i = 0; i < id.QueueLength; i++) { var msg = id.Dequeue(); if (!(msg is PieceMessage)) { id.Enqueue(msg); continue; } var piece = msg as PieceMessage; if ( !(piece.PieceIndex == message.PieceIndex && piece.StartOffset == message.StartOffset && piece.RequestLength == message.RequestLength)) { id.Enqueue(msg); } else { id.IsRequestingPiecesCount--; } } for (var 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; } } }
public CancelResponseMessage Cancel(CancelMessage request) { throw new NotImplementedException(); }