Commit 1b77bf22 authored by Honfika's avatar Honfika

decompression class caching

parent 0f9a073c
...@@ -7,9 +7,12 @@ namespace Titanium.Web.Proxy.Compression ...@@ -7,9 +7,12 @@ namespace Titanium.Web.Proxy.Compression
/// </summary> /// </summary>
internal class CompressionFactory internal class CompressionFactory
{ {
public static readonly CompressionFactory Instance = new CompressionFactory();
//cache //cache
private static readonly Lazy<ICompression> gzip = new Lazy<ICompression>(() => new GZipCompression()); 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> deflate = new Lazy<ICompression>(() => new DeflateCompression());
private static readonly Lazy<ICompression> def = new Lazy<ICompression>(() => new DefaultCompression());
public static ICompression GetCompression(string type) public static ICompression GetCompression(string type)
{ {
...@@ -20,7 +23,7 @@ namespace Titanium.Web.Proxy.Compression ...@@ -20,7 +23,7 @@ namespace Titanium.Web.Proxy.Compression
case "deflate": case "deflate":
return deflate.Value; return deflate.Value;
default: 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 ...@@ -9,13 +9,13 @@ namespace Titanium.Web.Proxy.Compression
/// </summary> /// </summary>
internal class DeflateCompression : ICompression 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 ms = new MemoryStream())
{ {
using (var zip = new DeflateStream(ms, CompressionMode.Compress, true)) 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(); return ms.ToArray();
......
...@@ -9,13 +9,13 @@ namespace Titanium.Web.Proxy.Compression ...@@ -9,13 +9,13 @@ namespace Titanium.Web.Proxy.Compression
/// </summary> /// </summary>
internal class GZipCompression : ICompression 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 ms = new MemoryStream())
{ {
using (var zip = new GZipStream(ms, CompressionMode.Compress, true)) 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(); return ms.ToArray();
......
...@@ -7,6 +7,6 @@ namespace Titanium.Web.Proxy.Compression ...@@ -7,6 +7,6 @@ namespace Titanium.Web.Proxy.Compression
/// </summary> /// </summary>
interface ICompression 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> /// <summary>
/// A factory to generate the de-compression methods based on the type of compression /// A factory to generate the de-compression methods based on the type of compression
/// </summary> /// </summary>
internal class DecompressionFactory 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) internal IDecompression Create(string type)
{ {
switch (type) switch (type)
{ {
case "gzip": case "gzip":
return new GZipDecompression(); return gzip.Value;
case "deflate": case "deflate":
return new DeflateDecompression(); return deflate.Value;
default: 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