diff options
author | Lee Salzman <[email protected]> | 2021-01-13 01:39:14 -0500 |
---|---|---|
committer | Lee Salzman <[email protected]> | 2021-01-13 01:39:14 -0500 |
commit | e3ada4ed750b976833e3d54a9c1179445289bbf6 (patch) | |
tree | 1a627e13f7473ed4c057d70aa0fd010b5503d17b | |
parent | 2cc0e7c78045fe2275e7959eb7b9992fe4fd038d (diff) | |
download | enet-e3ada4ed750b976833e3d54a9c1179445289bbf6.tar.gz enet-e3ada4ed750b976833e3d54a9c1179445289bbf6.zip |
implement mulberry32 for PRNG
-rw-r--r-- | host.c | 12 | ||||
-rw-r--r-- | include/enet/enet.h | 1 |
2 files changed, 12 insertions, 1 deletions
@@ -160,6 +160,16 @@ enet_host_destroy (ENetHost * host) enet_free (host); } +enet_uint32 +enet_host_random (ENetHost * host) +{ + /* Mulberry32 by Tommy Ettinger */ + enet_uint32 n = (host -> randomSeed += 0x6D2B79F5U); + n = (n ^ (n >> 15)) * (n | 1U); + n ^= n + (n ^ (n >> 7)) * (n | 61U); + return n ^ (n >> 14); +} + /** Initiates a connection to a foreign host. @param host host seeking the connection @param address destination for the connection @@ -199,7 +209,7 @@ enet_host_connect (ENetHost * host, const ENetAddress * address, size_t channelC currentPeer -> channelCount = channelCount; currentPeer -> state = ENET_PEER_STATE_CONNECTING; currentPeer -> address = * address; - currentPeer -> connectID = ++ host -> randomSeed; + currentPeer -> connectID = enet_host_random (host); if (host -> outgoingBandwidth == 0) currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; diff --git a/include/enet/enet.h b/include/enet/enet.h index fc45cbd..d422ef5 100644 --- a/include/enet/enet.h +++ b/include/enet/enet.h @@ -575,6 +575,7 @@ ENET_API void enet_host_channel_limit (ENetHost *, size_t); ENET_API void enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32); extern void enet_host_bandwidth_throttle (ENetHost *); extern enet_uint32 enet_host_random_seed (void); +extern enet_uint32 enet_host_random (ENetHost *); ENET_API int enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *); ENET_API ENetPacket * enet_peer_receive (ENetPeer *, enet_uint8 * channelID); |