/* * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef MPD_NEIGHBOR_EXPLORER_HXX #define MPD_NEIGHBOR_EXPLORER_HXX #include class Error; class NeighborListener; struct NeighborInfo; /** * An object that explores the neighborhood for music servers. * * As soon as this object is opened, it will start exploring, and * notify the #NeighborListener when it found or lost something. * * The implementation is supposed to be non-blocking. This can be * implemented either using the #EventLoop instance that was passed to * the NeighborPlugin or by moving the blocking parts in a dedicated * thread. */ class NeighborExplorer { protected: NeighborListener &listener; explicit NeighborExplorer(NeighborListener &_listener) :listener(_listener) {} public: typedef std::forward_list List; /** * Free instance data. */ virtual ~NeighborExplorer() {} /** * Start exploring the neighborhood. */ virtual bool Open(Error &error) = 0; /** * Stop exploring. */ virtual void Close() = 0; /** * Obtain a list of currently known neighbors. */ virtual List GetList() const = 0; }; #endif