@webda/core
Version:
Expose API with Lambda
81 lines • 1.98 kB
JavaScript
;
import * as uuid from "uuid";
import { JSONUtils } from "../utils/serializers.js";
import { Queue, QueueParameters } from "./queueservice.js";
export class MemoryQueueParameters extends QueueParameters {
constructor(params) {
super(params);
this.expire = this.expire ?? 30;
this.expire *= 1000;
}
}
/**
* FIFO Queue in Memory
* @category CoreServices
* @WebdaModda
*/
export class MemoryQueue extends Queue {
constructor() {
super(...arguments);
this._queue = {};
}
/**
* Load parameters
*
* @param params
* @ignore
*/
loadParameters(params) {
return new MemoryQueueParameters(params);
}
/**
* Return queue size
*/
async size() {
return Object.keys(this._queue).length;
}
async sendMessage(params) {
let uid = uuid.v4();
// Avoid duplication
while (this._queue[uid]) {
uid = uuid.v4();
}
this._queue[uid] = {
Body: JSONUtils.stringify(params, undefined, 0),
Claimed: 0,
ReceiptHandle: uid
};
}
/**
* @inheritdoc
*/
async receiveMessage(proto) {
for (let i in this._queue) {
if (this._queue[i].Claimed < new Date().getTime() - this.parameters.expire) {
this._queue[i].Claimed = new Date().getTime();
return [
{
ReceiptHandle: this._queue[i].ReceiptHandle,
Message: this.unserialize(this._queue[i].Body, proto)
}
];
}
}
return [];
}
/**
* @inheritdoc
*/
async deleteMessage(receipt) {
if (this._queue[receipt]) {
delete this._queue[receipt];
}
}
/**
* @inheritdoc
*/
async __clean() {
this._queue = {};
}
}
//# sourceMappingURL=memoryqueue.js.map