From 9441ed331af3aa6b3ef45bf165e40faad18bc7fd Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Sat, 19 Nov 2016 17:39:05 -0500 Subject: Use gradle --- .../benburwell/planes/sbs/AggregateDataSource.java | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java (limited to 'src/main/java/com/benburwell/planes/sbs/AggregateDataSource.java') 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 subscribers = new ArrayList<>(); + private boolean isOpen = false; + private int nextSourceNumber = 1; + private Map 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); + } + } +} -- cgit v1.2.3