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, u2 tport, u4 tversion)
56 : ipVersion(tipVersion), ip(tip), name(tname), port(tport), version(tversion) {}
63 bool operator() (const VDRServer& a, const VDRServer& b)
69 if (a.ipVersion == b.ipVersion)
75 return a.port < b.port;
78 return a.ip < b.ip; // yeah, weird
81 return a.ipVersion < b.ipVersion;
84 return a.name < b.name;
93 static LogNT* logger; // has to be static for inner classes to use it
94 typedef std::function<void(int, const char*, const char*, u2, u4)> AddServerCallback;
101 bool init(AddServerCallback& taddFunc);
102 void run(); // blocks
113 std::mutex startProtect;
114 std::thread receiveThread;
119 AddServerCallback addFunc;
127 bool init(AddServerCallback& taddFunc);
128 void run(); // blocks
135 std::mutex startProtect;
136 std::thread receiveThread;
141 AddServerCallback addFunc;
149 u4 numServers() const;
150 const VDRServer& operator[](u4 index) const;
153 std::vector<VDRServer> servers;
154 std::mutex serversLock;
156 std::condition_variable waitCond;
157 std::mutex waitMutex;
160 void filterServers();