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
|
/* bzflag
* Copyright (c) 1993 - 2006 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;
/** 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
*/
int updatePingLag(void *buf, bool &warn, bool &kick);
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 setThreshold(float _threshold, 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;
bool pingpending;
TimeKeeper nextping;
TimeKeeper lastping;
TimeKeeper lastupdate;
int pingseqno;
int pingssent;
// jitter measurement
float lasttimestamp;
static float threshold;
static float max;
};
#endif
// Local Variables: ***
// mode:C++ ***
// tab-width: 8 ***
// c-basic-offset: 2 ***
// indent-tabs-mode: t ***
// End: ***
// ex: shiftwidth=2 tabstop=8
|