From 675a67b676bdc7324f11df64882c715c593a32fb Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 10 Mar 2019 03:28:44 -0700 Subject: [PATCH] Set data rate to disabled by default --- common/net/daybreak_connection.cpp | 15 +++++++++++---- common/net/daybreak_connection.h | 6 +++++- common/ruletypes.h | 2 +- zone/command.cpp | 7 +++++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/common/net/daybreak_connection.cpp b/common/net/daybreak_connection.cpp index ecd8c90a7..76f547736 100644 --- a/common/net/daybreak_connection.cpp +++ b/common/net/daybreak_connection.cpp @@ -372,7 +372,11 @@ void EQ::Net::DaybreakConnection::QueuePacket(Packet &p, int stream, bool reliab EQ::Net::DaybreakConnectionStats EQ::Net::DaybreakConnection::GetStats() { - return m_stats; + EQ::Net::DaybreakConnectionStats ret = m_stats; + ret.datarate_remaining = m_outgoing_budget; + ret.avg_ping = m_rolling_ping; + + return ret; } void EQ::Net::DaybreakConnection::ResetStats() @@ -785,14 +789,14 @@ void EQ::Net::DaybreakConnection::ProcessDecodedPacket(const Packet &p) InternalSend(out); break; } - case OP_SessionStatResponse: + case OP_SessionStatResponse: { auto response = p.GetSerialize(0); m_stats.sync_remote_sent_packets = EQ::Net::NetworkToHost(response.server_sent); m_stats.sync_remote_recv_packets = EQ::Net::NetworkToHost(response.server_recv); m_stats.sync_sent_packets = m_stats.sent_packets; m_stats.sync_recv_packets = m_stats.recv_packets; - break; + } default: LogF(Logs::Detail, Logs::Netcode, "Unhandled opcode {0:#x}", p.GetInt8(1)); break; @@ -1253,12 +1257,15 @@ void EQ::Net::DaybreakConnection::SendKeepAlive() void EQ::Net::DaybreakConnection::InternalSend(Packet &p) { - if (m_owner->m_options.outgoing_data_rate >= 0.0) { + if (m_owner->m_options.outgoing_data_rate > 0.0) { auto new_budget = m_outgoing_budget - (p.Length() / 1024.0); if (new_budget <= 0.0) { m_stats.dropped_datarate_packets++; return; } + else { + m_outgoing_budget = new_budget; + } } m_last_send = Clock::now(); diff --git a/common/net/daybreak_connection.h b/common/net/daybreak_connection.h index cf996ab20..027b3345e 100644 --- a/common/net/daybreak_connection.h +++ b/common/net/daybreak_connection.h @@ -84,11 +84,13 @@ namespace EQ sync_remote_sent_packets = 0; min_ping = 0xFFFFFFFFFFFFFFFFUL; max_ping = 0; + avg_ping = 0; created = Clock::now(); dropped_datarate_packets = 0; resent_packets = 0; resent_fragments = 0; resent_full = 0; + datarate_remaining = 0.0; } uint64_t recv_bytes; @@ -101,12 +103,14 @@ namespace EQ uint64_t sync_remote_sent_packets; uint64_t min_ping; uint64_t max_ping; + uint64_t avg_ping; uint64_t last_ping; Timestamp created; uint64_t dropped_datarate_packets; //packets dropped due to datarate limit, couldn't think of a great name uint64_t resent_packets; uint64_t resent_fragments; uint64_t resent_full; + double datarate_remaining; }; class DaybreakConnectionManager; @@ -247,7 +251,7 @@ namespace EQ tic_rate_hertz = 60.0; resend_timeout = 90000; connection_close_time = 2000; - outgoing_data_rate = 8.0; + outgoing_data_rate = 0.0; } size_t max_packet_size; diff --git a/common/ruletypes.h b/common/ruletypes.h index 1bdd73cc1..911c65814 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -709,7 +709,7 @@ RULE_INT(Network, ResendDelayBaseMS, 100) RULE_REAL(Network, ResendDelayFactor, 1.5) RULE_INT(Network, ResendDelayMinMS, 100) RULE_INT(Network, ResendDelayMaxMS, 5000) -RULE_REAL(Network, ClientDataRate, 50.0) // 50KB / Sec +RULE_REAL(Network, ClientDataRate, 0.0) // KB / sec, 0.0 disabled RULE_CATEGORY_END() RULE_CATEGORY(QueryServ) diff --git a/zone/command.cpp b/zone/command.cpp index 47f0e7382..5d31972ac 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -9488,6 +9488,7 @@ void command_netstats(Client *c, const Seperator *sep) } auto connection = c->Connection(); + auto &opts = connection->GetRawConnection()->GetManager()->GetOptions(); auto stats = connection->GetRawConnection()->GetStats(); auto now = EQ::Net::Clock::now(); auto sec_since_stats_reset = std::chrono::duration_cast>(now - stats.created).count(); @@ -9499,6 +9500,7 @@ void command_netstats(Client *c, const Seperator *sep) c->Message(0, "Min Ping: %u", stats.min_ping); c->Message(0, "Max Ping: %u", stats.max_ping); c->Message(0, "Last Ping: %u", stats.last_ping); + c->Message(0, "Averge Ping: %u", stats.avg_ping); c->Message(0, "--------------------------------------------------------------------"); c->Message(0, "(Realtime) Recv Packets: %u (%.2f/sec)", stats.recv_packets, stats.recv_packets / sec_since_stats_reset); c->Message(0, "(Realtime) Sent Packets: %u (%.2f/sec)", stats.sent_packets, stats.sent_packets / sec_since_stats_reset); @@ -9513,6 +9515,11 @@ void command_netstats(Client *c, const Seperator *sep) c->Message(0, "Resent Fragments: %u (%.2f/sec)", stats.resent_fragments, stats.resent_fragments / sec_since_stats_reset); c->Message(0, "Resent Non-Fragments: %u (%.2f/sec)", stats.resent_full, stats.resent_full / sec_since_stats_reset); c->Message(0, "Dropped Datarate Packets: %u (%.2f/sec)", stats.dropped_datarate_packets, stats.dropped_datarate_packets / sec_since_stats_reset); + + if (opts.outgoing_data_rate > 0.0) { + c->Message(0, "Outgoing Link Saturation %.2f%% (%.2fkb/sec)", 100.0 * (1.0 - ((opts.outgoing_data_rate - stats.datarate_remaining) / opts.outgoing_data_rate)), opts.outgoing_data_rate); + } + c->Message(0, "--------------------------------------------------------------------"); } }