1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
/* bzflag
* Copyright (c) 1993-2010 Tim Riker
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the license found in the file
* named LICENSE that should have accompanied this file.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef __LAGINFO_H__
#define __LAGINFO_H__
#include "PlayerInfo.h"
/** This class monitors the lag time for each client
*/
class LagInfo {
public:
/** A default constructor.
It needs a pointer to the Player basic Info,
*/
LagInfo(PlayerInfo *_info);
/** Resetting lag value
*/
void reset();
/** Getting lag value (in milliseconds)
*/
int getLag() const;
/** Getting jitter value (in milliseconds)
*/
int getJitter() const;
/** Getting packetloss value (in percent)
*/
int getLoss() const;
/** Get the floating point value of the lag (in seconds)
*/
float getLagAvg() const;
/** Get a printable version of lag statistics
*/
void getLagStats(char* msg, bool isAdmin) const;
/** functions to be called whenever a playerUpdate or ping message arrives
*/
void updatePingLag(void *buf, bool &warn, bool &kick,
bool &jittwarn, bool &jittkick,
bool &plosswarn, bool &plosskick,
bool &alagannouncewarn, bool &lagannouncewarn);
void updateLag(float timestamp, bool ooo);
/** get the ping seqno, if need to send one now!
*/
int getNextPingSeqno(bool &warn, bool &kick);
/** update the latency
*/
void updateLatency(float &waitTime);
/** set the threshold for warning/kicking
*/
static void setAdminLagAnnounceThreshold(float _adminlagannouncetresh);
static void setLagAnnounceThreshold(float _lagannouncetresh);
static void setThreshold(float _threshold, float _max);
static void setJitterThreshold(float _jitterthreshold, float _jittermax);
static void setPacketLossThreshold(float _packetlossthreshold, float _max);
private:
PlayerInfo *info;
// lag measurement
float lagavg;
float jitteravg;
float lostavg;
float lagalpha;
float jitteralpha;
float lostalpha;
int lagcount;
int laglastwarn;
int lagwarncount;
int jittercount;
int jitterlastwarn;
int jitterwarncount;
int losscount;
int losslastwarn;
int losswarncount;
bool pingpending;
TimeKeeper nextping;
TimeKeeper lastping;
TimeKeeper lastupdate;
int pingseqno;
int pingssent;
// jitter measurement
float lasttimestamp;
// announcements
static float adminlagannouncetresh;
int alagcount;
int alaglastannounce;
int alagannouncecount;
static float lagannouncetresh;
int lagannouncecount;
TimeKeeper laglastannounce;
// kicks
static float threshold;
static float jitterthreshold;
static float lossthreshold;
static float max;
static float jittermax;
static float lossmax;
};
#endif
// Local Variables: ***
// mode:C++ ***
// tab-width: 8 ***
// c-basic-offset: 2 ***
// indent-tabs-mode: t ***
// End: ***
// ex: shiftwidth=2 tabstop=8
|