65 lines
1.1 KiB
C++
65 lines
1.1 KiB
C++
|
#pragma once
|
||
|
|
||
|
#define NODE_HALFLIFE (3 * 60 * 1000) //3min
|
||
|
|
||
|
#ifdef NODE_LOG_MESSAGES
|
||
|
#define NODE_LOG(x, ...) Logger::Print(x, __VA_ARGS__)
|
||
|
#else
|
||
|
#define NODE_LOG(x, ...)
|
||
|
#endif
|
||
|
|
||
|
namespace Components
|
||
|
{
|
||
|
class Node : public Component
|
||
|
{
|
||
|
public:
|
||
|
class Data
|
||
|
{
|
||
|
public:
|
||
|
uint64_t protocol;
|
||
|
};
|
||
|
|
||
|
class Entry
|
||
|
{
|
||
|
public:
|
||
|
Network::Address address;
|
||
|
Data data;
|
||
|
|
||
|
std::optional<Utils::Time::Point> lastRequest;
|
||
|
std::optional<Utils::Time::Point> lastResponse;
|
||
|
|
||
|
bool isValid();
|
||
|
bool isDead();
|
||
|
|
||
|
bool requiresRequest();
|
||
|
void sendRequest();
|
||
|
|
||
|
void reset();
|
||
|
};
|
||
|
|
||
|
Node();
|
||
|
~Node();
|
||
|
|
||
|
static void Add(Network::Address address);
|
||
|
static void RunFrame();
|
||
|
static void Synchronize();
|
||
|
|
||
|
static void LoadNodeRemotePreset();
|
||
|
|
||
|
private:
|
||
|
static std::recursive_mutex Mutex;
|
||
|
static std::vector<Entry> Nodes;
|
||
|
static bool wasIngame;
|
||
|
|
||
|
static void HandleResponse(Network::Address address, std::string data);
|
||
|
|
||
|
static void SendList(Network::Address address);
|
||
|
|
||
|
static void LoadNodePreset();
|
||
|
static void LoadNodes();
|
||
|
static void StoreNodes(bool force);
|
||
|
|
||
|
static unsigned short GetPort();
|
||
|
};
|
||
|
}
|