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
|
/*
Automatic Interval
Functions:
int AIntvTuneHandleAdjust()
---
*/
#include "xsw.h"
/*
* Handles adjusting of the network interval.
*
* Calls to this function must be timmed correctly.
*/
int AIntvTuneHandleAdjust()
{
static long total_bytes;
/* Make sure we are connected and logged in. */
if((net_parms.player_obj_ptr == NULL) ||
(net_parms.connection_state != CON_STATE_CONNECTED)
)
{
/* Not connected or not logged in. */
/* Reset sx and rx byte counters. */
loadstat.sx_ilast = loadstat.sx_interval;
loadstat.rx_ilast = loadstat.rx_interval;
loadstat.sx_interval = 0;
loadstat.rx_interval = 0;
return(-2);
}
/* Is auto interval tunning on? */
if(!auto_interval_tune.state)
{
loadstat.sx_ilast = loadstat.sx_interval;
loadstat.rx_ilast = loadstat.rx_interval;
loadstat.sx_interval = 0;
loadstat.rx_interval = 0;
return(0);
}
/* Get total bytes. */
total_bytes = loadstat.rx_interval + loadstat.sx_interval;
/* Convert total_bytes from per 1000 ms interval to per
* auto_interval_tune.interval ms interval.
*/
if(auto_interval_tune.interval > 0)
total_bytes = total_bytes * 1000 / auto_interval_tune.interval;
/* Check if load is greater or less than net_load_max. */
if(total_bytes > loadstat.net_load_max)
{
/* Over-flowing, must increase interval. */
net_parms.net_int += 50;
}
else
{
/* Bandwidth available, decrease interval. */
net_parms.net_int -= 50;
}
/* Sanitize interval. */
if(net_parms.net_int > MAX_SERVER_UPDATE_INT)
net_parms.net_int = MAX_SERVER_UPDATE_INT;
if(net_parms.net_int < MIN_SERVER_UPDATE_INT)
net_parms.net_int = MIN_SERVER_UPDATE_INT;
/* If in energy saver mode, interval must be SERVER_DEF_INT
* or greater.
*/
if(option.energy_saver_mode)
{
if(net_parms.net_int < SERVER_DEF_INT)
net_parms.net_int = SERVER_DEF_INT;
}
/* Send interval update to server. */
NetSendSetInterval();
/* Reset sx and rx byte counters. */
loadstat.sx_ilast = loadstat.sx_interval;
loadstat.rx_ilast = loadstat.rx_interval;
loadstat.sx_interval = 0;
loadstat.rx_interval = 0;
return(0);
}
|