From 67ce2eb4b2778a85bacebe8088bf834455a19f25 Mon Sep 17 00:00:00 2001 From: Xadhoom <> Date: Sat, 2 Feb 2019 11:09:44 +0000 Subject: [PATCH] Network syncing implemented --- Stub/dvlnet.h | 6 +++--- Stub/dvlnet_udp.cpp | 18 +++++++----------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Stub/dvlnet.h b/Stub/dvlnet.h index dcb244e94..f39fa590a 100644 --- a/Stub/dvlnet.h +++ b/Stub/dvlnet.h @@ -40,9 +40,9 @@ public: }; // exact meaning yet to be worked out -#define PS_HASMSG 0x20000 -#define PS_ACTIVE 0x40000 #define PS_CONNECTED 0x10000 +#define PS_TURN_ARRIVED 0x20000 +#define PS_ACTIVE 0x40000 class dvlnet_udp : public dvlnet { public: @@ -163,7 +163,7 @@ private: message_t message_last; std::queue message_queue; std::array turn_last = { 0 }; - std::array turn_new = { false }; + std::array, MAX_PLRS> turn_queue; plr_t plr_self = ADDR_BROADCAST; unsigned short udpport_self = 0; diff --git a/Stub/dvlnet_udp.cpp b/Stub/dvlnet_udp.cpp index 08f600bca..74136812f 100644 --- a/Stub/dvlnet_udp.cpp +++ b/Stub/dvlnet_udp.cpp @@ -141,13 +141,10 @@ void dvlnet_udp::handle_join_request(upacket &pkt, endpoint sender) void dvlnet_udp::run_event_handler(_SNETEVENT &ev) { - /* disable until UI ready auto f = registered_handlers[static_cast(ev.eventid)]; if(f) { - printf("RUNNING HANDLER"); f(&ev); } - */ } void dvlnet_udp::handle_accept(upacket &pkt) @@ -159,9 +156,8 @@ void dvlnet_udp::handle_accept(upacket &pkt) _SNETEVENT ev; ev.eventid = EVENT_TYPE_PLAYER_CREATE_GAME; ev.playerid = plr_self; - ev.data = pkt->info().data(); + ev.data = const_cast(pkt->info().data()); ev.databytes = pkt->info().size(); - printf("GOT SEED!!"); run_event_handler(ev); } @@ -193,8 +189,7 @@ void dvlnet_udp::recv_decrypted(upacket &pkt, endpoint sender) message_queue.push(message_t(pkt->src(), pkt->message())); break; case PT_TURN: - turn_last[pkt->src()] = pkt->turn(); - turn_new[pkt->src()] = true; + turn_queue[pkt->src()].push(pkt->turn()); break; case PT_JOIN_ACCEPT: handle_accept(pkt); @@ -245,11 +240,12 @@ bool dvlnet_udp::SNetReceiveTurns(char **data, unsigned int *size, DWORD *status if (i == plr_self || nexthop_table[i] != none) { status[i] |= (PS_ACTIVE | PS_CONNECTED); } - size[i] = sizeof(turn_t); - if (turn_new[i] = true) { - status[i] |= PS_HASMSG; + if (!turn_queue[i].empty()) { + size[i] = sizeof(turn_t); + status[i] |= PS_TURN_ARRIVED; + turn_last[i] = turn_queue[i].front(); + turn_queue[i].pop(); data[i] = reinterpret_cast(&turn_last[i]); - turn_new[i] = false; } } return true;