1#ifndef ENGINE_FAVORITES_H
2#define ENGINE_FAVORITES_H
3
4#include "kernel.h"
5
6#include <base/types.h>
7
8#include <engine/shared/protocol.h>
9
10#include <memory>
11
12class IConfigManager;
13
14class IFavorites : public IInterface
15{
16 MACRO_INTERFACE("favorites")
17
18protected:
19 virtual void OnConfigSave(IConfigManager *pConfigManager) = 0;
20
21public:
22 class CEntry
23 {
24 public:
25 int m_NumAddrs;
26 NETADDR m_aAddrs[MAX_SERVER_ADDRESSES];
27 bool m_AllowPing;
28 };
29
30 virtual TRISTATE IsFavorite(const NETADDR *pAddrs, int NumAddrs) const = 0;
31 // Only considers the addresses that are actually favorites.
32 virtual TRISTATE IsPingAllowed(const NETADDR *pAddrs, int NumAddrs) const = 0;
33 virtual void Add(const NETADDR *pAddrs, int NumAddrs) = 0;
34 // Only considers the addresses that are actually favorites.
35 virtual void AllowPing(const NETADDR *pAddrs, int NumAddrs, bool AllowPing) = 0;
36 virtual void Remove(const NETADDR *pAddrs, int NumAddrs) = 0;
37 virtual void AllEntries(const CEntry **ppEntries, int *pNumEntries) = 0;
38
39 // Pass the `IFavorites` instance as callback.
40 static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
41};
42
43std::unique_ptr<IFavorites> CreateFavorites();
44#endif // ENGINE_FAVORITES_H
45