Exemplo n.º 1
0
        private void OnWriteFinished(object state, bool success)
        {
            try
            {
                this.asyncInProgress = false;

                if (this.netStream == null || !success)
                {
                    this.Disconnect();
                    return;
                }

                int pieceId = (int)((object[])state)[0];
                int begin   = (int)((object[])state)[1];
                int length  = (int)((object[])state)[2];
                PeerPieceCallback pieceSentCallback = (PeerPieceCallback)((object[])state)[3];
                pieceSentCallback(this, pieceId, begin, length, null);

                // flush message queue
                foreach (object[] objs in this.messageQueue)
                {
                    PeerMessage message = (PeerMessage)objs[0];

                    switch (message)
                    {
                    case PeerMessage.Request:
                        this.SendPieceRequest((int)objs[1], (int)objs[2], (int)objs[3]);
                        break;

                    case PeerMessage.Cancel:
                        this.SendPieceCancel((int)objs[1], (int)objs[2], (int)objs[3]);
                        break;

                    case PeerMessage.Choke:
                        this.SendChokeMessage((bool)objs[1]);
                        break;

                    case PeerMessage.Interested:
                        this.SendInterestedMessage((bool)objs[2]);
                        break;

                    case PeerMessage.Have:
                        this.SendHaveMessage((int)objs[1]);
                        break;
                    }
                }

                this.messageQueue.Clear();
            }
            catch (System.Exception e)
            {
                Config.LogException(e);
                this.Disconnect();
            }
        }
Exemplo n.º 2
0
 public void SendPiece(int pieceId, int begin, int length, IO.Stream istream, PeerPieceCallback pieceSentCallback)
 {
     try
     {
         if (socket.Connected)
         {
             this.asyncInProgress = true;
             peerProtocol.SendPiece(this.netStream, pieceId, begin, length, istream, new PeerFinishedPieceTransfer(OnWriteFinished), (object)(new object[] { pieceId, begin, length, pieceSentCallback }));
             this.numBytesUploaded += length;
         }
     }
     catch (System.Exception e)
     {
         Config.LogException(e);
         this.Disconnect();
     }
 }
Exemplo n.º 3
0
		public void SendPiece(int pieceId, int begin, int length, IO.Stream istream, PeerPieceCallback pieceSentCallback)
		{
			try
			{
				if ( socket.Connected )
				{
					this.asyncInProgress = true;
					peerProtocol.SendPiece( this.netStream, pieceId, begin, length, istream, new PeerFinishedPieceTransfer( OnWriteFinished ), (object)( new object[] { pieceId, begin, length, pieceSentCallback } ) );
					this.numBytesUploaded += length;
				}
			}
			catch (System.Exception e)
			{
				Config.LogException(e);
				this.Disconnect();
			}
		}