using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace IllusionInjector.Utilities { public class EchoStream : MemoryStream { private ManualResetEvent m_dataReady = new ManualResetEvent(false); private byte[] m_buffer; private int m_offset; private int m_count; public override void Write(byte[] buffer, int offset, int count) { m_buffer = buffer; m_offset = offset; m_count = count; m_dataReady.Set(); } public override int Read(byte[] buffer, int offset, int count) { if (m_buffer == null) { // Block until the stream has some more data. m_dataReady.Reset(); m_dataReady.WaitOne(); } Buffer.BlockCopy(m_buffer, m_offset, buffer, offset, (count < m_count) ? count : m_count); m_buffer = null; return (count < m_count) ? count : m_count; } } }