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>
49 VDRServer(int tipVersion, const std::string tip, const std::string tname, USHORT tport, ULONG tversion)
50 : ipVersion(tipVersion), ip(tip), name(tname), port(tport), version(tversion) {}
56 ServerSorter(int tipPreferred) : ipPreferred(tipPreferred) {}
57 bool operator() (const VDRServer& a, const VDRServer& b)
60 return a.ipVersion == ipPreferred;
62 return a.name < b.name;
71 typedef std::function<void(int, const char*, const char*, USHORT, ULONG)> AddServerCallback;
78 bool init(AddServerCallback& taddFunc);
86 std::mutex startProtect;
87 std::thread receiveThread;
92 AddServerCallback addFunc;
100 bool init(AddServerCallback& taddFunc);
101 void run(); // blocks
108 std::mutex startProtect;
109 std::thread receiveThread;
114 AddServerCallback addFunc;
122 ULONG numServers() const;
123 const VDRServer& operator[](ULONG index) const;
125 void TEMPaddCLIServer(const std::string&); // FIXME NCONFIG
128 std::vector<VDRServer> servers;
129 std::mutex serversLock;
131 std::condition_variable waitCond;
132 std::mutex waitMutex;
135 // FIXME retrieve from new config system NCONFIG
136 bool dedupServers{true};