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) {}
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;
91 typedef std::function<void(int, const char*, const char*, USHORT, ULONG)> AddServerCallback;
98 bool init(AddServerCallback& taddFunc);
110 std::mutex startProtect;
111 std::thread receiveThread;
116 AddServerCallback addFunc;
124 bool init(AddServerCallback& taddFunc);
125 void run(); // blocks
132 std::mutex startProtect;
133 std::thread receiveThread;
138 AddServerCallback addFunc;
146 ULONG numServers() const;
147 const VDRServer& operator[](ULONG index) const;
150 std::vector<VDRServer> servers;
151 std::mutex serversLock;
153 std::condition_variable waitCond;
154 std::mutex waitMutex;