ZeroLauncher/Manager/DataStream.cs
2024-08-04 18:03:32 +08:00

85 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.IO;
using System.IO.Compression;
using System.Text;
using Newtonsoft.Json;
namespace Zerolauncher.Manager
{
class DataStream
{
private const string path = "user.data";
public static Data dataStream;
public static void Load()
{
if (File.Exists(path))
{
dataStream = JsonConvert.DeserializeObject<Data>(Encoding.UTF8.GetString(Decompress(File.ReadAllBytes(path))));
return;
}
dataStream = JsonConvert.DeserializeObject<Data>("{\"teamIndex\":0,\"Groups\":[{\"Name\":\"队伍1\", \"Accounts\": []}], \"ecs\": \"\"}");
}
public static void write()
{
string? data = JsonConvert.SerializeObject(dataStream);
//Trace.WriteLine(data);
if (data == null) return;
File.WriteAllBytes(path, CompressBytes(Encoding.UTF8.GetBytes(data)));
}
//压缩字节
//1.创建压缩的数据流
//2.设定compressStream为存放被压缩的文件流,并设定为压缩模式
//3.将需要压缩的字节写到被压缩的文件流
public static byte[] CompressBytes(byte[] bytes)
{
using (MemoryStream compressStream = new MemoryStream())
{
using (var zipStream = new GZipStream(compressStream, CompressionMode.Compress))
zipStream.Write(bytes, 0, bytes.Length);
return compressStream.ToArray();
}
}
//解压缩字节
//1.创建被压缩的数据流
//2.创建zipStream对象并传入解压的文件流
//3.创建目标流
//4.zipStream拷贝到目标流
//5.返回目标流输出字节
public static byte[] Decompress(byte[] bytes)
{
using (var compressStream = new MemoryStream(bytes))
{
using (var zipStream = new GZipStream(compressStream, CompressionMode.Decompress))
{
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
}
}
public class Account
{
public int providerId, serverId;
public string userName, userPWD, nickName;
}
class Group
{
public string Name;
public List<Account> Accounts;
}
struct Data
{
public int teamIndex;
public List<Group> Groups;
public string ecs;
}
}