From 639255d63024af688d6077402fc6d79ed68cd7b4 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Sun, 26 Mar 2023 18:50:18 +0200 Subject: [PATCH] attempt 2 at keeping mirror clients from lagging too far behind --- src/frontend/qt_sdl/Netplay.cpp | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/frontend/qt_sdl/Netplay.cpp b/src/frontend/qt_sdl/Netplay.cpp index 354ba953..ed5f8b95 100644 --- a/src/frontend/qt_sdl/Netplay.cpp +++ b/src/frontend/qt_sdl/Netplay.cpp @@ -672,8 +672,8 @@ void ProcessMirrorHost() case ENET_EVENT_TYPE_RECEIVE: { - if (event.packet->dataLength != 1) break; - u8* data = (u8*)event.packet->data; + if (event.packet->dataLength != 4) break; + /*u8* data = (u8*)event.packet->data; if (data[0]) { @@ -685,6 +685,29 @@ void ProcessMirrorHost() event.peer->data = (void*)0; block = false; + for (int i = 0; i < MirrorHost->peerCount; i++) + { + ENetPeer* peer = &(MirrorHost->peers[i]); + if (peer->state != ENET_PEER_STATE_CONNECTED) continue; + if (peer->data != (void*)0) + { + block = true; + break; + } + } + }*/ + u32 clientframes = *(u32*)event.packet->data; + + if (clientframes > (NDS::NumFrames + 4)) + { + event.peer->data = (void*)1; + block = true; + } + else + { + event.peer->data = (void*)0; + block = false; + for (int i = 0; i < MirrorHost->peerCount; i++) { ENetPeer* peer = &(MirrorHost->peers[i]); @@ -739,7 +762,7 @@ void ProcessMirrorClient() memcpy(&frame, data, sizeof(InputFrame)); InputQueue.push(frame); - bool lag = (InputQueue.size() > 4*2); + /*bool lag = (InputQueue.size() > 4*2); if (lag != Lag) { // let the mirror host know they are running too fast for us @@ -749,6 +772,10 @@ printf("mirror client lag notify: %d\n", lag); enet_peer_send(event.peer, 0, pkt); Lag = lag; + }*/ + { + ENetPacket* pkt = enet_packet_create(&NDS::NumFrames, 4, ENET_PACKET_FLAG_RELIABLE); + enet_peer_send(event.peer, 0, pkt); } } break;