add message service

This commit is contained in:
Jake McDermott 2018-05-07 00:48:55 -04:00
parent 34a2128af8
commit a3fdd244b5
No known key found for this signature in database
GPG Key ID: 3B02CAD476EECB35
2 changed files with 43 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import RenderService from '~features/output/render.service';
import ScrollService from '~features/output/scroll.service';
import EngineService from '~features/output/engine.service';
import StatusService from '~features/output/status.service';
import MessageService from '~features/output/message.service';
import LegacyRedirect from '~features/output/legacy.route';
import DetailsDirective from '~features/output/details.directive';
@ -221,6 +222,7 @@ angular
.service('JobRenderService', RenderService)
.service('JobEventEngine', EngineService)
.service('JobStatusService', StatusService)
.service('JobMessageService', MessageService)
.directive('atJobDetails', DetailsDirective)
.directive('atJobSearch', SearchDirective)
.directive('atJobStats', StatsDirective)

View File

@ -0,0 +1,41 @@
function MessageService () {
const listeners = {};
const registry = {};
this.subscribe = (key, listener) => {
registry[key] = registry[key] || 0;
listeners[key] = listeners[key] || {};
listeners[key][registry[key]] = listener;
const unsubscribe = this.createCallback(key, registry[key]);
registry[key]++;
return unsubscribe;
};
this.dispatch = (key, data) => {
if (!listeners[key]) {
return;
}
const indices = Object.keys(listeners[key]);
for (let i = 0; i < indices.length; i++) {
listeners[key][indices[i]](data);
}
};
this.createCallback = (key, index) => {
const callback = () => {
if (listeners[key]) {
delete listeners[key][index];
}
};
return callback;
};
}
export default MessageService;