public IReceiveResult EndReceive(IAsyncResult asyncResult) { if (!asyncResult.IsCompleted) { return(null); } else { FileReceiveResult result = asyncResults[asyncResult]; // Delete this file if (!keepFiles) { try { System.IO.File.Delete(result.FileName); } catch (Exception) { } } lock (asyncResults) { asyncResults.Remove(asyncResult); } return(result); } }
public void Work(object state) { // Prepare stream Stream s = null; FileReceiveResult result = new FileReceiveResult(); result.FileName = state.ToString(); // reference filename IFormatterParseResult pResult = null; // parse the object try { s = new FileStream(state.ToString(), FileMode.Open, FileAccess.Read, FileShare.Write); // Parse the object pResult = Formatter.Parse(s); result.Structure = pResult.Structure; result.Details = pResult.Details; result.Code = ResultCode.Accepted; if (result.Details.FirstOrDefault(o => o.Type == ResultDetailType.Error) != null) { result.Code = ResultCode.AcceptedNonConformant; } else if (result.Structure == null) { result.Code = ResultCode.TypeNotAvailable; } } catch (MessageValidationException e) { result.Code = ResultCode.Rejected; List <IResultDetail> dtl = new List <IResultDetail>(new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }); dtl.AddRange(pResult.Details ?? new IResultDetail[0]); result.Details = dtl.ToArray(); } catch (FormatException e) { result.Code = ResultCode.Rejected; result.Details = new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }; } catch (DirectoryNotFoundException e) { result.Code = ResultCode.NotAvailable; result.Details = new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }; } catch (IOException) { retryCount++; if (retryCount < MAX_RETRY_COUNT) { Work(state); } return; } catch (Exception e) { result.Code = ResultCode.Error; result.Details = new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }; } finally { if (s != null) { s.Close(); } } // Set the result this.Result = result; // Fire completed event if (Completed != null) { Completed(this); } }
public void Work(object state) { // Prepare stream Stream s = null; FileReceiveResult result = new FileReceiveResult(); result.FileName = state.ToString(); // reference filename IFormatterParseResult pResult = null; // parse the object try { s = new FileStream(state.ToString(), FileMode.Open, FileAccess.Read, FileShare.Write); // Parse the object pResult = Formatter.Parse(s); result.Structure = pResult.Structure; result.Details = pResult.Details; result.Code = ResultCode.Accepted; if (result.Details.FirstOrDefault(o => o.Type == ResultDetailType.Error) != null) result.Code = ResultCode.AcceptedNonConformant; else if (result.Structure == null) result.Code = ResultCode.TypeNotAvailable; } catch (MessageValidationException e) { result.Code = ResultCode.Rejected; List<IResultDetail> dtl = new List<IResultDetail>(new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }); dtl.AddRange(pResult.Details ?? new IResultDetail[0]); result.Details = dtl.ToArray(); } catch (FormatException e) { result.Code = ResultCode.Rejected; result.Details = new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }; } catch (DirectoryNotFoundException e) { result.Code = ResultCode.NotAvailable; result.Details = new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }; } catch (IOException) { retryCount++; if(retryCount < MAX_RETRY_COUNT) Work(state); return; } catch (Exception e) { result.Code = ResultCode.Error; result.Details = new IResultDetail[] { new FileResultDetail(ResultDetailType.Error, e.Message, state.ToString(), e) }; } finally { if (s != null) s.Close(); } // Set the result this.Result = result; // Fire completed event if (Completed != null) Completed(this); }