1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-04-28 00:15:47 +02:00
TweetDuck/Browser/Base/CefByteArrayResourceHandler.cs

56 lines
1.8 KiB
C#

using System;
using System.IO;
using CefSharp;
using CefSharp.Callback;
using TweetLib.Browser.CEF.Data;
using TweetLib.Browser.CEF.Logic;
namespace TweetDuck.Browser.Base {
sealed class CefByteArrayResourceHandler : IResourceHandler {
private static readonly ByteArrayResourceHandlerLogic<IResponse>.WriteToOut<Stream> WriteToOut = delegate (Stream dataOut, byte[] dataIn, int position, int length) {
dataOut.Write(dataIn, position, length);
};
private ByteArrayResourceHandlerLogic<IResponse> logic;
public CefByteArrayResourceHandler() {
SetResource(new ByteArrayResource(Array.Empty<byte>()));
}
public CefByteArrayResourceHandler(ByteArrayResource resource) {
SetResource(resource);
}
public void SetResource(ByteArrayResource resource) {
this.logic = new ByteArrayResourceHandlerLogic<IResponse>(resource, CefResponseAdapter.Instance);
}
bool IResourceHandler.Open(IRequest request, out bool handleRequest, ICallback callback) {
return logic.Open(out handleRequest);
}
void IResourceHandler.GetResponseHeaders(IResponse response, out long responseLength, out string redirectUrl) {
logic.GetResponseHeaders(response, out responseLength, out redirectUrl);
}
bool IResourceHandler.Skip(long bytesToSkip, out long bytesSkipped, IResourceSkipCallback callback) {
return logic.Skip(bytesToSkip, out bytesSkipped, callback);
}
bool IResourceHandler.Read(Stream dataOut, out int bytesRead, IResourceReadCallback callback) {
return logic.Read(WriteToOut, dataOut, out bytesRead, callback);
}
bool IResourceHandler.ProcessRequest(IRequest request, ICallback callback) {
throw new NotSupportedException();
}
bool IResourceHandler.ReadResponse(Stream dataOut, out int bytesRead, ICallback callback) {
throw new NotSupportedException();
}
void IResourceHandler.Cancel() {}
void IDisposable.Dispose() {}
}
}