Files
Mass-Imaging-Tool/MOE Builder Client/Handlers/FileTransferHandler.cs

73 lines
2.2 KiB
C#

using Articulate_Network.Packets;
using MIT_Packets.Transfer;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MIT_Builder_Client.Handlers
{
public class FileTransferHandler
{
static string fileName;
static long expectedSize;
static long currentSize = 0;
static FileStream fs;
public static void HandleTransfer(Packet packet)
{
if (packet is StartFileTransferPacket)
StartFileTransfer((StartFileTransferPacket)packet);
if (packet is SendFileChunkPacket)
ReceiveChunk((SendFileChunkPacket)packet);
if (packet is EndFileTransferPacket)
{
watch.Stop();
Console.WriteLine($"Transfer completed. Received {packetsReceived} packets. Took {watch.Elapsed.Seconds} seconds.");
fs.Flush();
fs.Close();
}
}
static int packetsReceived = 0;
static Stopwatch watch = new Stopwatch();
static void StartFileTransfer(StartFileTransferPacket packet)
{
watch.Start();
fileName = packet.FileName + "-transferred";
expectedSize = packet.ExpectedSize;
Console.WriteLine($"Preparing to receive {fileName} expected size: {expectedSize}");
fs = File.Create(fileName);
}
static void ReceiveChunk(SendFileChunkPacket packet)
{
//Console.WriteLine("Chunk length: " + packet.Chunk.Length);
//Console.WriteLine("Chunk expected size: " + packet.ChunkSize);
//if (currentSize > 0)
if (packet.ChunkSize < 0 || packet.ChunkSize > packet.Chunk.Length)
Console.WriteLine("Invalid chunk.");
else
{
fs.Write(packet.Chunk, 0, packet.ChunkSize);
currentSize += packet.ChunkSize;
packetsReceived += 1;
}
/*if (((currentSize / expectedSize) * 100) % 25 == 0)
Console.WriteLine("Completed 25%");*/
//Console.WriteLine(currentSize);
}
}
}