コード例 #1
0
ファイル: DumpSaver.cs プロジェクト: wyrover/ospy
        public SaveState(SaveInfo info, Exception ex, AsyncOperation asyncOp)
        {
            m_saveInfo = info;

            m_exception      = ex;
            m_asyncOperation = asyncOp;
        }
コード例 #2
0
ファイル: DumpSaver.cs プロジェクト: wyrover/ospy
        public virtual void SaveAsync(Dump dump, DumpFormat format, Stream stream, object taskId)
        {
            SaveInfo info = new SaveInfo(dump, format, stream);

            AsyncOperation asyncOp = CreateOperation(taskId);

            m_workerDelegate = new WorkerEventHandler(SaveWorker);
            m_workerDelegate.BeginInvoke(info, asyncOp, m_completionMethodDelegate, null, null);
        }
コード例 #3
0
ファイル: DumpSaver.cs プロジェクト: SayHalou/ospy
        public virtual void SaveAsync(Dump dump, DumpFormat format, Stream stream, object taskId)
        {
            SaveInfo info = new SaveInfo(dump, format, stream);

            AsyncOperation asyncOp = CreateOperation(taskId);

            m_workerDelegate = new WorkerEventHandler(SaveWorker);
            m_workerDelegate.BeginInvoke(info, asyncOp, m_completionMethodDelegate, null, null);
        }
コード例 #4
0
ファイル: DumpSaver.cs プロジェクト: wyrover/ospy
        private void DoSave(SaveInfo info, AsyncOperation asyncOp)
        {
            BinaryWriter binWriter = new BinaryWriter(info.m_stream, Encoding.ASCII);

            char[] magic        = "oSpy".ToCharArray();
            uint   version      = 2;
            uint   isCompressed = (info.m_format == DumpFormat.Compressed) ? 1U : 0U;
            uint   numEvents    = (uint)info.m_dump.Events.Count;

            binWriter.Write(magic);
            binWriter.Write(version);
            binWriter.Write(isCompressed);
            binWriter.Write(numEvents);
            binWriter.Flush();
            binWriter = null;

            Stream stream = info.m_stream;

            if (info.m_format == DumpFormat.Compressed)
            {
                stream = new BZip2OutputStream(stream);
            }
            XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);

            xmlWriter.WriteStartDocument(true);
            xmlWriter.WriteStartElement("events");

            int eventCount = 0;

            foreach (Event ev in info.m_dump.Events.Values)
            {
                if (asyncOp != null)
                {
                    int pctComplete            = (int)(((float)(eventCount + 1) / (float)numEvents) * 100.0f);
                    ProgressChangedEventArgs e = new ProgressChangedEventArgs(pctComplete, asyncOp.UserSuppliedState);
                    asyncOp.Post(m_onProgressReportDelegate, e);
                }

                xmlWriter.WriteRaw(ev.RawData);

                eventCount++;
            }

            xmlWriter.WriteEndElement();
            xmlWriter.Flush();
            stream.Close();
        }
コード例 #5
0
ファイル: DumpSaver.cs プロジェクト: wyrover/ospy
        private void SaveWorker(SaveInfo info, AsyncOperation asyncOp, SendOrPostCallback completionMethodDelegate)
        {
            Exception exception = null;

            try
            {
                DoSave(info, asyncOp);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            SaveState saveState = new SaveState(info, exception, asyncOp);

            try
            {
                completionMethodDelegate(saveState);
            }
            catch (InvalidOperationException)
            {
            }
        }
コード例 #6
0
ファイル: DumpSaver.cs プロジェクト: wyrover/ospy
        public virtual void Save(Dump dump, DumpFormat format, Stream stream)
        {
            SaveInfo info = new SaveInfo(dump, format, stream);

            DoSave(info, null);
        }
コード例 #7
0
ファイル: DumpSaver.cs プロジェクト: wyrover/ospy
 internal SaveCompletedEventArgs(SaveInfo info, Exception e, bool cancelled, object state)
     : base(e, cancelled, state)
 {
     m_saveInfo = info;
 }
コード例 #8
0
ファイル: DumpSaver.cs プロジェクト: SayHalou/ospy
        private void SaveWorker(SaveInfo info, AsyncOperation asyncOp, SendOrPostCallback completionMethodDelegate)
        {
            Exception exception = null;

            try
            {
                DoSave(info, asyncOp);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            SaveState saveState = new SaveState(info, exception, asyncOp);

            try
            {
                completionMethodDelegate(saveState);
            }
            catch (InvalidOperationException)
            {
            }
        }
コード例 #9
0
ファイル: DumpSaver.cs プロジェクト: SayHalou/ospy
 public virtual void Save(Dump dump, DumpFormat format, Stream stream)
 {
     SaveInfo info = new SaveInfo(dump, format, stream);
     DoSave(info, null);
 }
コード例 #10
0
ファイル: DumpSaver.cs プロジェクト: SayHalou/ospy
 internal SaveCompletedEventArgs(SaveInfo info, Exception e, bool cancelled, object state)
     : base(e, cancelled, state)
 {
     m_saveInfo = info;
 }
コード例 #11
0
ファイル: DumpSaver.cs プロジェクト: SayHalou/ospy
        public SaveState(SaveInfo info, Exception ex, AsyncOperation asyncOp)
        {
            m_saveInfo = info;

            m_exception = ex;
            m_asyncOperation = asyncOp;
        }
コード例 #12
0
ファイル: DumpSaver.cs プロジェクト: SayHalou/ospy
        private void DoSave(SaveInfo info, AsyncOperation asyncOp)
        {
            BinaryWriter binWriter = new BinaryWriter(info.m_stream, Encoding.ASCII);

            char[] magic = "oSpy".ToCharArray();
            uint version = 2;
            uint isCompressed = (info.m_format == DumpFormat.Compressed) ? 1U : 0U;
            uint numEvents = (uint)info.m_dump.Events.Count;

            binWriter.Write(magic);
            binWriter.Write(version);
            binWriter.Write(isCompressed);
            binWriter.Write(numEvents);
            binWriter.Flush();
            binWriter = null;

            Stream stream = info.m_stream;
            if (info.m_format == DumpFormat.Compressed)
                stream = new BZip2OutputStream(stream);
            XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);
            xmlWriter.WriteStartDocument(true);
            xmlWriter.WriteStartElement("events");

            int eventCount = 0;
            foreach (Event ev in info.m_dump.Events.Values)
            {
                if (asyncOp != null)
                {
                    int pctComplete = (int)(((float)(eventCount + 1) / (float)numEvents) * 100.0f);
                    ProgressChangedEventArgs e = new ProgressChangedEventArgs(pctComplete, asyncOp.UserSuppliedState);
                    asyncOp.Post(m_onProgressReportDelegate, e);
                }

                xmlWriter.WriteRaw(ev.RawData);

                eventCount++;
            }

            xmlWriter.WriteEndElement();
            xmlWriter.Flush();
            stream.Close();
        }