Some changes to sync sending, dont even bother sending them now just wait to reply

This commit is contained in:
KimLS 2017-03-11 14:50:10 -08:00
parent 56fdc6aaac
commit 742806158c
2 changed files with 7 additions and 50 deletions

View File

@ -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) {

View File

@ -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;