mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-24 15:52:26 +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()
|
void EQ::Net::DaybreakConnection::Process()
|
||||||
{
|
{
|
||||||
try {
|
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 now = Clock::now();
|
||||||
auto time_since_hold = (size_t)std::chrono::duration_cast<std::chrono::milliseconds>(now - m_hold_time).count();
|
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) {
|
if (time_since_hold >= m_owner->m_options.hold_length_ms) {
|
||||||
@ -369,12 +364,6 @@ void EQ::Net::DaybreakConnection::Process()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProcessQueue();
|
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) {
|
catch (std::exception ex) {
|
||||||
Log.OutF(Logs::Detail, Logs::Netcode, "Error processing connection: {0}", ex.what());
|
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;
|
DynamicPacket out;
|
||||||
out.PutSerialize(0, response);
|
out.PutSerialize(0, response);
|
||||||
InternalSend(out);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case OP_SessionStatResponse:
|
case OP_SessionStatResponse:
|
||||||
@ -1037,11 +1028,12 @@ void EQ::Net::DaybreakConnection::Ack(int stream, uint16_t seq)
|
|||||||
auto iter = s->sent_packets.begin();
|
auto iter = s->sent_packets.begin();
|
||||||
while (iter != s->sent_packets.end()) {
|
while (iter != s->sent_packets.end()) {
|
||||||
if (iter->first <= seq) {
|
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_ping += round_time;
|
||||||
m_stats.total_acks++;
|
m_stats.total_acks++;
|
||||||
m_stats.max_ping = std::max(m_stats.max_ping, round_time);
|
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.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;
|
m_rolling_ping = (m_rolling_ping + round_time) / 2;
|
||||||
iter = s->sent_packets.erase(iter);
|
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 s = &m_streams[stream];
|
||||||
auto iter = s->sent_packets.find(seq);
|
auto iter = s->sent_packets.find(seq);
|
||||||
if (iter != s->sent_packets.end()) {
|
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_ping += round_time;
|
||||||
m_stats.total_acks++;
|
m_stats.total_acks++;
|
||||||
m_stats.max_ping = std::max(m_stats.max_ping, round_time);
|
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.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;
|
m_rolling_ping = (m_rolling_ping + round_time) / 2;
|
||||||
s->sent_packets.erase(iter);
|
s->sent_packets.erase(iter);
|
||||||
}
|
}
|
||||||
@ -1093,29 +1086,6 @@ void EQ::Net::DaybreakConnection::SendOutOfOrderAck(int stream_id, uint16_t seq)
|
|||||||
InternalBufferedSend(p);
|
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)
|
void EQ::Net::DaybreakConnection::InternalBufferedSend(Packet &p)
|
||||||
{
|
{
|
||||||
if (p.Length() > 0xFFU) {
|
if (p.Length() > 0xFFU) {
|
||||||
|
|||||||
@ -82,11 +82,6 @@ namespace EQ
|
|||||||
total_acks = 0;
|
total_acks = 0;
|
||||||
min_ping = 0xFFFFFFFFFFFFFFFFUL;
|
min_ping = 0xFFFFFFFFFFFFFFFFUL;
|
||||||
max_ping = 0;
|
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();
|
created = Clock::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,11 +93,7 @@ namespace EQ
|
|||||||
uint64_t total_acks;
|
uint64_t total_acks;
|
||||||
uint64_t min_ping;
|
uint64_t min_ping;
|
||||||
uint64_t max_ping;
|
uint64_t max_ping;
|
||||||
uint64_t total_stat_ping;
|
uint64_t last_ping;
|
||||||
uint64_t total_stat_count;
|
|
||||||
uint64_t min_stat_ping;
|
|
||||||
uint64_t max_stat_ping;
|
|
||||||
uint64_t last_stat_ping;
|
|
||||||
Timestamp created;
|
Timestamp created;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -143,7 +134,6 @@ namespace EQ
|
|||||||
std::list<DynamicPacket> m_buffered_packets;
|
std::list<DynamicPacket> m_buffered_packets;
|
||||||
size_t m_buffered_packets_length;
|
size_t m_buffered_packets_length;
|
||||||
std::unique_ptr<char[]> m_combined;
|
std::unique_ptr<char[]> m_combined;
|
||||||
Timestamp m_last_stats;
|
|
||||||
DaybreakConnectionStats m_stats;
|
DaybreakConnectionStats m_stats;
|
||||||
Timestamp m_last_session_stats;
|
Timestamp m_last_session_stats;
|
||||||
size_t m_resend_delay;
|
size_t m_resend_delay;
|
||||||
@ -203,7 +193,6 @@ namespace EQ
|
|||||||
void SendKeepAlive();
|
void SendKeepAlive();
|
||||||
void SendAck(int stream, uint16_t seq);
|
void SendAck(int stream, uint16_t seq);
|
||||||
void SendOutOfOrderAck(int stream, uint16_t seq);
|
void SendOutOfOrderAck(int stream, uint16_t seq);
|
||||||
void SendStatSync();
|
|
||||||
void InternalBufferedSend(Packet &p);
|
void InternalBufferedSend(Packet &p);
|
||||||
void InternalSend(Packet &p);
|
void InternalSend(Packet &p);
|
||||||
void InternalQueuePacket(Packet &p, int stream_id, bool reliable);
|
void InternalQueuePacket(Packet &p, int stream_id, bool reliable);
|
||||||
@ -221,7 +210,6 @@ namespace EQ
|
|||||||
resend_delay_ms = 300;
|
resend_delay_ms = 300;
|
||||||
resend_delay_factor = 1.5;
|
resend_delay_factor = 1.5;
|
||||||
resend_delay_max = 5000;
|
resend_delay_max = 5000;
|
||||||
stats_delay_ms = 9000;
|
|
||||||
connect_delay_ms = 500;
|
connect_delay_ms = 500;
|
||||||
stale_connection_ms = 60000;
|
stale_connection_ms = 60000;
|
||||||
connect_stale_ms = 5000;
|
connect_stale_ms = 5000;
|
||||||
@ -243,7 +231,6 @@ namespace EQ
|
|||||||
double resend_delay_factor;
|
double resend_delay_factor;
|
||||||
size_t resend_delay_ms;
|
size_t resend_delay_ms;
|
||||||
size_t resend_delay_max;
|
size_t resend_delay_max;
|
||||||
size_t stats_delay_ms;
|
|
||||||
size_t connect_delay_ms;
|
size_t connect_delay_ms;
|
||||||
size_t connect_stale_ms;
|
size_t connect_stale_ms;
|
||||||
size_t stale_connection_ms;
|
size_t stale_connection_ms;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user