/// <summary> /// Reads next continuing FETCH line and stores to fetch reader 'r'. /// </summary> /// <param name="imap">IMAP client.</param> /// <param name="r">String reader.</param> /// <param name="callback">Fetch completion callback.</param> /// <returns>Returns true if completed asynchronously or false if completed synchronously.</returns> /// <exception cref="ArgumentNullException">Is raised when <b>imap</b>,<b>r</b> or <b>callback</b> is null reference.</exception> private bool ReadNextFetchLine(IMAP_Client imap,StringReader r,EventHandler<EventArgs<Exception>> callback) { if(imap == null){ throw new ArgumentNullException("imap"); } if(r == null){ throw new ArgumentNullException("r"); } if(callback == null){ throw new ArgumentNullException("callback"); } SmartStream.ReadLineAsyncOP readLineOP = new SmartStream.ReadLineAsyncOP(new byte[64000],SizeExceededAction.JunkAndThrowException); readLineOP.Completed += delegate(object sender,EventArgs<SmartStream.ReadLineAsyncOP> e){ try{ // Read line failed. if(readLineOP.Error != null){ callback(this,new EventArgs<Exception>(readLineOP.Error)); } else{ // Log. imap.LogAddRead(readLineOP.BytesInBuffer,readLineOP.LineUtf8); // Append fetch line to fetch reader. r.AppendString(readLineOP.LineUtf8); ParseDataItems(imap,r,callback); } } catch(Exception x){ callback(this,new EventArgs<Exception>(x)); } finally{ readLineOP.Dispose(); } }; // Read line completed synchronously. if(imap.TcpStream.ReadLine(readLineOP,true)){ try{ // Read line failed. if(readLineOP.Error != null){ callback(this,new EventArgs<Exception>(readLineOP.Error)); return true; } else{ // Log. imap.LogAddRead(readLineOP.BytesInBuffer,readLineOP.LineUtf8); // Append fetch line to fetch reader. r.AppendString(readLineOP.LineUtf8); return false; } } finally{ readLineOP.Dispose(); } } return true; }
/// <summary> /// Reads next continuing FETCH line and stores to fetch reader 'r'. /// </summary> /// <param name="imap">IMAP client.</param> /// <param name="r">String reader.</param> /// <param name="callback">Fetch completion callback.</param> /// <returns>Returns true if completed asynchronously or false if completed synchronously.</returns> /// <exception cref="ArgumentNullException">Is raised when <b>imap</b>,<b>r</b> or <b>callback</b> is null reference.</exception> private bool ReadNextFetchLine(IMAP_Client imap, StringReader r, EventHandler <EventArgs <Exception> > callback) { if (imap == null) { throw new ArgumentNullException("imap"); } if (r == null) { throw new ArgumentNullException("r"); } if (callback == null) { throw new ArgumentNullException("callback"); } SmartStream.ReadLineAsyncOP readLineOP = new SmartStream.ReadLineAsyncOP(new byte[64000], SizeExceededAction.JunkAndThrowException); readLineOP.Completed += delegate(object sender, EventArgs <SmartStream.ReadLineAsyncOP> e){ try{ // Read line failed. if (readLineOP.Error != null) { callback(this, new EventArgs <Exception>(readLineOP.Error)); } else { // Log. imap.LogAddRead(readLineOP.BytesInBuffer, readLineOP.LineUtf8); // Append fetch line to fetch reader. r.AppendString(readLineOP.LineUtf8); ParseDataItems(imap, r, callback); } } catch (Exception x) { callback(this, new EventArgs <Exception>(x)); } finally{ readLineOP.Dispose(); } }; // Read line completed synchronously. if (imap.TcpStream.ReadLine(readLineOP, true)) { try{ // Read line failed. if (readLineOP.Error != null) { callback(this, new EventArgs <Exception>(readLineOP.Error)); return(true); } else { // Log. imap.LogAddRead(readLineOP.BytesInBuffer, readLineOP.LineUtf8); // Append fetch line to fetch reader. r.AppendString(readLineOP.LineUtf8); return(false); } } finally{ readLineOP.Dispose(); } } return(true); }