SendFile(Player client, int key, FileData fileData)
private void SendFile(Player client, int key, FileData fileData)
{
var fileStream = fileData.fileStream;
bool complete = false;
long bufferSize = fileData.bufferSize;
if (fileStream.Position + fileData.bufferSize > fileStream.Length)
{
bufferSize = fileStream.Length - fileStream.Position;
complete = true;
}
byte[] buffer = new byte[bufferSize];
fileStream.Read(buffer, 0, buffer.Length);
Segment segment1 = BufferPool.Take((int)bufferSize + 50);
segment1.WriteValue(fileData.ID);
segment1.WriteValue(fileData.fileStream.Length);
segment1.WriteValue(fileData.fileName);
segment1.WriteArray(buffer);
SendRT(client, NetCmd.SendFile, segment1.ToArray(true));
if (complete)
{
OnSendFileProgress?.Invoke(client, new RTProgress(fileData.fileName, fileStream.Position / (float)fileStream.Length * 100f, RTState.Complete));
client.ftpDic.Remove(key);
fileData.fileStream.Close();
}
else
{
OnSendFileProgress?.Invoke(client, new RTProgress(fileData.fileName, fileStream.Position / (float)fileStream.Length * 100f, RTState.Sending));
}
}
最后更新于
这有帮助吗?