added compression to ClientServerLib
This commit is contained in:
1 parent
70a75d2f54
commit
8d79dd234c
1 file changed
+71
-1
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
@@ -91,6 +92,16 @@ namespace ClientServerLib
|
|||||||
}
|
}
|
||||||
|
|
||||||
public byte[] Encrypt(byte[] Data)
|
public byte[] Encrypt(byte[] Data)
|
||||||
|
{
|
||||||
|
return _Encrypt(_Compress(Data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] Decrypt(byte[] Data)
|
||||||
|
{
|
||||||
|
return _Decompress(_Decrypt(Data));
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte[] _Encrypt(byte[] Data)
|
||||||
{
|
{
|
||||||
if (Data == null || (!keySet && encryption))
|
if (Data == null || (!keySet && encryption))
|
||||||
return Data;
|
return Data;
|
||||||
@@ -142,7 +153,7 @@ namespace ClientServerLib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] Decrypt(byte[] Data)
|
private byte[] _Decrypt(byte[] Data)
|
||||||
{
|
{
|
||||||
if (Data == null || (!keySet && encryption))
|
if (Data == null || (!keySet && encryption))
|
||||||
return Data;
|
return Data;
|
||||||
@@ -202,5 +213,64 @@ namespace ClientServerLib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private byte[] _Compress(byte[] Data)
|
||||||
|
{
|
||||||
|
if (Data == null)
|
||||||
|
return Data;
|
||||||
|
|
||||||
|
using (var compressed = new MemoryStream())
|
||||||
|
{
|
||||||
|
using (var gz = new GZipStream(compressed, CompressionMode.Compress, true))
|
||||||
|
{
|
||||||
|
gz.Write(Data, 0, Data.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] result = null;
|
||||||
|
|
||||||
|
if (compressed.Length < Data.Length)
|
||||||
|
{
|
||||||
|
result = new byte[compressed.Length + 1];
|
||||||
|
result[0] = 1; //data stream is compressed
|
||||||
|
compressed.Position = 0;
|
||||||
|
compressed.Read(result, 1, (int)compressed.Length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = new byte[Data.Length + 1];
|
||||||
|
result[0] = 0; //data stream is not compressed
|
||||||
|
Array.Copy(Data, 0, result, 1, Data.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte[] _Decompress(byte[] Data)
|
||||||
|
{
|
||||||
|
if (Data == null)
|
||||||
|
return Data;
|
||||||
|
|
||||||
|
if (Data[0] == 0) //not compressed
|
||||||
|
{
|
||||||
|
byte[] result = new byte[Data.Length - 1];
|
||||||
|
Array.Copy(Data, 1, result, 0, result.Length);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var inStream = new MemoryStream())
|
||||||
|
{
|
||||||
|
inStream.Write(Data, 1, Data.Length - 1);
|
||||||
|
inStream.Position = 0;
|
||||||
|
|
||||||
|
using (var outStream = new MemoryStream())
|
||||||
|
{
|
||||||
|
using (var gz = new GZipStream(inStream, CompressionMode.Decompress, true))
|
||||||
|
gz.CopyTo(outStream);
|
||||||
|
|
||||||
|
return outStream.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user