void UserStreamRead_End(IAsyncResult ar) { TransStateObjectStream stateObj = (TransStateObjectStream)ar.AsyncState; try { stateObj.UpdateContext(); int num = stateObj.UserStream.EndRead(ar); if (0 == num) //for example coping zero-length file { FinishTransferingStream(DataStream); OnDataTransfered(null, 0); OnCompleted(); stateObj.SetCompleted(); } else { DataStream.BeginWrite(_workBuffer, 0, num, new AsyncCallback(this.WriteDataStream_End), stateObj); } } catch (Exception e) { stateObj.Exception = e; stateObj.SetCompleted(); } catch { NSTrace.WriteLineError("Non-CLS exception at: " + Environment.StackTrace); throw; } }
void DataStreamRead_End(IAsyncResult ar) { TransStateObjectStream stateObj = (TransStateObjectStream)ar.AsyncState; try { stateObj.UpdateContext(); int num = DataStream.EndRead(ar); DTPStream userStream = (DTPStream)stateObj.UserStream; if (num > 0) { long require = userStream.AvailableSpace; if (num > require) { num = (int)require; } stateObj.Transfered += num; OnDataTransfered(_workBuffer, num); //write received data to user stream userStream.BeginWrite(_workBuffer, 0, num, new AsyncCallback(this.UserStreamWrite_End), stateObj); } else { userStream.Flush(); OnCompleted(); stateObj.SetCompleted(); } } catch (Exception e) { stateObj.Exception = e; stateObj.SetCompleted(); } catch { NSTrace.WriteLineError("Non-CLS exception at: " + Environment.StackTrace); throw; } }
void UserStreamWrite_End(IAsyncResult ar) { TransStateObjectStream stateObj = (TransStateObjectStream)ar.AsyncState; try { stateObj.UpdateContext(); DTPStream userStream = (DTPStream)stateObj.UserStream; userStream.EndWrite(ar); if (_aborted) { throw new FtpAbortedException(); } if (userStream.AvailableSpace > 0) { DataStream.BeginRead(_workBuffer, 0, _workBuffer.Length, new AsyncCallback(this.DataStreamRead_End), stateObj); } else { _manuallyClosed = true; userStream.Flush(); OnCompleted(); stateObj.SetCompleted(); } } catch (Exception e) { stateObj.Exception = e; stateObj.SetCompleted(); } catch { NSTrace.WriteLineError("Non-CLS exception at: " + Environment.StackTrace); throw; } }
void WriteDataStream_End(IAsyncResult ar) { TransStateObjectStream stateObj = (TransStateObjectStream)ar.AsyncState; try { stateObj.UpdateContext(); DataStream.EndWrite(ar); if (_aborted) { throw new FtpAbortedException(); } if (stateObj.UserStream.AvailableSpace > 0) { //read and send more data stateObj.UserStream.BeginRead(_workBuffer, 0, _workBuffer.Length, new AsyncCallback(this.UserStreamRead_End), stateObj); } else { FinishTransferingStream(DataStream); OnCompleted(); stateObj.SetCompleted(); } } catch (Exception e) { stateObj.Exception = e; stateObj.SetCompleted(); } catch { NSTrace.WriteLineError("Non-CLS exception at: " + Environment.StackTrace); throw; } }