private StreamLogItem.LogItemAttachment InitializeSubAttachment(int workerId) { string text = workerId.ToString(); StreamLogItem.LogItemAttachment logItemAttachment = new StreamLogItem.LogItemAttachment(); logItemAttachment.Id = workerId; logItemAttachment.Name = text; logItemAttachment.Attachment = (StreamAttachment)this.MessageItem.AttachmentCollection.Create(AttachmentType.Stream); logItemAttachment.Attachment.FileName = text + ".csv"; logItemAttachment.Attachment[AttachmentSchema.DisplayName] = text; logItemAttachment.AttachmentStream = new StreamWriter(new GZipStream(logItemAttachment.Attachment.GetContentStream(), CompressionMode.Compress)); return(logItemAttachment); }
internal void ConsolidateLog(int workerId, bool merge) { lock (this.mailboxSession.Value) { if (this.subAttachments.Count != 0) { if (this.Attachment == null) { this.InitializeMainAttachment(); } StreamLogItem.LogItemAttachment logItemAttachment = null; this.subAttachments.TryGetValue(workerId, out logItemAttachment); if (logItemAttachment != null) { this.RemoveSubAttachment(logItemAttachment, merge); } } } }
internal void WriteLogs(List <StreamLogItem.LogItem> logList) { lock (this.mailboxSession.Value) { foreach (StreamLogItem.LogItem logItem in logList) { StreamLogItem.LogItemAttachment subAttachment = null; this.subAttachments.TryGetValue(logItem.WorkerId, out subAttachment); if (subAttachment == null) { subAttachment = this.InitializeSubAttachment(logItem.WorkerId); this.subAttachments.Add(logItem.WorkerId, subAttachment); } logItem.Logs.ForEach(delegate(LocalizedString x) { subAttachment.AttachmentStream.WriteLine(x.ToString()); }); } } }
private void RemoveSubAttachment(StreamLogItem.LogItemAttachment subAttachment, bool merge) { Stream baseStream = subAttachment.AttachmentStream.BaseStream; subAttachment.AttachmentStream.Flush(); subAttachment.AttachmentStream.Dispose(); baseStream.Dispose(); subAttachment.Attachment.Save(); subAttachment.Attachment.Load(); if (merge) { using (StreamAttachment streamAttachment = (StreamAttachment)this.MessageItem.AttachmentCollection.Open(subAttachment.Attachment.Id)) { using (GZipStream gzipStream = new GZipStream(streamAttachment.GetContentStream(), CompressionMode.Decompress)) { using (StreamReader streamReader = new StreamReader(gzipStream)) { string value; while ((value = streamReader.ReadLine()) != null) { this.AttachmentStream.WriteLine(value); } } } } } this.MessageItem.AttachmentCollection.Remove(subAttachment.Attachment.Id); this.MessageItem.Save(SaveMode.NoConflictResolutionForceSave); this.MessageItem.Load(); int id = subAttachment.Id; subAttachment.AttachmentStream.Dispose(); subAttachment.AttachmentStream = null; subAttachment.Attachment.Dispose(); subAttachment.Attachment = null; subAttachment = null; this.subAttachments.Remove(id); }