using System; using System.Collections.Concurrent; namespace Ryujinx.Audio.Renderer.Utils { /// /// A simple generic message queue for unmanaged types. /// /// The target unmanaged type used public class Mailbox : IDisposable where T : unmanaged { private BlockingCollection _messageQueue; private BlockingCollection _responseQueue; public Mailbox() { _messageQueue = new BlockingCollection(1); _responseQueue = new BlockingCollection(1); } public void SendMessage(T data) { _messageQueue.Add(data); } public void SendResponse(T data) { _responseQueue.Add(data); } public T ReceiveMessage() { return _messageQueue.Take(); } public T ReceiveResponse() { return _responseQueue.Take(); } public void Dispose() { Dispose(true); } protected virtual void Dispose(bool disposing) { if (disposing) { _messageQueue.Dispose(); _responseQueue.Dispose(); } } } }