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;
 }
Пример #2
0
        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;
            }
            }
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
 public CancelResponseMessage Cancel(CancelMessage request)
 {
     throw new NotImplementedException();
 }