/* Copyright (c) 2011 Danish Maritime Authority * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see <http://www.gnu.org/licenses/>. */ package dk.dma.ais.tracker; import dk.dma.ais.packet.AisPacket; import dk.dma.ais.packet.AisPacketReader; import dk.dma.ais.packet.AisPacketStream; import java.io.IOException; /** * A tracking service receives AisPackets and based on these it maintains a collection of all known tracks, * including their position, speed, course, etc. * * The AisPackets are assumed to arrive in timely order; i.e. by ever-increasing values of timestamp. * * TODO: Identify further methods which can be shared between tracker implementations. */ public interface Tracker { /** * Start to track targets based on AisPackets received from an AisPacketStream. * * @param stream the AisPacketStream to track. * @return the Subscription. */ default AisPacketStream.Subscription subscribeToPacketStream(AisPacketStream stream) { return stream.subscribe(p -> update(p)); } /** * Start to track targets based on AisPackets received from an AisPacketReader. * * @param packetReader the AisPacketReader to receive packets from. */ default void subscribeToPacketReader(AisPacketReader packetReader) throws IOException { packetReader.forEachRemaining(p -> update(p)); } /** * Update the tracker with a single AisPacket. * @param aisPacket the AIS packet. */ void update(AisPacket aisPacket); /** * Returns the latest target info for the specified MMSI number. * * @param mmsi * the MMSI number * @return the latest target info for the specified MMSI number */ Target get(int mmsi); /** * Returns the number of targets that is being tracked. * * @return the number of targets that is being tracked */ int size(); }