void Receive_DatPacket(XConnection connection, G2ReceivedPacket packet)
{
// received by client from server
var chunk = DatPacket.Decode(packet.Root);
// write to tmp file
if (LocalTempFile == null)
{
LocalTempFile = File.Create(LocalDatTempPath);
LocalTempFile.SetLength(0);
}
Log("Received dat pos: {0}, length: {1}", chunk.Pos, chunk.Data.Length); //todo delete
LocalTempFile.Write(chunk.Data);
var percentComplete = LocalTempFile.Length * 100 / RemoteDatSize;
RemoteStatus = string.Format("Downloading Dat File - {0}% Complete", percentComplete);
// hash when complete
if (LocalTempFile.Length >= RemoteDatSize)
{
LocalTempFile.Close();
LocalTempFile = null;
var checkHash = Utilities.MD5HashFile(LocalDatTempPath);
if (checkHash == RemoteDatHash)
{
File.Move(LocalDatTempPath, LocalDatPath);
Send_StartSync(connection);
}
else
{
RemoteStatus = string.Format("Dat integrity check failed - Expecting {0}, got {1}", RemoteDatHash, checkHash);
}
}
}