Add EventSource class.

This commit is contained in:
kovacsv 2022-07-02 22:25:34 +02:00
parent 235149c325
commit bd6c2b5114
3 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,27 @@
export class EventSource
{
constructor ()
{
this.eventListeners = new Map ();
}
AddEventListener (name, listener)
{
if (!this.eventListeners.has (name)) {
this.eventListeners.set (name, []);
}
let listeners = this.eventListeners.get (name);
listeners.push (listener);
}
NotifyEventListeners (name, ...args)
{
if (!this.eventListeners.has (name)) {
return;
}
let listeners = this.eventListeners.get (name);
for (let listener of listeners) {
listener (...args);
}
}
}

View File

@ -1,4 +1,5 @@
import { IsDefined, ValueOrDefault, CopyObjectAttributes, IsObjectEmpty, EscapeHtmlChars } from './core/core.js';
import { EventSource } from './core/eventsource.js';
import { TaskRunner, RunTaskAsync, RunTasks, RunTasksBatch, WaitWhile } from './core/taskrunner.js';
import { Exporter } from './export/exporter.js';
import { Exporter3dm } from './export/exporter3dm.js';
@ -76,6 +77,7 @@ export {
CopyObjectAttributes,
IsObjectEmpty,
EscapeHtmlChars,
EventSource,
TaskRunner,
RunTaskAsync,
RunTasks,

View File

@ -46,6 +46,24 @@ describe ('Core', function () {
OV.CopyObjectAttributes (src, dest3);
assert.deepStrictEqual (dest3, {a : null, b : null, c : 6});
});
it ('Event Source', function () {
let es = new OV.EventSource ();
let sumValues = 0;
es.AddEventListener ('first_event', (x) => {
sumValues += x;
});
es.AddEventListener ('first_event', (x) => {
sumValues += 2 * x;
});
es.AddEventListener ('second_event', (x, y) => {
sumValues += 3 * x;
sumValues += 3 * y;
});
es.NotifyEventListeners ('first_event', 5);
es.NotifyEventListeners ('second_event', 10, 15);
assert.strictEqual (sumValues, 90);
});
});
}