Commit 1b77bf22 authored by Honfika's avatar Honfika

decompression class caching

parent 0f9a073c
......@@ -7,9 +7,12 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
internal class CompressionFactory
{
public static readonly CompressionFactory Instance = new CompressionFactory();
//cache
private static readonly Lazy<ICompression> gzip = new Lazy<ICompression>(() => new GZipCompression());
private static readonly Lazy<ICompression> deflate = new Lazy<ICompression>(() => new DeflateCompression());
private static readonly Lazy<ICompression> def = new Lazy<ICompression>(() => new DefaultCompression());
public static ICompression GetCompression(string type)
{
......@@ -20,7 +23,7 @@ namespace Titanium.Web.Proxy.Compression
case "deflate":
return deflate.Value;
default:
return null;
return def.Value;
}
}
}
......
using System.IO;
using System.Threading.Tasks;
namespace Titanium.Web.Proxy.Compression
{
/// <summary>
/// When no compression is specified just return the stream
/// </summary>
internal class DefaultCompression : ICompression
{
public async Task<byte[]> Compress(byte[] body)
{
return body;
}
}
}
......@@ -9,13 +9,13 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
internal class DeflateCompression : ICompression
{
public async Task<byte[]> Compress(byte[] responseBody)
public async Task<byte[]> Compress(byte[] body)
{
using (var ms = new MemoryStream())
{
using (var zip = new DeflateStream(ms, CompressionMode.Compress, true))
{
await zip.WriteAsync(responseBody, 0, responseBody.Length);
await zip.WriteAsync(body, 0, body.Length);
}
return ms.ToArray();
......
......@@ -9,13 +9,13 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
internal class GZipCompression : ICompression
{
public async Task<byte[]> Compress(byte[] responseBody)
public async Task<byte[]> Compress(byte[] body)
{
using (var ms = new MemoryStream())
{
using (var zip = new GZipStream(ms, CompressionMode.Compress, true))
{
await zip.WriteAsync(responseBody, 0, responseBody.Length);
await zip.WriteAsync(body, 0, body.Length);
}
return ms.ToArray();
......
......@@ -7,6 +7,6 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
interface ICompression
{
Task<byte[]> Compress(byte[] responseBody);
Task<byte[]> Compress(byte[] body);
}
}
namespace Titanium.Web.Proxy.Decompression
using System;
namespace Titanium.Web.Proxy.Decompression
{
/// <summary>
/// A factory to generate the de-compression methods based on the type of compression
/// </summary>
internal class DecompressionFactory
{
public static DecompressionFactory Instance = new DecompressionFactory();
public static readonly DecompressionFactory Instance = new DecompressionFactory();
//cache
private static readonly Lazy<IDecompression> gzip = new Lazy<IDecompression>(() => new GZipDecompression());
private static readonly Lazy<IDecompression> deflate = new Lazy<IDecompression>(() => new DeflateDecompression());
private static readonly Lazy<IDecompression> def = new Lazy<IDecompression>(() => new DefaultDecompression());
internal IDecompression Create(string type)
{
switch (type)
{
case "gzip":
return new GZipDecompression();
return gzip.Value;
case "deflate":
return new DeflateDecompression();
return deflate.Value;
default:
return new DefaultDecompression();
return def.Value;
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment