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));
        }
    }

最后更新于

这有帮助吗?