38 lines
786 B
TypeScript
38 lines
786 B
TypeScript
import { IMessage } from "./message";
|
|
|
|
export interface IMessageQueue {
|
|
getLastReadAt(): number;
|
|
|
|
addMessage(message: IMessage): void;
|
|
|
|
readMessage(): IMessage | undefined;
|
|
|
|
getMessages(): IMessage[];
|
|
}
|
|
|
|
export class MessageQueue implements IMessageQueue {
|
|
private lastReadAt: number = new Date().getTime();
|
|
private readonly messages: IMessage[] = [];
|
|
|
|
public getLastReadAt(): number {
|
|
return this.lastReadAt;
|
|
}
|
|
|
|
public addMessage(message: IMessage): void {
|
|
this.messages.push(message);
|
|
}
|
|
|
|
public readMessage(): IMessage | undefined {
|
|
if (this.messages.length > 0) {
|
|
this.lastReadAt = new Date().getTime();
|
|
return this.messages.shift();
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
public getMessages(): IMessage[] {
|
|
return this.messages;
|
|
}
|
|
}
|