Files
2026-08-27 11:22:54 -06:00

153 lines
3.5 KiB
C#

using System.IO;
namespace Crysome.Common.Network.Packets.Client;
public class GetDirectoryResponsePacket : IPacket
{
public string Name { get; set; }
public string Path { get; set; }
public string[] Folders { get; set; }
public string[] Files { get; set; }
public long[] FileSizes { get; set; }
public long[] FolderLastWriteUtcTicks { get; set; }
public long[] FileLastWriteUtcTicks { get; set; }
public byte[][] FolderIconPng { get; set; }
public byte[][] FileIconPng { get; set; }
public long RequestId { get; set; }
public void Write(BinaryWriter w)
{
w.Write(Name ?? "");
w.Write(Path ?? "");
int num = ((Folders != null) ? Folders.Length : 0);
w.Write(num);
if (Folders != null)
{
for (int i = 0; i < num; i++)
{
w.Write(Folders[i] ?? "");
}
}
int num2 = ((Files != null) ? Files.Length : 0);
w.Write(num2);
if (Files != null)
{
for (int j = 0; j < num2; j++)
{
w.Write(Files[j] ?? "");
}
}
w.Write((FileSizes != null) ? FileSizes.Length : 0);
if (FileSizes != null)
{
for (int k = 0; k < FileSizes.Length; k++)
{
w.Write(FileSizes[k]);
}
}
for (int l = 0; l < num; l++)
{
long value = ((FolderLastWriteUtcTicks != null && l < FolderLastWriteUtcTicks.Length) ? FolderLastWriteUtcTicks[l] : 0);
w.Write(value);
}
for (int m = 0; m < num2; m++)
{
long value2 = ((FileLastWriteUtcTicks != null && m < FileLastWriteUtcTicks.Length) ? FileLastWriteUtcTicks[m] : 0);
w.Write(value2);
}
WritePngArray(w, FolderIconPng, num);
WritePngArray(w, FileIconPng, num2);
w.Write(RequestId);
}
private static void WritePngArray(BinaryWriter w, byte[][] arr, int count)
{
for (int i = 0; i < count; i++)
{
byte[] array = ((arr != null && i < arr.Length) ? arr[i] : null);
int num = ((array != null) ? array.Length : 0);
w.Write(num);
if (num > 0)
{
w.Write(array);
}
}
}
private static byte[][] ReadPngArray(BinaryReader r, int count)
{
byte[][] array = new byte[count][];
for (int i = 0; i < count; i++)
{
int num = r.ReadInt32();
array[i] = ((num > 0) ? r.ReadBytes(num) : null);
}
return array;
}
public void Read(BinaryReader r)
{
Name = r.ReadString();
Path = r.ReadString();
int num = r.ReadInt32();
Folders = new string[num];
for (int i = 0; i < num; i++)
{
Folders[i] = r.ReadString();
}
int num2 = r.ReadInt32();
Files = new string[num2];
for (int j = 0; j < num2; j++)
{
Files[j] = r.ReadString();
}
int num3 = r.ReadInt32();
FileSizes = new long[num3];
for (int k = 0; k < num3; k++)
{
FileSizes[k] = r.ReadInt64();
}
FolderLastWriteUtcTicks = null;
FileLastWriteUtcTicks = null;
FolderIconPng = null;
FileIconPng = null;
RequestId = 0L;
if (r.BaseStream.Position >= r.BaseStream.Length)
{
return;
}
FolderLastWriteUtcTicks = new long[num];
for (int l = 0; l < num; l++)
{
FolderLastWriteUtcTicks[l] = r.ReadInt64();
}
if (r.BaseStream.Position >= r.BaseStream.Length)
{
return;
}
FileLastWriteUtcTicks = new long[num2];
for (int m = 0; m < num2; m++)
{
FileLastWriteUtcTicks[m] = r.ReadInt64();
}
if (r.BaseStream.Position < r.BaseStream.Length)
{
FolderIconPng = ReadPngArray(r, num);
FileIconPng = ReadPngArray(r, num2);
if (r.BaseStream.Position < r.BaseStream.Length)
{
RequestId = r.ReadInt64();
}
}
}
}