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>
53 VDRServer(int tipVersion, const std::string tip, const std::string tname, USHORT tport, ULONG tversion)
54 : ipVersion(tipVersion), ip(tip), name(tname), port(tport), version(tversion) {}
60 ServerSorter(int tipPreferred) : ipPreferred(tipPreferred) {}
61 bool operator() (const VDRServer& a, const VDRServer& b)
64 return a.ipVersion == ipPreferred;
66 return a.name < b.name;
75 typedef std::function<void(int, const char*, const char*, USHORT, ULONG)> AddServerCallback;
82 bool init(AddServerCallback& taddFunc);
94 std::mutex startProtect;
95 std::thread receiveThread;
100 AddServerCallback addFunc;
108 bool init(AddServerCallback& taddFunc);
109 void run(); // blocks
116 std::mutex startProtect;
117 std::thread receiveThread;
122 AddServerCallback addFunc;
130 ULONG numServers() const;
131 const VDRServer& operator[](ULONG index) const;
133 void TEMPaddCLIServer(const std::string&); // FIXME NCONFIG
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};