You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
using PlayFab;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using UnityEngine.Networking;
|
|
|
|
public class GzipDownloadHandler : DownloadHandlerScript
|
|
{
|
|
private byte[] _data;
|
|
public byte[] Data { get { return _data; } }
|
|
|
|
public GzipDownloadHandler() : base()
|
|
{
|
|
}
|
|
|
|
protected override byte[] GetData() { return _data; }
|
|
|
|
protected override bool ReceiveData(byte[] data, int dataLength)
|
|
{
|
|
if (_data == null)
|
|
_data = data;
|
|
else
|
|
{
|
|
byte[] newData = new byte[_data.Length + dataLength];
|
|
_data.CopyTo(newData, 0);
|
|
data.CopyTo(newData, _data.Length);
|
|
_data = newData;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
protected override void CompleteContent()
|
|
{
|
|
try
|
|
{
|
|
using MemoryStream stream = new MemoryStream(_data);
|
|
using GZipStream gZipStream = new GZipStream(stream, CompressionMode.Decompress, true);
|
|
|
|
byte[] buffer = new byte[4096];
|
|
using MemoryStream resultStream = new MemoryStream();
|
|
|
|
int read;
|
|
while ((read = gZipStream.Read(buffer, 0, buffer.Length)) > 0)
|
|
{
|
|
resultStream.Write(buffer, 0, read);
|
|
}
|
|
|
|
_data = resultStream.ToArray();
|
|
}
|
|
catch (IOException)
|
|
{
|
|
// If we fail to decompress, it should be because Unity silently decompressed already, so we should disable this custom handler.
|
|
// There is no info on which platforms Unity decompresses on, so we have to assume this is needed until we reach this.
|
|
PlayFabSettings.staticSettings.DecompressWithDownloadHandler = false;
|
|
}
|
|
}
|
|
}
|