Initial commit
This commit is contained in:
commit
f1548f10cc
7585 files changed
+1411120
No files matched your search
+74
@@ -0,0 +1,74 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.FileDescriptorQueue = void 0;
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
const Queue_1 = __importDefault(require("./Queue"));
|
||||
/**
|
||||
* Limits the number of concurrent file handlers.
|
||||
* Use it as a wrapper over fs.open() and fs.close().
|
||||
* Example:
|
||||
* const fdQueue = new FileDescriptorQueue(8)
|
||||
* fdQueue.open(path, flags, (err, fd) =>{
|
||||
* ...
|
||||
* fdQueue.close(fd, (err) =>{
|
||||
* ...
|
||||
* })
|
||||
* })
|
||||
* As of node v7, calling fd.close without a callback is deprecated.
|
||||
*/
|
||||
class FileDescriptorQueue {
|
||||
constructor(maxFilesNo) {
|
||||
this.maxFilesNo = maxFilesNo;
|
||||
this.activeCount = 0;
|
||||
this.pendingJobs = new Queue_1.default();
|
||||
}
|
||||
open(path, flags, callback) {
|
||||
this.pendingJobs.enqueue({
|
||||
path: path,
|
||||
flags: flags,
|
||||
callback: callback
|
||||
});
|
||||
this.process();
|
||||
}
|
||||
process() {
|
||||
if (this.pendingJobs.getLength() > 0 && this.activeCount < this.maxFilesNo) {
|
||||
const job = this.pendingJobs.dequeue();
|
||||
this.activeCount++;
|
||||
fs_1.default.open(job.path, job.flags, job.callback);
|
||||
}
|
||||
}
|
||||
close(fd, callback) {
|
||||
this.activeCount--;
|
||||
fs_1.default.close(fd, callback);
|
||||
this.process();
|
||||
}
|
||||
openPromise(path, flags) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.open(path, flags, (err, fd) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(fd);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
closePromise(fd) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.close(fd, (err) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.FileDescriptorQueue = FileDescriptorQueue;
|
||||
//# sourceMappingURL=FileDescriptorQueue.js.map
|
||||
Reference in new issue
Block a user