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(); } }
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(); } }
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(); } }