2020-04-08 13:01:41 +02:00
//
// Created by WolverinDEV on 06/04/2020.
//
# include "PacketStatistics.h"
using namespace ts : : server : : client ;
void PacketStatistics : : received_packet ( ts : : protocol : : PacketType type , uint32_t pid ) {
std : : lock_guard lock { this - > data_mutex } ;
switch ( type ) {
case protocol : : PacketType : : VOICE :
this - > calculator_voice . packet_received ( pid ) ;
return ;
case protocol : : PacketType : : VOICE_WHISPER :
this - > calculator_voice_whisper . packet_received ( pid ) ;
return ;
case protocol : : PacketType : : COMMAND :
case protocol : : PacketType : : COMMAND_LOW :
return ;
case protocol : : PacketType : : ACK :
this - > calculator_ack . packet_received ( pid ) ;
return ;
case protocol : : PacketType : : ACK_LOW :
this - > calculator_ack_low . packet_received ( pid ) ;
return ;
case protocol : : PacketType : : PING :
this - > calculator_ping . packet_received ( pid ) ;
return ;
default :
/* some invalid packet lul */
return ;
}
}
void PacketStatistics : : send_command ( ts : : protocol : : PacketType type , uint32_t pid ) {
std : : lock_guard lock { this - > data_mutex } ;
if ( type = = protocol : : PacketType : : COMMAND )
this - > calculator_command . packet_send ( pid ) ;
else if ( type = = protocol : : PacketType : : COMMAND_LOW )
this - > calculator_command_low . packet_send ( pid ) ;
}
void PacketStatistics : : received_acknowledge ( ts : : protocol : : PacketType type , uint32_t pid ) {
std : : lock_guard lock { this - > data_mutex } ;
if ( type = = protocol : : PacketType : : ACK )
this - > calculator_command . ack_received ( pid ) ;
else if ( type = = protocol : : PacketType : : ACK_LOW )
this - > calculator_command_low . ack_received ( pid ) ;
}
PacketStatistics : : PacketLossReport PacketStatistics : : loss_report ( ) const {
PacketStatistics : : PacketLossReport result { } ;
result . received_voice = this - > calculator_voice . received_packets ( ) + this - > calculator_voice_whisper . received_packets ( ) ;
result . lost_voice = this - > calculator_voice . lost_packets ( ) + this - > calculator_voice_whisper . lost_packets ( ) ;
result . received_keep_alive = this - > calculator_ping . received_packets ( ) ;
result . lost_keep_alive = this - > calculator_ping . lost_packets ( ) ;
result . received_control = this - > calculator_command . received_packets ( ) + this - > calculator_command_low . received_packets ( ) ;
result . lost_control = this - > calculator_command . lost_packets ( ) + this - > calculator_command_low . lost_packets ( ) ;
//result.lost_control -= this->calculator_ack.lost_packets() + this->calculator_ack_low.lost_packets(); /* subtract the lost acks (command received but ack got lost) */
result . received_control + = this - > calculator_ack . received_packets ( ) + this - > calculator_ack_low . received_packets ( ) ;
//result.lost_control += this->calculator_ack.lost_packets() + this->calculator_ack_low.lost_packets(); /* this cancels out the line above */
return result ;
}
void PacketStatistics : : tick ( ) {
auto now = std : : chrono : : system_clock : : now ( ) ;
if ( now + std : : chrono : : seconds { 15 } > this - > last_short ) {
this - > last_short = now ;
std : : lock_guard lock { this - > data_mutex } ;
this - > calculator_command . short_stats ( ) ;
this - > calculator_command_low . short_stats ( ) ;
this - > calculator_ack . short_stats ( ) ;
this - > calculator_ack_low . short_stats ( ) ;
this - > calculator_voice . short_stats ( ) ;
this - > calculator_voice_whisper . short_stats ( ) ;
this - > calculator_ping . short_stats ( ) ;
}
}
2020-04-10 23:29:51 +02:00
void PacketStatistics : : reset ( ) {
std : : lock_guard lock { this - > data_mutex } ;
this - > calculator_command . reset ( ) ;
this - > calculator_command_low . reset ( ) ;
this - > calculator_ack . reset ( ) ;
this - > calculator_ack_low . reset ( ) ;
this - > calculator_voice . reset ( ) ;
this - > calculator_voice_whisper . reset ( ) ;
this - > calculator_ping . reset ( ) ;
}
void PacketStatistics : : reset_offsets ( ) {
std : : lock_guard lock { this - > data_mutex } ;
this - > calculator_command . reset_offsets ( ) ;
this - > calculator_command_low . reset_offsets ( ) ;
this - > calculator_ack . reset_offsets ( ) ;
this - > calculator_ack_low . reset_offsets ( ) ;
this - > calculator_voice . reset_offsets ( ) ;
this - > calculator_voice_whisper . reset_offsets ( ) ;
this - > calculator_ping . reset_offsets ( ) ;
}
2020-04-08 13:01:41 +02:00
float PacketStatistics : : current_packet_loss ( ) const {
auto report = this - > loss_report ( ) ;
return report . total_loss ( ) ;
}