using System; using System.IO; using System.Threading.Tasks; using CefSharp.Callback; namespace CefSharp.Example.DevTools { /// /// For capturing the response from a DevTools Method /// (Doesn't handle DevTools events) /// public class TaskMethodDevToolsMessageObserver : IDevToolsMessageObserver { private readonly TaskCompletionSource> taskCompletionSource = new TaskCompletionSource>(TaskCreationOptions.RunContinuationsAsynchronously); private readonly int matchMessageId; public TaskMethodDevToolsMessageObserver(int messageId) { matchMessageId = messageId; } void IDisposable.Dispose() { } void IDevToolsMessageObserver.OnDevToolsAgentAttached(IBrowser browser) { } void IDevToolsMessageObserver.OnDevToolsAgentDetached(IBrowser browser) { } void IDevToolsMessageObserver.OnDevToolsEvent(IBrowser browser, string method, Stream parameters) { } bool IDevToolsMessageObserver.OnDevToolsMessage(IBrowser browser, Stream message) { return false; } void IDevToolsMessageObserver.OnDevToolsMethodResult(IBrowser browser, int messageId, bool success, Stream result) { //We found the message Id we're after if (matchMessageId == messageId) { var memoryStream = new MemoryStream((int)result.Length); result.CopyTo(memoryStream); var response = Tuple.Create(success, memoryStream.ToArray()); taskCompletionSource.TrySetResult(response); } } public Task> Task { get { return taskCompletionSource.Task; } } } }