From 54b0fab72106672ea1d9ca4d81d782b6bf1c6820 Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Tue, 15 Nov 2016 23:43:08 -0500 Subject: Implement data table --- .../benburwell/planes/sbs/AggregateDataSource.java | 31 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/com/benburwell/planes/sbs/AggregateDataSource.java') diff --git a/src/com/benburwell/planes/sbs/AggregateDataSource.java b/src/com/benburwell/planes/sbs/AggregateDataSource.java index 08b89ea..2850404 100644 --- a/src/com/benburwell/planes/sbs/AggregateDataSource.java +++ b/src/com/benburwell/planes/sbs/AggregateDataSource.java @@ -2,22 +2,47 @@ package com.benburwell.planes.sbs; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.HashMap; /** * Created by ben on 11/15/16. */ public class AggregateDataSource implements DataSource { private List subscribers = new ArrayList<>(); + private boolean isOpen = false; + private int nextSourceNumber = 1; + private Map sources = new HashMap<>(); - public void addSource(DataSource source) { + public int addSource(DataSource source) { + int thisSourceNumber = this.nextSourceNumber++; + this.sources.put(thisSourceNumber, source); source.subscribe((SBSPacket packet) -> { - for (DataListener listener : subscribers) { - listener.handleMessage(packet); + if (isOpen) { + for (DataListener listener : subscribers) { + listener.handleMessage(packet); + } } }); + return thisSourceNumber; } public void subscribe(DataListener listener) { this.subscribers.add(listener); } + + public void open() { + this.isOpen = true; + } + + public void close() { + this.isOpen = false; + } + + public void closeSource(int sourceNumber) { + if (this.sources.containsKey(sourceNumber)) { + this.sources.get(sourceNumber).close(); + this.sources.remove(sourceNumber); + } + } } -- cgit v1.2.3