type TPdfRangeRequestScheduler = class ... end;
| Method | Description |
|---|---|
Create | Membuat scheduler kosong dengan dua retry dan tanpa batas ukuran request |
Destroy | Melepaskan status scheduler dan primitif sinkronisasinya |
Reset(AFileSize) | Membatalkan pekerjaan transport aktif, memulai generasi baru, mengosongkan penghitung, dan secara opsional menegakkan batas file logis |
Cancel | Mengosongkan pekerjaan yang diantrekan, membatalkan generasi request yang sedang berjalan, dan memicu OnCancelRequest di luar lock scheduler |
MarkAvailable(Offset, Size) | Mencatat byte yang disuplai eksternal, menghapus tumpang-tindih yang tertunda, dan membatalkan transfer aktif yang redundan |
EnqueueHints(Hints, Priority) | Menambahkan interval yang belum ada, mempertahankan batas prioritas dan retry yang persis, serta menganulir transfer berprioritas lebih rendah yang tumpang-tindih |
TryDequeue(out Request) | Mengembalikan request berbatas dengan prioritas tertinggi dan offset terendah lalu menandainya sedang berjalan |
CompleteRequest(Request) | Menandai respons lengkap sebagai tersedia setelah host menyimpan byte-nya |
CompleteRequest(Request, BytesReceived) | Mengomitmen prefiks respons yang pendek lalu mengantre ulang atau mengabaikan sisanya di bawah batas retry |
FailRequest(Request) | Mengulang atau mengabaikan request yang sedang berjalan sesuai MaxRetryCount |
IsRangeAvailable(Offset, Size) | Menguji apakah interval yang selesai sepenuhnya menutupi sebuah rentang |
DataAvailable | Mengadaptasi pencarian rentang selesai ke TPdfDataAvailableEvent |
CopyCompletedRanges | Mengembalikan snapshot stabil interval tersedia yang sudah digabung |
CopyStatistics | Menyalin penghitung melalui metode yang ramah C++Builder |
| Member | Type | Description |
|---|---|---|
Cancelled | Boolean | Apakah generasi aktif telah dibatalkan |
FileSize | UInt64 | Batas request logis, atau nol untuk scheduler standalone tanpa batas |
MergeGap | UInt64 | Celah maksimum tak tertutup yang memenuhi syarat untuk digabung ketika tidak melintasi byte yang tersedia maupun sedang berjalan |
MaxRequestSize | UInt64 | Ukuran maksimum yang dikembalikan satu panggilan TryDequeue |
MaxRetryCount | Integer | Jumlah retry setelah percobaan transport awal |
Statistics | TPdfRangeRequestStatistics | Snapshot atomik yang mencakup PendingRequestCount, InFlightRequestCount, AvailableRangeCount, penghitung byte PendingBytes, InFlightBytes, CompletedBytes, dan TransferredBytes, serta total FailedAttemptCount, RetriedRequestCount, AbandonedRequestCount, DequeuedRequestCount, CompletedRequestCount, PartialRequestCount, CancelledRequestCount, dan SupersededRequestCount |
OnCancelRequest | TPdfRangeRequestCancelEvent | Meminta pembatalan satu operasi transport aktif berdasarkan ID request dan percobaan |
rrpImmediate dideque sebelum rrpNormal, lalu rrpBackgroundMergeGap, sehingga transfer ganda dicegahAttempt berbasis satu yang bertambahvar
Request: TPdfRangeRequest;
begin
while Scheduler.TryDequeue(Request) do
begin
try
WriteRangeResponse(Request.Offset, Request.Size);
Scheduler.CompleteRequest(Request);
except
Scheduler.FailRequest(Request);
end;
end;
end;
CompleteRequestTStream.Position bersama tetap menjadi tanggung jawab sinkronisasi host; gunakan I/O berposisi atau lock stream eksternalOnCancelRequest berjalan di luar lock internal untuk pembatalan sesi, preempsi prioritas, dan pembatalan transfer redundanTPdfRangeRequest,
TPdfRangeRequests,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestCancelEvent,
TPdfProgressiveDocument