import { NumberAllocator } from 'number-allocator'
import { IMessageIdProvider } from './default-message-id-provider'
/**
* UniqueMessageAllocator constructor
* @constructor
*/
export default class UniqueMessageIdProvider implements IMessageIdProvider {
private numberAllocator: NumberAllocator
private lastId: number
constructor() {
this.numberAllocator = new NumberAllocator(1, 65535)
}
/**
* allocate
*
* Get the next messageId.
* @return if messageId is fully allocated then return null,
* otherwise return the smallest usable unsigned int messageId.
*/
allocate() {
this.lastId = this.numberAllocator.alloc()
return this.lastId
}
/**
* getLastAllocated
* Get the last allocated messageId.
* @return unsigned int
*/
getLastAllocated() {
return this.lastId
}
/**
* register
* Register messageId. If success return true, otherwise return false.
* @param { unsigned int } - messageId to register,
* @return boolean
*/
register(messageId: number) {
return this.numberAllocator.use(messageId) as boolean
}
/**
* deallocate
* Deallocate messageId.
* @param { unsigned int } - messageId to deallocate,
*/
deallocate(messageId: number) {
this.numberAllocator.free(messageId)
}
/**
* clear
* Deallocate all messageIds.
*/
clear() {
this.numberAllocator.clear()
}
}