diff options
author | Ben Burwell <ben.burwell@trifecta.com> | 2016-11-19 17:39:05 -0500 |
---|---|---|
committer | Ben Burwell <ben.burwell@trifecta.com> | 2016-11-19 17:39:05 -0500 |
commit | 9441ed331af3aa6b3ef45bf165e40faad18bc7fd (patch) | |
tree | e4f9155ccce81e3cb2145a41a68dacff6671950a /src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java | |
parent | 4a7ae2831563622ebb4a1d893764afd0e0e0dfbe (diff) |
Use gradle
Diffstat (limited to 'src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java')
-rw-r--r-- | src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java b/src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java new file mode 100644 index 0000000..2850404 --- /dev/null +++ b/src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java @@ -0,0 +1,48 @@ +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<DataListener> subscribers = new ArrayList<>(); + private boolean isOpen = false; + private int nextSourceNumber = 1; + private Map<Integer,DataSource> sources = new HashMap<>(); + + public int addSource(DataSource source) { + int thisSourceNumber = this.nextSourceNumber++; + this.sources.put(thisSourceNumber, source); + source.subscribe((SBSPacket 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); + } + } +} |