153 lines
3.5 KiB
C#
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();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|