mirror of
https://github.com/EQEmu/Server.git
synced 2026-02-21 17:52:25 +00:00
Some changes to sync sending, dont even bother sending them now just wait to reply
This commit is contained in:
parent
56fdc6aaac
commit
742806158c
@ -357,11 +357,6 @@ void EQ::Net::DaybreakConnection::ResetStats()
|
||||
void EQ::Net::DaybreakConnection::Process()
|
||||
{
|
||||
try {
|
||||
m_resend_delay = (size_t)(((m_stats.min_ping + m_stats.max_ping) / 2) * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms;
|
||||
if (m_resend_delay > m_owner->m_options.resend_delay_max) {
|
||||
m_resend_delay = m_owner->m_options.resend_delay_max;
|
||||
}
|
||||
|
||||
auto now = Clock::now();
|
||||
auto time_since_hold = (size_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - m_hold_time).count();
|
||||
if (time_since_hold >= m_owner->m_options.hold_length_ms) {
|
||||
@ -369,12 +364,6 @@ void EQ::Net::DaybreakConnection::Process()
|
||||
}
|
||||
|
||||
ProcessQueue();
|
||||
|
||||
auto time_since_stats = (size_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - m_last_stats).count();
|
||||
if (m_owner->m_options.stats_delay_ms > 0 && time_since_stats >= m_owner->m_options.stats_delay_ms) {
|
||||
SendStatSync();
|
||||
m_last_stats = now;
|
||||
}
|
||||
}
|
||||
catch (std::exception ex) {
|
||||
Log.OutF(Logs::Detail, Logs::Netcode, "Error processing connection: {0}", ex.what());
|
||||
@ -752,6 +741,8 @@ void EQ::Net::DaybreakConnection::ProcessDecodedPacket(const Packet &p)
|
||||
DynamicPacket out;
|
||||
out.PutSerialize(0, response);
|
||||
InternalSend(out);
|
||||
|
||||
m_resend_delay = std::min((size_t)(request.avg_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms, m_owner->m_options.resend_delay_max);
|
||||
break;
|
||||
}
|
||||
case OP_SessionStatResponse:
|
||||
@ -1037,11 +1028,12 @@ void EQ::Net::DaybreakConnection::Ack(int stream, uint16_t seq)
|
||||
auto iter = s->sent_packets.begin();
|
||||
while (iter != s->sent_packets.end()) {
|
||||
if (iter->first <= seq) {
|
||||
uint64_t round_time = (uint64_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - iter->second.last_sent).count();
|
||||
uint64_t round_time = (uint64_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - iter->second.first_sent).count();
|
||||
m_stats.total_ping += round_time;
|
||||
m_stats.total_acks++;
|
||||
m_stats.max_ping = std::max(m_stats.max_ping, round_time);
|
||||
m_stats.min_ping = std::min(m_stats.min_ping, round_time);
|
||||
m_stats.last_ping = round_time;
|
||||
m_rolling_ping = (m_rolling_ping + round_time) / 2;
|
||||
iter = s->sent_packets.erase(iter);
|
||||
}
|
||||
@ -1057,11 +1049,12 @@ void EQ::Net::DaybreakConnection::OutOfOrderAck(int stream, uint16_t seq)
|
||||
auto s = &m_streams[stream];
|
||||
auto iter = s->sent_packets.find(seq);
|
||||
if (iter != s->sent_packets.end()) {
|
||||
uint64_t round_time = (uint64_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - iter->second.last_sent).count();
|
||||
uint64_t round_time = (uint64_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - iter->second.first_sent).count();
|
||||
m_stats.total_ping += round_time;
|
||||
m_stats.total_acks++;
|
||||
m_stats.max_ping = std::max(m_stats.max_ping, round_time);
|
||||
m_stats.min_ping = std::min(m_stats.min_ping, round_time);
|
||||
m_stats.last_ping = round_time;
|
||||
m_rolling_ping = (m_rolling_ping + round_time) / 2;
|
||||
s->sent_packets.erase(iter);
|
||||
}
|
||||
@ -1093,29 +1086,6 @@ void EQ::Net::DaybreakConnection::SendOutOfOrderAck(int stream_id, uint16_t seq)
|
||||
InternalBufferedSend(p);
|
||||
}
|
||||
|
||||
void EQ::Net::DaybreakConnection::SendStatSync()
|
||||
{
|
||||
DaybreakSessionStatRequest request;
|
||||
request.zero = 0;
|
||||
request.opcode = OP_SessionStatRequest;
|
||||
request.timestamp = EQ::Net::HostToNetwork(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() & 0xFFFFLL);
|
||||
request.stat_ping = m_stats.last_stat_ping;
|
||||
if (m_stats.total_stat_count > 0)
|
||||
request.avg_ping = m_stats.total_stat_ping / m_stats.total_stat_count;
|
||||
else
|
||||
request.avg_ping = 0;
|
||||
request.min_ping = m_stats.min_stat_ping;
|
||||
request.max_ping = m_stats.max_stat_ping;
|
||||
request.last_ping = m_stats.last_stat_ping;
|
||||
request.packets_sent = m_stats.sent_packets + 1;
|
||||
request.packets_recv = m_stats.recv_packets;
|
||||
m_last_session_stats = Clock::now();
|
||||
|
||||
//EQ::Net::DynamicPacket p;
|
||||
//p.PutSerialize(0, request);
|
||||
//InternalBufferedSend(p);
|
||||
}
|
||||
|
||||
void EQ::Net::DaybreakConnection::InternalBufferedSend(Packet &p)
|
||||
{
|
||||
if (p.Length() > 0xFFU) {
|
||||
|
||||
@ -82,11 +82,6 @@ namespace EQ
|
||||
total_acks = 0;
|
||||
min_ping = 0xFFFFFFFFFFFFFFFFUL;
|
||||
max_ping = 0;
|
||||
total_stat_ping = 0;
|
||||
total_stat_count = 0;
|
||||
min_stat_ping = 0xFFFFFFFFFFFFFFFFUL;
|
||||
max_stat_ping = 0;
|
||||
last_stat_ping = 0;
|
||||
created = Clock::now();
|
||||
}
|
||||
|
||||
@ -98,11 +93,7 @@ namespace EQ
|
||||
uint64_t total_acks;
|
||||
uint64_t min_ping;
|
||||
uint64_t max_ping;
|
||||
uint64_t total_stat_ping;
|
||||
uint64_t total_stat_count;
|
||||
uint64_t min_stat_ping;
|
||||
uint64_t max_stat_ping;
|
||||
uint64_t last_stat_ping;
|
||||
uint64_t last_ping;
|
||||
Timestamp created;
|
||||
};
|
||||
|
||||
@ -143,7 +134,6 @@ namespace EQ
|
||||
std::list<DynamicPacket> m_buffered_packets;
|
||||
size_t m_buffered_packets_length;
|
||||
std::unique_ptr<char[]> m_combined;
|
||||
Timestamp m_last_stats;
|
||||
DaybreakConnectionStats m_stats;
|
||||
Timestamp m_last_session_stats;
|
||||
size_t m_resend_delay;
|
||||
@ -203,7 +193,6 @@ namespace EQ
|
||||
void SendKeepAlive();
|
||||
void SendAck(int stream, uint16_t seq);
|
||||
void SendOutOfOrderAck(int stream, uint16_t seq);
|
||||
void SendStatSync();
|
||||
void InternalBufferedSend(Packet &p);
|
||||
void InternalSend(Packet &p);
|
||||
void InternalQueuePacket(Packet &p, int stream_id, bool reliable);
|
||||
@ -221,7 +210,6 @@ namespace EQ
|
||||
resend_delay_ms = 300;
|
||||
resend_delay_factor = 1.5;
|
||||
resend_delay_max = 5000;
|
||||
stats_delay_ms = 9000;
|
||||
connect_delay_ms = 500;
|
||||
stale_connection_ms = 60000;
|
||||
connect_stale_ms = 5000;
|
||||
@ -243,7 +231,6 @@ namespace EQ
|
||||
double resend_delay_factor;
|
||||
size_t resend_delay_ms;
|
||||
size_t resend_delay_max;
|
||||
size_t stats_delay_ms;
|
||||
size_t connect_delay_ms;
|
||||
size_t connect_stale_ms;
|
||||
size_t stale_connection_ms;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user