From adac0d193bcc3fcf4d560b2763d947d6c18af0fb Mon Sep 17 00:00:00 2001
From: weihuoya <zwdreams@gmail.com>
Date: Sun, 4 Jul 2021 23:06:13 +0800
Subject: [PATCH] reduce network latency

---
 src/network/room.cpp        |  2 +-
 src/network/room_member.cpp | 18 ++++++++++--------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/network/room.cpp b/src/network/room.cpp
index cd0c0ebc4..2dc69c112 100644
--- a/src/network/room.cpp
+++ b/src/network/room.cpp
@@ -251,7 +251,7 @@ public:
 void Room::RoomImpl::ServerLoop() {
     while (state != State::Closed) {
         ENetEvent event;
-        if (enet_host_service(server, &event, 50) > 0) {
+        if (enet_host_service(server, &event, 16) > 0) {
             switch (event.type) {
             case ENET_EVENT_TYPE_RECEIVE:
                 switch (event.packet->data[0]) {
diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp
index e43004027..d67ea8289 100644
--- a/src/network/room_member.cpp
+++ b/src/network/room_member.cpp
@@ -159,7 +159,7 @@ void RoomMember::RoomMemberImpl::MemberLoop() {
     while (IsConnected()) {
         std::lock_guard lock(network_mutex);
         ENetEvent event;
-        if (enet_host_service(client, &event, 100) > 0) {
+        if (enet_host_service(client, &event, 16) > 0) {
             switch (event.type) {
             case ENET_EVENT_TYPE_RECEIVE:
                 switch (event.packet->data[0]) {
@@ -251,16 +251,18 @@ void RoomMember::RoomMemberImpl::MemberLoop() {
                 break;
             }
         }
+
+        std::list<Packet> packets;
         {
             std::lock_guard lock(send_list_mutex);
-            for (const auto& packet : send_list) {
-                ENetPacket* enetPacket = enet_packet_create(packet.GetData(), packet.GetDataSize(),
-                                                            ENET_PACKET_FLAG_RELIABLE);
-                enet_peer_send(server, 0, enetPacket);
-            }
-            enet_host_flush(client);
-            send_list.clear();
+            packets.swap(send_list);
         }
+        for (const auto& packet : packets) {
+            ENetPacket* enetPacket = enet_packet_create(packet.GetData(), packet.GetDataSize(),
+                                                        ENET_PACKET_FLAG_RELIABLE);
+            enet_peer_send(server, 0, enetPacket);
+        }
+        enet_host_flush(client);
     }
     Disconnect();
 };