forked from citizenfx/fivem
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathClientRegistry.cpp
More file actions
111 lines (86 loc) · 1.93 KB
/
ClientRegistry.cpp
File metadata and controls
111 lines (86 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <StdInc.h>
#include "ClientRegistry.h"
#include "GameServer.h"
struct FarLockImpl : fx::FarLock::ImplBase
{
// actual implementation uses folly's shared mutex
std::shared_mutex mutex;
bool TryLock() override
{
return mutex.try_lock();
}
void LockShared() override
{
return mutex.lock_shared();
}
void Lock() override
{
return mutex.lock();
}
void Unlock() override
{
return mutex.unlock();
}
void UnlockShared() override
{
return mutex.unlock_shared();
}
};
fx::FarLock::FarLock()
: impl(std::make_unique<FarLockImpl>())
{
}
fx::FarLock::~FarLock()
{
}
fx::ClientRegistry::ClientRegistry()
: m_hostNetId(-1), m_curNetId(1), m_instance(nullptr)
{
m_clientsBySlotId.resize(MAX_CLIENTS);
}
fx::ClientSharedPtr fx::ClientRegistry::MakeClient(const std::string& guid)
{
fx::ClientSharedPtr client = fx::ClientSharedPtr::Construct(guid);
client->SetNetId(m_amountConnectedClients + 1);
const auto local = net::PeerAddress::FromString("127.0.0.1").get();
client->SetPeer(1, local);
client->SetName(guid);
fx::ClientWeakPtr weakClient(client);
m_clientsBySlotId[client->GetNetId()] = weakClient;
m_clientsByNetId[client->GetNetId()] = weakClient;
{
std::unique_lock writeHolder(m_clientMutex);
m_clients.emplace(guid, client);
}
++m_amountConnectedClients;
return client;
}
void fx::ClientRegistry::HandleConnectingClient(const fx::ClientSharedPtr& client)
{
}
void fx::ClientRegistry::HandleConnectedClient(const fx::ClientSharedPtr& client, uint32_t oldNetID)
{
}
fx::ClientSharedPtr fx::ClientRegistry::GetHost()
{
if (m_hostNetId == 0xFFFF)
{
return fx::ClientSharedPtr{};
}
return GetClientByNetID(m_hostNetId);
}
void fx::ClientRegistry::SetHost(const fx::ClientSharedPtr& client)
{
if (!client)
{
m_hostNetId = -1;
}
else if (!fx::IsOneSync())
{
m_hostNetId = client->GetNetId();
}
}
void fx::ClientRegistry::AttachToObject(ServerInstanceBase* instance)
{
m_instance = instance;
}