Finish event bus propagation
This commit is contained in:
parent
302353f448
commit
4b44efe6fc
@ -7,9 +7,24 @@ export interface EventBusCommand {
|
|||||||
export default class EventBus {
|
export default class EventBus {
|
||||||
|
|
||||||
private commands: { [x: string]: EventBusCommand[]} = {};
|
private commands: { [x: string]: EventBusCommand[]} = {};
|
||||||
private downstreamBuses: { [x: string]: EventBus } = {};
|
private downstreamBuses: EventBus[] = [];
|
||||||
private upstreamBus?: EventBus;
|
private upstreamBus?: EventBus;
|
||||||
|
|
||||||
|
setUpstreamBus(eventBus: EventBus, stopRecursing: boolean = false) {
|
||||||
|
this.upstreamBus = eventBus;
|
||||||
|
if (!stopRecursing) {
|
||||||
|
this.upstreamBus.addDownstreamBus(this, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addDownstreamBus(eventBus: EventBus, stopRecursing: boolean = false) {
|
||||||
|
if (!this.downstreamBuses.includes(eventBus)) {
|
||||||
|
this.downstreamBuses.push(eventBus);
|
||||||
|
|
||||||
|
if (!stopRecursing) {
|
||||||
|
eventBus.setUpstreamBus(this, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
subscribe(commandString: string, command: EventBusCommand) {
|
subscribe(commandString: string, command: EventBusCommand) {
|
||||||
if (!this.commands[commandString]) {
|
if (!this.commands[commandString]) {
|
||||||
@ -52,21 +67,26 @@ export default class EventBus {
|
|||||||
|
|
||||||
|
|
||||||
sendGlobal(command: string, config: any) {
|
sendGlobal(command: string, config: any) {
|
||||||
if (!this.commands ||!this.commands[command]) {
|
this.send(command, config);
|
||||||
// ensure send is not being called for commands that we have no subscriptions for
|
this.sendUpstream(command, config);
|
||||||
return;
|
this.sendDownstream(command, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const eventBusCommand of this.commands[command]) {
|
|
||||||
this.sendUpstream(command, config);
|
sendDownstream(command: string, config: any, sourceEventBus?: EventBus) {
|
||||||
this.sendDownstream(command, config);
|
for (const eventBus of this.downstreamBuses) {
|
||||||
|
if (eventBus !== sourceEventBus) {
|
||||||
|
eventBus.send(command, config);
|
||||||
|
eventBus.sendDownstream(command, config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendDownstream(command: string, config: any) {
|
|
||||||
|
|
||||||
}
|
|
||||||
sendUpstream(command: string, config: any) {
|
sendUpstream(command: string, config: any) {
|
||||||
|
if (this.upstreamBus) {
|
||||||
|
this.upstreamBus.send(command, config);
|
||||||
|
this.upstreamBus.sendUpstream(command, config);
|
||||||
|
this.upstreamBus.sendDownstream(command, config, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user