mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
[Net] Add generate_unique_id to MultiplayerPeer.
Used by ENetMultiplayerPeer and WebSocketServer to generate network IDs, and exposed to the user for p2p networks (e.g. WebRTCMultiplayerPeer) and custom MultiplayerPeer implementations.
This commit is contained in:
parent
4cfa9bc0f1
commit
1e8bf86379
8 changed files with 34 additions and 45 deletions
|
@ -39,26 +39,6 @@ WebSocketMultiplayerPeer::~WebSocketMultiplayerPeer() {
|
|||
_clear();
|
||||
}
|
||||
|
||||
int WebSocketMultiplayerPeer::_gen_unique_id() const {
|
||||
uint32_t hash = 0;
|
||||
|
||||
while (hash == 0 || hash == 1) {
|
||||
hash = hash_djb2_one_32(
|
||||
(uint32_t)OS::get_singleton()->get_ticks_usec());
|
||||
hash = hash_djb2_one_32(
|
||||
(uint32_t)OS::get_singleton()->get_unix_time(), hash);
|
||||
hash = hash_djb2_one_32(
|
||||
(uint32_t)OS::get_singleton()->get_data_path().hash64(), hash);
|
||||
hash = hash_djb2_one_32(
|
||||
(uint32_t)((uint64_t)this), hash); //rely on aslr heap
|
||||
hash = hash_djb2_one_32(
|
||||
(uint32_t)((uint64_t)&hash), hash); //rely on aslr stack
|
||||
hash = hash & 0x7FFFFFFF; // make it compatible with unsigned, since negative id is used for exclusion
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
void WebSocketMultiplayerPeer::_clear() {
|
||||
_peer_map.clear();
|
||||
if (_current_packet.data != nullptr) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue