mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-24 22:47:25 +00:00
173 lines
6.8 KiB
C
173 lines
6.8 KiB
C
|
/// \file
|
||
|
/// \brief A structure that holds all statistical data returned by RakNet.
|
||
|
///
|
||
|
/// This file is part of RakNet Copyright 2003 Kevin Jenkins.
|
||
|
///
|
||
|
/// Usage of RakNet is subject to the appropriate license agreement.
|
||
|
/// Creative Commons Licensees are subject to the
|
||
|
/// license found at
|
||
|
/// http://creativecommons.org/licenses/by-nc/2.5/
|
||
|
/// Single application licensees are subject to the license found at
|
||
|
/// http://www.jenkinssoftware.com/SingleApplicationLicense.html
|
||
|
/// Custom license users are subject to the terms therein.
|
||
|
/// GPL license users are subject to the GNU General Public
|
||
|
/// License as published by the Free
|
||
|
/// Software Foundation; either version 2 of the License, or (at your
|
||
|
/// option) any later version.
|
||
|
|
||
|
|
||
|
#ifndef __RAK_NET_STATISTICS_H
|
||
|
#define __RAK_NET_STATISTICS_H
|
||
|
|
||
|
#include "PacketPriority.h"
|
||
|
#include "Export.h"
|
||
|
#include "RakNetTypes.h"
|
||
|
|
||
|
/// \brief Network Statisics Usage
|
||
|
///
|
||
|
/// Store Statistics information related to network usage
|
||
|
struct RAK_DLL_EXPORT RakNetStatistics
|
||
|
{
|
||
|
/// Number of Messages in the send Buffer (high, medium, low priority)
|
||
|
unsigned messageSendBuffer[ NUMBER_OF_PRIORITIES ];
|
||
|
/// Number of messages sent (high, medium, low priority)
|
||
|
unsigned messagesSent[ NUMBER_OF_PRIORITIES ];
|
||
|
/// Number of data bits used for user messages
|
||
|
uint64_t messageDataBitsSent[ NUMBER_OF_PRIORITIES ];
|
||
|
/// Number of total bits used for user messages, including headers
|
||
|
uint64_t messageTotalBitsSent[ NUMBER_OF_PRIORITIES ];
|
||
|
|
||
|
/// Number of packets sent containing only acknowledgements
|
||
|
unsigned packetsContainingOnlyAcknowlegements;
|
||
|
/// Number of acknowledgements sent
|
||
|
unsigned acknowlegementsSent;
|
||
|
/// Number of acknowledgements waiting to be sent
|
||
|
unsigned acknowlegementsPending;
|
||
|
/// Number of acknowledgements bits sent
|
||
|
uint64_t acknowlegementBitsSent;
|
||
|
|
||
|
/// Number of packets containing only acknowledgements and resends
|
||
|
unsigned packetsContainingOnlyAcknowlegementsAndResends;
|
||
|
|
||
|
/// Number of messages resent
|
||
|
unsigned messageResends;
|
||
|
/// Number of bits resent of actual data
|
||
|
uint64_t messageDataBitsResent;
|
||
|
/// Total number of bits resent, including headers
|
||
|
uint64_t messagesTotalBitsResent;
|
||
|
/// Number of messages waiting for ack (// TODO - rename this)
|
||
|
unsigned messagesOnResendQueue;
|
||
|
|
||
|
/// Number of messages not split for sending
|
||
|
unsigned numberOfUnsplitMessages;
|
||
|
/// Number of messages split for sending
|
||
|
unsigned numberOfSplitMessages;
|
||
|
/// Total number of splits done for sending
|
||
|
unsigned totalSplits;
|
||
|
|
||
|
/// Total packets sent
|
||
|
unsigned packetsSent;
|
||
|
|
||
|
/// Number of bits added by encryption
|
||
|
uint64_t encryptionBitsSent;
|
||
|
/// total bits sent
|
||
|
uint64_t totalBitsSent;
|
||
|
|
||
|
/// Number of sequenced messages arrived out of order
|
||
|
unsigned sequencedMessagesOutOfOrder;
|
||
|
/// Number of sequenced messages arrived in order
|
||
|
unsigned sequencedMessagesInOrder;
|
||
|
|
||
|
/// Number of ordered messages arrived out of order
|
||
|
unsigned orderedMessagesOutOfOrder;
|
||
|
/// Number of ordered messages arrived in order
|
||
|
unsigned orderedMessagesInOrder;
|
||
|
|
||
|
/// Packets with a good CRC received
|
||
|
unsigned packetsReceived;
|
||
|
/// Packets with a bad CRC received
|
||
|
unsigned packetsWithBadCRCReceived;
|
||
|
/// Bits with a good CRC received
|
||
|
uint64_t bitsReceived;
|
||
|
/// Bits with a bad CRC received
|
||
|
uint64_t bitsWithBadCRCReceived;
|
||
|
/// Number of acknowledgement messages received for packets we are resending
|
||
|
unsigned acknowlegementsReceived;
|
||
|
/// Number of acknowledgement messages received for packets we are not resending
|
||
|
unsigned duplicateAcknowlegementsReceived;
|
||
|
/// Number of data messages (anything other than an ack) received that are valid and not duplicate
|
||
|
unsigned messagesReceived;
|
||
|
/// Number of data messages (anything other than an ack) received that are invalid
|
||
|
unsigned invalidMessagesReceived;
|
||
|
/// Number of data messages (anything other than an ack) received that are duplicate
|
||
|
unsigned duplicateMessagesReceived;
|
||
|
/// Number of messages waiting for reassembly
|
||
|
unsigned messagesWaitingForReassembly;
|
||
|
/// Number of messages in reliability output queue
|
||
|
unsigned internalOutputQueueSize;
|
||
|
/// Current bits per second
|
||
|
double bitsPerSecond;
|
||
|
/// connection start time
|
||
|
RakNetTime connectionStartTime;
|
||
|
// If true, not all the data can go out in one frame, and RakNet is sending continuously
|
||
|
// RakNet will try to increase the bandwidth, so this condition may be temporary and only last a second. However, it if
|
||
|
// stays on most of the time, you are at the maximum bandwidth and should slow down your sends, because other data is now waiting.
|
||
|
bool bandwidthExceeded;
|
||
|
|
||
|
RakNetStatistics operator +=(const RakNetStatistics& other)
|
||
|
{
|
||
|
unsigned i;
|
||
|
for (i=0; i < NUMBER_OF_PRIORITIES; i++)
|
||
|
{
|
||
|
messageSendBuffer[i]+=other.messageSendBuffer[i];
|
||
|
messagesSent[i]+=other.messagesSent[i];
|
||
|
messageDataBitsSent[i]+=other.messageDataBitsSent[i];
|
||
|
messageTotalBitsSent[i]+=other.messageTotalBitsSent[i];
|
||
|
}
|
||
|
|
||
|
packetsContainingOnlyAcknowlegements+=other.packetsContainingOnlyAcknowlegements;
|
||
|
acknowlegementsSent+=other.packetsContainingOnlyAcknowlegements;
|
||
|
acknowlegementsPending+=other.acknowlegementsPending;
|
||
|
acknowlegementBitsSent+=other.acknowlegementBitsSent;
|
||
|
packetsContainingOnlyAcknowlegementsAndResends+=other.packetsContainingOnlyAcknowlegementsAndResends;
|
||
|
messageResends+=other.messageResends;
|
||
|
messageDataBitsResent+=other.messageDataBitsResent;
|
||
|
messagesTotalBitsResent+=other.messagesTotalBitsResent;
|
||
|
messagesOnResendQueue+=other.messagesOnResendQueue;
|
||
|
numberOfUnsplitMessages+=other.numberOfUnsplitMessages;
|
||
|
numberOfSplitMessages+=other.numberOfSplitMessages;
|
||
|
totalSplits+=other.totalSplits;
|
||
|
packetsSent+=other.packetsSent;
|
||
|
encryptionBitsSent+=other.encryptionBitsSent;
|
||
|
totalBitsSent+=other.totalBitsSent;
|
||
|
sequencedMessagesOutOfOrder+=other.sequencedMessagesOutOfOrder;
|
||
|
sequencedMessagesInOrder+=other.sequencedMessagesInOrder;
|
||
|
orderedMessagesOutOfOrder+=other.orderedMessagesOutOfOrder;
|
||
|
orderedMessagesInOrder+=other.orderedMessagesInOrder;
|
||
|
packetsReceived+=other.packetsReceived;
|
||
|
packetsWithBadCRCReceived+=other.packetsWithBadCRCReceived;
|
||
|
bitsReceived+=other.bitsReceived;
|
||
|
bitsWithBadCRCReceived+=other.bitsWithBadCRCReceived;
|
||
|
acknowlegementsReceived+=other.acknowlegementsReceived;
|
||
|
duplicateAcknowlegementsReceived+=other.duplicateAcknowlegementsReceived;
|
||
|
messagesReceived+=other.messagesReceived;
|
||
|
invalidMessagesReceived+=other.invalidMessagesReceived;
|
||
|
duplicateMessagesReceived+=other.duplicateMessagesReceived;
|
||
|
messagesWaitingForReassembly+=other.messagesWaitingForReassembly;
|
||
|
internalOutputQueueSize+=other.internalOutputQueueSize;
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/// Verbosity level currently supports 0 (low), 1 (medium), 2 (high)
|
||
|
/// \param[in] s The Statistical information to format out
|
||
|
/// \param[in] buffer The buffer containing a formated report
|
||
|
/// \param[in] verbosityLevel
|
||
|
/// 0 low
|
||
|
/// 1 medium
|
||
|
/// 2 high
|
||
|
void RAK_DLL_EXPORT StatisticsToString( RakNetStatistics *s, char *buffer, int verbosityLevel );
|
||
|
|
||
|
#endif
|