2 Copyright 2020 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP. If not, see <https://www.gnu.org/licenses/>.
23 // Vomp Discovery Protocol Client
29 #include <condition_variable>
55 VDRServer(int tipVersion, const std::string tip, const std::string tname, USHORT tport, ULONG tversion)
56 : ipVersion(tipVersion), ip(tip), name(tname), port(tport), version(tversion) {}
62 ServerSorter(int tipPreferred) : ipPreferred(tipPreferred) {}
63 bool operator() (const VDRServer& a, const VDRServer& b)
66 return a.ipVersion == ipPreferred;
68 return a.name < b.name;
77 typedef std::function<void(int, const char*, const char*, USHORT, ULONG)> AddServerCallback;
84 bool init(AddServerCallback& taddFunc);
96 std::mutex startProtect;
97 std::thread receiveThread;
102 AddServerCallback addFunc;
110 bool init(AddServerCallback& taddFunc);
111 void run(); // blocks
118 std::mutex startProtect;
119 std::thread receiveThread;
124 AddServerCallback addFunc;
132 ULONG numServers() const;
133 const VDRServer& operator[](ULONG index) const;
136 std::vector<VDRServer> servers;
137 std::mutex serversLock;
139 std::condition_variable waitCond;
140 std::mutex waitMutex;
143 // FIXME retrieve from new config system NCONFIG
144 bool dedupServers{true};