Add speaker class, completing the black hand
This commit is contained in:
parent
95c6540ba2
commit
7a061b10d5
1 changed files with 37 additions and 0 deletions
37
speaker.js
Normal file
37
speaker.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
class Speaker {
|
||||
#callbacks = new Set()
|
||||
#immediate
|
||||
#scheduled = []
|
||||
|
||||
constructor(immediate) {
|
||||
this.#immediate = immediate
|
||||
}
|
||||
|
||||
listen(callback) {
|
||||
this.#callbacks.add(callback)
|
||||
}
|
||||
|
||||
speak(...args) {
|
||||
if (this.#immediate) {
|
||||
for (let callback of this.#callbacks) {
|
||||
callback(...args)
|
||||
}
|
||||
} else {
|
||||
if (!this.#scheduled.length) {
|
||||
queueMicrotask(() => {
|
||||
for (let callback of this.#callbacks) {
|
||||
callback(...args)
|
||||
}
|
||||
this.#scheduled = []
|
||||
})
|
||||
}
|
||||
this.#scheduled.push(args)
|
||||
}
|
||||
}
|
||||
|
||||
silence(callback) {
|
||||
this.#callbacks.delete(callbacks)
|
||||
}
|
||||
}
|
||||
|
||||
export default Speaker
|
Loading…
Reference in a new issue