Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

ui_servers2.c File Reference

#include "ui_local.h"

Include dependency graph for ui_servers2.c:

Include dependency graph

Go to the source code of this file.

Data Structures

struct  arenaservers_t
struct  pinglist_t
struct  servernode_s
struct  table_t

Defines

#define ART_ARROWS0   "menu/art/arrows_vert_0"
#define ART_ARROWS_DOWN   "menu/art/arrows_vert_bot"
#define ART_ARROWS_UP   "menu/art/arrows_vert_top"
#define ART_BACK0   "menu/art/back_0"
#define ART_BACK1   "menu/art/back_1"
#define ART_CONNECT0   "menu/art/fight_0"
#define ART_CONNECT1   "menu/art/fight_1"
#define ART_CREATE0   "menu/art/create_0"
#define ART_CREATE1   "menu/art/create_1"
#define ART_PUNKBUSTER   "menu/art/pblogo"
#define ART_REFRESH0   "menu/art/refresh_0"
#define ART_REFRESH1   "menu/art/refresh_1"
#define ART_REMOVE0   "menu/art/delete_0"
#define ART_REMOVE1   "menu/art/delete_1"
#define ART_SPECIFY0   "menu/art/specify_0"
#define ART_SPECIFY1   "menu/art/specify_1"
#define ART_UNKNOWNMAP   "menu/art/unknownmap"
#define AS_FAVORITES   3
#define AS_GLOBAL   2
#define AS_LOCAL   0
#define AS_MPLAYER   1
#define GAMES_ALL   0
#define GAMES_CTF   4
#define GAMES_FFA   1
#define GAMES_TEAMPLAY   2
#define GAMES_TOURNEY   3
#define GR_LETTERS   31
#define GR_LOGO   30
#define ID_BACK   18
#define ID_CONNECT   22
#define ID_CREATE   21
#define ID_GAMETYPE   11
#define ID_LIST   15
#define ID_MASTER   10
#define ID_PUNKBUSTER   24
#define ID_REFRESH   19
#define ID_REMOVE   23
#define ID_SCROLL_DOWN   17
#define ID_SCROLL_UP   16
#define ID_SHOW_EMPTY   14
#define ID_SHOW_FULL   13
#define ID_SORTKEY   12
#define ID_SPECIFY   20
#define MAX_ADDRESSLENGTH   64
#define MAX_GLOBALSERVERS   128
#define MAX_HOSTNAMELENGTH   22
#define MAX_LEAGUELENGTH   28
#define MAX_LISTBOXITEMS   128
#define MAX_LISTBOXWIDTH   68
#define MAX_LOCALSERVERS   128
#define MAX_MAPNAMELENGTH   16
#define MAX_PINGREQUESTS   32
#define MAX_STATUSLENGTH   64
#define SORT_CLIENTS   2
#define SORT_GAME   3
#define SORT_HOST   0
#define SORT_MAP   1
#define SORT_PING   4

Typedefs

typedef servernode_s servernode_t

Functions

void ArenaServers_Cache (void)
int QDECL ArenaServers_Compare (const void *arg1, const void *arg2)
void ArenaServers_DoRefresh (void)
void ArenaServers_Event (void *ptr, int event)
void ArenaServers_Go (void)
void ArenaServers_Insert (char *adrstr, char *info, int pingtime)
void ArenaServers_InsertFavorites (void)
void ArenaServers_LoadFavorites (void)
int ArenaServers_MaxPing (void)
void ArenaServers_MenuDraw (void)
void ArenaServers_MenuInit (void)
sfxHandle_t ArenaServers_MenuKey (int key)
void ArenaServers_Remove (void)
void ArenaServers_SaveChanges (void)
void ArenaServers_SetType (int type)
void ArenaServers_Sort (int type)
void ArenaServers_StartRefresh (void)
void ArenaServers_StopRefresh (void)
void ArenaServers_UpdateMenu (void)
void ArenaServers_UpdatePicture (void)
void Punkbuster_ConfirmDisable (qboolean result)
void Punkbuster_ConfirmEnable (qboolean result)
void UI_ArenaServersMenu (void)

Variables

arenaservers_t g_arenaservers
int g_emptyservers
servernode_t g_favoriteserverlist [MAX_FAVORITESERVERS]
int g_fullservers
int g_gametype
servernode_t g_globalserverlist [MAX_GLOBALSERVERS]
servernode_t g_localserverlist [MAX_LOCALSERVERS]
servernode_t g_mplayerserverlist [MAX_GLOBALSERVERS]
int g_numfavoriteservers
int g_numglobalservers
int g_numlocalservers
int g_nummplayerservers
int g_servertype
int g_sortkey
char * gamenames []
const char * master_items []
char * netnames []
const char * punkbuster_items []
const char * punkbuster_msg []
char quake3worldMessage [] = "Visit www.quake3world.com - News, Community, Events, Files"
const char * servertype_items []
const char * sortkey_items []


Define Documentation

#define ART_ARROWS0   "menu/art/arrows_vert_0"
 

Definition at line 56 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_ARROWS_DOWN   "menu/art/arrows_vert_bot"
 

Definition at line 58 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_ARROWS_UP   "menu/art/arrows_vert_top"
 

Definition at line 57 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_BACK0   "menu/art/back_0"
 

Definition at line 46 of file ui_servers2.c.

#define ART_BACK1   "menu/art/back_1"
 

Definition at line 47 of file ui_servers2.c.

#define ART_CONNECT0   "menu/art/fight_0"
 

Definition at line 54 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_CONNECT1   "menu/art/fight_1"
 

Definition at line 55 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_CREATE0   "menu/art/create_0"
 

Definition at line 48 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_CREATE1   "menu/art/create_1"
 

Definition at line 49 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_PUNKBUSTER   "menu/art/pblogo"
 

Definition at line 62 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_REFRESH0   "menu/art/refresh_0"
 

Definition at line 52 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_REFRESH1   "menu/art/refresh_1"
 

Definition at line 53 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_REMOVE0   "menu/art/delete_0"
 

Definition at line 60 of file ui_servers2.c.

#define ART_REMOVE1   "menu/art/delete_1"
 

Definition at line 61 of file ui_servers2.c.

#define ART_SPECIFY0   "menu/art/specify_0"
 

Definition at line 50 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_SPECIFY1   "menu/art/specify_1"
 

Definition at line 51 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define ART_UNKNOWNMAP   "menu/art/unknownmap"
 

Definition at line 59 of file ui_servers2.c.

Referenced by ArenaServers_Cache().

#define AS_FAVORITES   3
 

Definition at line 86 of file ui_servers2.c.

#define AS_GLOBAL   2
 

Definition at line 85 of file ui_servers2.c.

#define AS_LOCAL   0
 

Definition at line 83 of file ui_servers2.c.

#define AS_MPLAYER   1
 

Definition at line 84 of file ui_servers2.c.

#define GAMES_ALL   0
 

Definition at line 94 of file ui_servers2.c.

Referenced by ArenaServers_StartRefresh(), and ArenaServers_UpdateMenu().

#define GAMES_CTF   4
 

Definition at line 98 of file ui_servers2.c.

Referenced by ArenaServers_StartRefresh(), and ArenaServers_UpdateMenu().

#define GAMES_FFA   1
 

Definition at line 95 of file ui_servers2.c.

Referenced by ArenaServers_StartRefresh(), and ArenaServers_UpdateMenu().

#define GAMES_TEAMPLAY   2
 

Definition at line 96 of file ui_servers2.c.

Referenced by ArenaServers_StartRefresh(), and ArenaServers_UpdateMenu().

#define GAMES_TOURNEY   3
 

Definition at line 97 of file ui_servers2.c.

Referenced by ArenaServers_StartRefresh(), and ArenaServers_UpdateMenu().

#define GR_LETTERS   31
 

Definition at line 81 of file ui_servers2.c.

#define GR_LOGO   30
 

Definition at line 80 of file ui_servers2.c.

#define ID_BACK   18
 

Definition at line 72 of file ui_servers2.c.

#define ID_CONNECT   22
 

Definition at line 76 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_CREATE   21
 

Definition at line 75 of file ui_servers2.c.

#define ID_GAMETYPE   11
 

Definition at line 65 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_LIST   15
 

Definition at line 69 of file ui_servers2.c.

#define ID_MASTER   10
 

Definition at line 64 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_PUNKBUSTER   24
 

Definition at line 78 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_REFRESH   19
 

Definition at line 73 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_REMOVE   23
 

Definition at line 77 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_SCROLL_DOWN   17
 

Definition at line 71 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_SCROLL_UP   16
 

Definition at line 70 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_SHOW_EMPTY   14
 

Definition at line 68 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_SHOW_FULL   13
 

Definition at line 67 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_SORTKEY   12
 

Definition at line 66 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define ID_SPECIFY   20
 

Definition at line 74 of file ui_servers2.c.

Referenced by ArenaServers_Event().

#define MAX_ADDRESSLENGTH   64
 

Definition at line 37 of file ui_servers2.c.

Referenced by ArenaServers_DoRefresh(), ArenaServers_Insert(), ArenaServers_LoadFavorites(), and ArenaServers_Remove().

#define MAX_GLOBALSERVERS   128
 

Definition at line 35 of file ui_servers2.c.

#define MAX_HOSTNAMELENGTH   22
 

Definition at line 38 of file ui_servers2.c.

Referenced by ArenaServers_Insert().

#define MAX_LEAGUELENGTH   28
 

Definition at line 43 of file ui_servers2.c.

#define MAX_LISTBOXITEMS   128
 

Definition at line 40 of file ui_servers2.c.

#define MAX_LISTBOXWIDTH   68
 

Definition at line 44 of file ui_servers2.c.

Referenced by ArenaServers_UpdateMenu().

#define MAX_LOCALSERVERS   128
 

Definition at line 41 of file ui_servers2.c.

#define MAX_MAPNAMELENGTH   16
 

Definition at line 39 of file ui_servers2.c.

Referenced by ArenaServers_Insert().

#define MAX_PINGREQUESTS   32
 

Definition at line 36 of file ui_servers2.c.

#define MAX_STATUSLENGTH   64
 

Definition at line 42 of file ui_servers2.c.

Referenced by ArenaServers_UpdateMenu().

#define SORT_CLIENTS   2
 

Definition at line 90 of file ui_servers2.c.

Referenced by ArenaServers_Compare(), LAN_CompareServers(), and UI_FeederItemText().

#define SORT_GAME   3
 

Definition at line 91 of file ui_servers2.c.

Referenced by ArenaServers_Compare(), LAN_CompareServers(), and UI_FeederItemText().

#define SORT_HOST   0
 

Definition at line 88 of file ui_servers2.c.

Referenced by ArenaServers_Compare(), LAN_CompareServers(), and UI_FeederItemText().

#define SORT_MAP   1
 

Definition at line 89 of file ui_servers2.c.

Referenced by ArenaServers_Compare(), LAN_CompareServers(), and UI_FeederItemText().

#define SORT_PING   4
 

Definition at line 92 of file ui_servers2.c.

Referenced by ArenaServers_Compare(), LAN_CompareServers(), and UI_FeederItemText().


Typedef Documentation

typedef struct servernode_s servernode_t
 

Referenced by ArenaServers_Compare(), ArenaServers_Go(), ArenaServers_Insert(), ArenaServers_LoadFavorites(), ArenaServers_Remove(), ArenaServers_Sort(), ArenaServers_StopRefresh(), ArenaServers_UpdateMenu(), and ArenaServers_UpdatePicture().


Function Documentation

void ArenaServers_Cache void   ) 
 

Definition at line 1613 of file ui_servers2.c.

References ART_ARROWS0, ART_ARROWS_DOWN, ART_ARROWS_UP, ART_BACK0, ART_BACK1, ART_CONNECT0, ART_CONNECT1, ART_CREATE0, ART_CREATE1, ART_PUNKBUSTER, ART_REFRESH0, ART_REFRESH1, ART_SPECIFY0, ART_SPECIFY1, ART_UNKNOWNMAP, and trap_R_RegisterShaderNoMip().

01613                                 {
01614     trap_R_RegisterShaderNoMip( ART_BACK0 );
01615     trap_R_RegisterShaderNoMip( ART_BACK1 );
01616     trap_R_RegisterShaderNoMip( ART_CREATE0 );
01617     trap_R_RegisterShaderNoMip( ART_CREATE1 );
01618     trap_R_RegisterShaderNoMip( ART_SPECIFY0 );
01619     trap_R_RegisterShaderNoMip( ART_SPECIFY1 );
01620     trap_R_RegisterShaderNoMip( ART_REFRESH0 );
01621     trap_R_RegisterShaderNoMip( ART_REFRESH1 );
01622     trap_R_RegisterShaderNoMip( ART_CONNECT0 );
01623     trap_R_RegisterShaderNoMip( ART_CONNECT1 );
01624     trap_R_RegisterShaderNoMip( ART_ARROWS0  );
01625     trap_R_RegisterShaderNoMip( ART_ARROWS_UP );
01626     trap_R_RegisterShaderNoMip( ART_ARROWS_DOWN );
01627     trap_R_RegisterShaderNoMip( ART_UNKNOWNMAP );
01628     trap_R_RegisterShaderNoMip( ART_PUNKBUSTER );
01629 }

Here is the call graph for this function:

int QDECL ArenaServers_Compare const void *  arg1,
const void *  arg2
[static]
 

Definition at line 274 of file ui_servers2.c.

References f1(), f2(), servernode_s::gametype, servernode_s::hostname, servernode_s::mapname, servernode_s::maxclients, servernode_s::numclients, servernode_s::pingtime, Q_stricmp(), QDECL, servernode_t, SORT_CLIENTS, SORT_GAME, SORT_HOST, SORT_MAP, and SORT_PING.

Referenced by ArenaServers_Sort(), ArenaServers_StopRefresh(), and ArenaServers_UpdateMenu().

00274                                                                             {
00275     float           f1;
00276     float           f2;
00277     servernode_t*   t1;
00278     servernode_t*   t2;
00279 
00280     t1 = (servernode_t *)arg1;
00281     t2 = (servernode_t *)arg2;
00282 
00283     switch( g_sortkey ) {
00284     case SORT_HOST:
00285         return Q_stricmp( t1->hostname, t2->hostname );
00286 
00287     case SORT_MAP:
00288         return Q_stricmp( t1->mapname, t2->mapname );
00289 
00290     case SORT_CLIENTS:
00291         f1 = t1->maxclients - t1->numclients;
00292         if( f1 < 0 ) {
00293             f1 = 0;
00294         }
00295 
00296         f2 = t2->maxclients - t2->numclients;
00297         if( f2 < 0 ) {
00298             f2 = 0;
00299         }
00300 
00301         if( f1 < f2 ) {
00302             return 1;
00303         }
00304         if( f1 == f2 ) {
00305             return 0;
00306         }
00307         return -1;
00308 
00309     case SORT_GAME:
00310         if( t1->gametype < t2->gametype ) {
00311             return -1;
00312         }
00313         if( t1->gametype == t2->gametype ) {
00314             return 0;
00315         }
00316         return 1;
00317 
00318     case SORT_PING:
00319         if( t1->pingtime < t2->pingtime ) {
00320             return -1;
00321         }
00322         if( t1->pingtime > t2->pingtime ) {
00323             return 1;
00324         }
00325         return Q_stricmp( t1->hostname, t2->hostname );
00326     }
00327 
00328     return 0;
00329 }

Here is the call graph for this function:

void ArenaServers_DoRefresh void   )  [static]
 

Definition at line 834 of file ui_servers2.c.

References pinglist_t::adrstr, ArenaServers_Insert(), ArenaServers_MaxPing(), ArenaServers_StopRefresh(), ArenaServers_UpdateMenu(), arenaservers_t::currentping, EXEC_NOW, arenaservers_t::favoriteaddresses, g_arenaservers, g_servertype, i, j, MAX_ADDRESSLENGTH, MAX_INFO_STRING, MAX_PINGREQUESTS, arenaservers_t::nextpingtime, arenaservers_t::numfavoriteaddresses, arenaservers_t::numqueriedservers, arenaservers_t::pinglist, Q_stricmp(), uiStatic_t::realtime, arenaservers_t::refreshtime, pinglist_t::start, strcpy(), time(), trap_Cmd_ExecuteText(), trap_LAN_ClearPing(), trap_LAN_GetPing(), trap_LAN_GetPingInfo(), trap_LAN_GetPingQueueCount(), trap_LAN_GetServerAddressString(), trap_LAN_GetServerCount(), uis, and va().

Referenced by ArenaServers_MenuDraw().

00835 {
00836     int     i;
00837     int     j;
00838     int     time;
00839     int     maxPing;
00840     char    adrstr[MAX_ADDRESSLENGTH];
00841     char    info[MAX_INFO_STRING];
00842 
00843     if (uis.realtime < g_arenaservers.refreshtime)
00844     {
00845       if (g_servertype != AS_FAVORITES) {
00846             if (g_servertype == AS_LOCAL) {
00847                 if (!trap_LAN_GetServerCount(g_servertype)) {
00848                     return;
00849                 }
00850             }
00851             if (trap_LAN_GetServerCount(g_servertype) < 0) {
00852               // still waiting for response
00853               return;
00854             }
00855       }
00856     }
00857 
00858     if (uis.realtime < g_arenaservers.nextpingtime)
00859     {
00860         // wait for time trigger
00861         return;
00862     }
00863 
00864     // trigger at 10Hz intervals
00865     g_arenaservers.nextpingtime = uis.realtime + 10;
00866 
00867     // process ping results
00868     maxPing = ArenaServers_MaxPing();
00869     for (i=0; i<MAX_PINGREQUESTS; i++)
00870     {
00871         trap_LAN_GetPing( i, adrstr, MAX_ADDRESSLENGTH, &time );
00872         if (!adrstr[0])
00873         {
00874             // ignore empty or pending pings
00875             continue;
00876         }
00877 
00878         // find ping result in our local list
00879         for (j=0; j<MAX_PINGREQUESTS; j++)
00880             if (!Q_stricmp( adrstr, g_arenaservers.pinglist[j].adrstr ))
00881                 break;
00882 
00883         if (j < MAX_PINGREQUESTS)
00884         {
00885             // found it
00886             if (!time)
00887             {
00888                 time = uis.realtime - g_arenaservers.pinglist[j].start;
00889                 if (time < maxPing)
00890                 {
00891                     // still waiting
00892                     continue;
00893                 }
00894             }
00895 
00896             if (time > maxPing)
00897             {
00898                 // stale it out
00899                 info[0] = '\0';
00900                 time    = maxPing;
00901             }
00902             else
00903             {
00904                 trap_LAN_GetPingInfo( i, info, MAX_INFO_STRING );
00905             }
00906 
00907             // insert ping results
00908             ArenaServers_Insert( adrstr, info, time );
00909 
00910             // clear this query from internal list
00911             g_arenaservers.pinglist[j].adrstr[0] = '\0';
00912         }
00913 
00914         // clear this query from external list
00915         trap_LAN_ClearPing( i );
00916     }
00917 
00918     // get results of servers query
00919     // counts can increase as servers respond
00920     if (g_servertype == AS_FAVORITES) {
00921       g_arenaservers.numqueriedservers = g_arenaservers.numfavoriteaddresses;
00922     } else {
00923       g_arenaservers.numqueriedservers = trap_LAN_GetServerCount(g_servertype);
00924     }
00925 
00926 //  if (g_arenaservers.numqueriedservers > g_arenaservers.maxservers)
00927 //      g_arenaservers.numqueriedservers = g_arenaservers.maxservers;
00928 
00929     // send ping requests in reasonable bursts
00930     // iterate ping through all found servers
00931     for (i=0; i<MAX_PINGREQUESTS && g_arenaservers.currentping < g_arenaservers.numqueriedservers; i++)
00932     {
00933         if (trap_LAN_GetPingQueueCount() >= MAX_PINGREQUESTS)
00934         {
00935             // ping queue is full
00936             break;
00937         }
00938 
00939         // find empty slot
00940         for (j=0; j<MAX_PINGREQUESTS; j++)
00941             if (!g_arenaservers.pinglist[j].adrstr[0])
00942                 break;
00943 
00944         if (j >= MAX_PINGREQUESTS)
00945             // no empty slots available yet - wait for timeout
00946             break;
00947 
00948         // get an address to ping
00949 
00950         if (g_servertype == AS_FAVORITES) {
00951           strcpy( adrstr, g_arenaservers.favoriteaddresses[g_arenaservers.currentping] );       
00952         } else {
00953           trap_LAN_GetServerAddressString(g_servertype, g_arenaservers.currentping, adrstr, MAX_ADDRESSLENGTH );
00954         }
00955 
00956         strcpy( g_arenaservers.pinglist[j].adrstr, adrstr );
00957         g_arenaservers.pinglist[j].start = uis.realtime;
00958 
00959         trap_Cmd_ExecuteText( EXEC_NOW, va( "ping %s\n", adrstr )  );
00960         
00961         // advance to next server
00962         g_arenaservers.currentping++;
00963     }
00964 
00965     if (!trap_LAN_GetPingQueueCount())
00966     {
00967         // all pings completed
00968         ArenaServers_StopRefresh();
00969         return;
00970     }
00971 
00972     // update the user interface with ping status
00973     ArenaServers_UpdateMenu();
00974 }

Here is the call graph for this function:

void ArenaServers_Event void *  ptr,
int  event
[static]
 

Definition at line 1179 of file ui_servers2.c.

References ArenaServers_Go(), ArenaServers_Remove(), ArenaServers_SaveChanges(), ArenaServers_SetType(), ArenaServers_Sort(), ArenaServers_StartRefresh(), ArenaServers_StopRefresh(), ArenaServers_UpdateMenu(), ArenaServers_UpdatePicture(), menuradiobutton_s::curvalue, menulist_s::curvalue, g_arenaservers, g_emptyservers, g_fullservers, g_gametype, arenaservers_t::gametype, ID_BACK, ID_CONNECT, ID_CREATE, ID_GAMETYPE, ID_LIST, ID_MASTER, ID_PUNKBUSTER, ID_REFRESH, ID_REMOVE, ID_SCROLL_DOWN, ID_SCROLL_UP, ID_SHOW_EMPTY, ID_SHOW_FULL, ID_SORTKEY, ID_SPECIFY, K_DOWNARROW, K_UPARROW, arenaservers_t::list, arenaservers_t::master, NULL, arenaservers_t::punkbuster, Punkbuster_ConfirmDisable(), Punkbuster_ConfirmEnable(), QM_ACTIVATED, qtrue, ScrollList_Key(), arenaservers_t::showempty, arenaservers_t::showfull, arenaservers_t::sortkey, trap_Cvar_SetValue(), UI_CENTER, UI_ConfirmMenu_Style(), UI_INVERSE, UI_PopMenu(), UI_SMALLFONT, UI_SpecifyServerMenu(), UI_StartServerMenu(), value, and voidfunc_f.

01179                                                        {
01180     int     id;
01181     int value;
01182 
01183     id = ((menucommon_s*)ptr)->id;
01184 
01185     if( event != QM_ACTIVATED && id != ID_LIST ) {
01186         return;
01187     }
01188 
01189     switch( id ) {
01190     case ID_MASTER:
01191         value = g_arenaservers.master.curvalue;
01192         if (value >= 1)
01193         {
01194             value++;
01195         }
01196         trap_Cvar_SetValue( "ui_browserMaster", value );
01197         ArenaServers_SetType( value );
01198         break;
01199 
01200     case ID_GAMETYPE:
01201         trap_Cvar_SetValue( "ui_browserGameType", g_arenaservers.gametype.curvalue );
01202         g_gametype = g_arenaservers.gametype.curvalue;
01203         ArenaServers_UpdateMenu();
01204         break;
01205 
01206     case ID_SORTKEY:
01207         trap_Cvar_SetValue( "ui_browserSortKey", g_arenaservers.sortkey.curvalue );
01208         ArenaServers_Sort( g_arenaservers.sortkey.curvalue );
01209         ArenaServers_UpdateMenu();
01210         break;
01211 
01212     case ID_SHOW_FULL:
01213         trap_Cvar_SetValue( "ui_browserShowFull", g_arenaservers.showfull.curvalue );
01214         g_fullservers = g_arenaservers.showfull.curvalue;
01215         ArenaServers_UpdateMenu();
01216         break;
01217 
01218     case ID_SHOW_EMPTY:
01219         trap_Cvar_SetValue( "ui_browserShowEmpty", g_arenaservers.showempty.curvalue );
01220         g_emptyservers = g_arenaservers.showempty.curvalue;
01221         ArenaServers_UpdateMenu();
01222         break;
01223 
01224     case ID_LIST:
01225         if( event == QM_GOTFOCUS ) {
01226             ArenaServers_UpdatePicture();
01227         }
01228         break;
01229 
01230     case ID_SCROLL_UP:
01231         ScrollList_Key( &g_arenaservers.list, K_UPARROW );
01232         break;
01233 
01234     case ID_SCROLL_DOWN:
01235         ScrollList_Key( &g_arenaservers.list, K_DOWNARROW );
01236         break;
01237 
01238     case ID_BACK:
01239         ArenaServers_StopRefresh();
01240         ArenaServers_SaveChanges();
01241         UI_PopMenu();
01242         break;
01243 
01244     case ID_REFRESH:
01245         ArenaServers_StartRefresh();
01246         break;
01247 
01248     case ID_SPECIFY:
01249         UI_SpecifyServerMenu();
01250         break;
01251 
01252     case ID_CREATE:
01253         UI_StartServerMenu( qtrue );
01254         break;
01255 
01256     case ID_CONNECT:
01257         ArenaServers_Go();
01258         break;
01259 
01260     case ID_REMOVE:
01261         ArenaServers_Remove();
01262         ArenaServers_UpdateMenu();
01263         break;
01264     
01265     case ID_PUNKBUSTER:
01266         if (g_arenaservers.punkbuster.curvalue)         
01267         {
01268             UI_ConfirmMenu_Style( "Enable Punkbuster?",  UI_CENTER|UI_INVERSE|UI_SMALLFONT, (voidfunc_f)NULL, Punkbuster_ConfirmEnable );
01269         }
01270         else
01271         {
01272             UI_ConfirmMenu_Style( "Disable Punkbuster?", UI_CENTER|UI_INVERSE|UI_SMALLFONT, (voidfunc_f)NULL, Punkbuster_ConfirmDisable );
01273         }
01274         break;
01275     }
01276 }

Here is the call graph for this function:

void ArenaServers_Go void   )  [static]
 

Definition at line 337 of file ui_servers2.c.

References servernode_s::adrstr, menulist_s::curvalue, EXEC_APPEND, g_arenaservers, arenaservers_t::list, table_t::servernode, servernode_t, arenaservers_t::table, trap_Cmd_ExecuteText(), and va().

Referenced by ArenaServers_Event().

00337                                     {
00338     servernode_t*   servernode;
00339 
00340     servernode = g_arenaservers.table[g_arenaservers.list.curvalue].servernode;
00341     if( servernode ) {
00342         trap_Cmd_ExecuteText( EXEC_APPEND, va( "connect %s\n", servernode->adrstr ) );
00343     }
00344 }

Here is the call graph for this function:

void ArenaServers_Insert char *  adrstr,
char *  info,
int  pingtime
[static]
 

Definition at line 611 of file ui_servers2.c.

References servernode_s::adrstr, ArenaServers_MaxPing(), atoi, servernode_s::bPB, g_arenaservers, g_servertype, servernode_s::gamename, gamenames, servernode_s::gametype, servernode_s::hostname, i, Info_ValueForKey(), servernode_s::mapname, MAX_ADDRESSLENGTH, MAX_HOSTNAMELENGTH, MAX_MAPNAMELENGTH, servernode_s::maxclients, servernode_s::maxPing, arenaservers_t::maxservers, servernode_s::minPing, servernode_s::nettype, servernode_s::numclients, arenaservers_t::numservers, servernode_s::pingtime, Q_CleanStr(), Q_strncpyz(), Q_strupr(), s, arenaservers_t::serverlist, and servernode_t.

Referenced by ArenaServers_DoRefresh(), and ArenaServers_InsertFavorites().

00612 {
00613     servernode_t*   servernodeptr;
00614     char*           s;
00615     int             i;
00616 
00617 
00618     if ((pingtime >= ArenaServers_MaxPing()) && (g_servertype != AS_FAVORITES))
00619     {
00620         // slow global or local servers do not get entered
00621         return;
00622     }
00623 
00624     if (*g_arenaservers.numservers >= g_arenaservers.maxservers) {
00625         // list full;
00626         servernodeptr = g_arenaservers.serverlist+(*g_arenaservers.numservers)-1;
00627     } else {
00628         // next slot
00629         servernodeptr = g_arenaservers.serverlist+(*g_arenaservers.numservers);
00630         (*g_arenaservers.numservers)++;
00631     }
00632 
00633     Q_strncpyz( servernodeptr->adrstr, adrstr, MAX_ADDRESSLENGTH );
00634 
00635     Q_strncpyz( servernodeptr->hostname, Info_ValueForKey( info, "hostname"), MAX_HOSTNAMELENGTH );
00636     Q_CleanStr( servernodeptr->hostname );
00637     Q_strupr( servernodeptr->hostname );
00638 
00639     Q_strncpyz( servernodeptr->mapname, Info_ValueForKey( info, "mapname"), MAX_MAPNAMELENGTH );
00640     Q_CleanStr( servernodeptr->mapname );
00641     Q_strupr( servernodeptr->mapname );
00642 
00643     servernodeptr->numclients = atoi( Info_ValueForKey( info, "clients") );
00644     servernodeptr->maxclients = atoi( Info_ValueForKey( info, "sv_maxclients") );
00645     servernodeptr->pingtime   = pingtime;
00646     servernodeptr->minPing    = atoi( Info_ValueForKey( info, "minPing") );
00647     servernodeptr->maxPing    = atoi( Info_ValueForKey( info, "maxPing") );
00648     servernodeptr->bPB = atoi( Info_ValueForKey( info, "punkbuster") );
00649 
00650     /*
00651     s = Info_ValueForKey( info, "nettype" );
00652     for (i=0; ;i++)
00653     {
00654         if (!netnames[i])
00655         {
00656             servernodeptr->nettype = 0;
00657             break;
00658         }
00659         else if (!Q_stricmp( netnames[i], s ))
00660         {
00661             servernodeptr->nettype = i;
00662             break;
00663         }
00664     }
00665     */
00666     servernodeptr->nettype = atoi(Info_ValueForKey(info, "nettype"));
00667 
00668     s = Info_ValueForKey( info, "game");
00669     i = atoi( Info_ValueForKey( info, "gametype") );
00670     if( i < 0 ) {
00671         i = 0;
00672     }
00673     else if( i > 11 ) {
00674         i = 12;
00675     }
00676     if( *s ) {
00677         servernodeptr->gametype = i;//-1;
00678         Q_strncpyz( servernodeptr->gamename, s, sizeof(servernodeptr->gamename) );
00679     }
00680     else {
00681         servernodeptr->gametype = i;
00682         Q_strncpyz( servernodeptr->gamename, gamenames[i], sizeof(servernodeptr->gamename) );
00683     }
00684 }

Here is the call graph for this function:

void ArenaServers_InsertFavorites void   ) 
 

Definition at line 694 of file ui_servers2.c.

References servernode_s::adrstr, ArenaServers_Insert(), ArenaServers_MaxPing(), arenaservers_t::favoriteaddresses, g_arenaservers, g_favoriteserverlist, i, Info_SetValueForKey(), j, arenaservers_t::numfavoriteaddresses, and Q_stricmp().

Referenced by ArenaServers_StopRefresh().

00695 {
00696     int     i;
00697     int     j;
00698     char    info[MAX_INFO_STRING];
00699 
00700     // resync existing results with new or deleted cvars
00701     info[0] = '\0';
00702     Info_SetValueForKey( info, "hostname", "No Response" );
00703     for (i=0; i<g_arenaservers.numfavoriteaddresses; i++)
00704     {
00705         // find favorite address in refresh list
00706         for (j=0; j<g_numfavoriteservers; j++)
00707             if (!Q_stricmp(g_arenaservers.favoriteaddresses[i],g_favoriteserverlist[j].adrstr))
00708                 break;
00709 
00710         if ( j >= g_numfavoriteservers)
00711         {
00712             // not in list, add it
00713             ArenaServers_Insert( g_arenaservers.favoriteaddresses[i], info, ArenaServers_MaxPing() );
00714         }
00715     }
00716 }

Here is the call graph for this function:

void ArenaServers_LoadFavorites void   ) 
 

Definition at line 726 of file ui_servers2.c.

References ArenaServers_MaxPing(), arenaservers_t::favoriteaddresses, g_arenaservers, g_favoriteserverlist, g_numfavoriteservers, i, j, MAX_ADDRESSLENGTH, MAX_FAVORITESERVERS, memcpy(), memset(), arenaservers_t::numfavoriteaddresses, servernode_s::pingtime, Q_stricmp(), Q_strncpyz(), qboolean, servernode_t, strcpy(), trap_Cvar_VariableStringBuffer(), and va().

Referenced by ArenaServers_MenuInit().

00727 {
00728     int             i;
00729     int             j;
00730     int             numtempitems;
00731     char            emptyinfo[MAX_INFO_STRING];
00732     char            adrstr[MAX_ADDRESSLENGTH];
00733     servernode_t    templist[MAX_FAVORITESERVERS];
00734     qboolean        found;
00735 
00736     found        = qfalse;
00737     emptyinfo[0] = '\0';
00738 
00739     // copy the old
00740     memcpy( templist, g_favoriteserverlist, sizeof(servernode_t)*MAX_FAVORITESERVERS );
00741     numtempitems = g_numfavoriteservers;
00742 
00743     // clear the current for sync
00744     memset( g_favoriteserverlist, 0, sizeof(servernode_t)*MAX_FAVORITESERVERS );
00745     g_numfavoriteservers = 0;
00746 
00747     // resync existing results with new or deleted cvars
00748     for (i=0; i<MAX_FAVORITESERVERS; i++)
00749     {
00750         trap_Cvar_VariableStringBuffer( va("server%d",i+1), adrstr, MAX_ADDRESSLENGTH );
00751         if (!adrstr[0])
00752             continue;
00753 
00754         // quick sanity check to avoid slow domain name resolving
00755         // first character must be numeric
00756         if (adrstr[0] < '0' || adrstr[0] > '9')
00757             continue;
00758 
00759         // favorite server addresses must be maintained outside refresh list
00760         // this mimics local and global netadr's stored in client
00761         // these can be fetched to fill ping list
00762         strcpy( g_arenaservers.favoriteaddresses[g_numfavoriteservers], adrstr );
00763 
00764         // find this server in the old list
00765         for (j=0; j<numtempitems; j++)
00766             if (!Q_stricmp( templist[j].adrstr, adrstr ))
00767                 break;
00768 
00769         if (j < numtempitems)
00770         {
00771             // found server - add exisiting results
00772             memcpy( &g_favoriteserverlist[g_numfavoriteservers], &templist[j], sizeof(servernode_t) );
00773             found = qtrue;
00774         }
00775         else
00776         {
00777             // add new server
00778             Q_strncpyz( g_favoriteserverlist[g_numfavoriteservers].adrstr, adrstr, MAX_ADDRESSLENGTH );
00779             g_favoriteserverlist[g_numfavoriteservers].pingtime = ArenaServers_MaxPing();
00780         }
00781 
00782         g_numfavoriteservers++;
00783     }
00784 
00785     g_arenaservers.numfavoriteaddresses = g_numfavoriteservers;
00786 
00787     if (!found)
00788     {
00789         // no results were found, reset server list
00790         // list will be automatically refreshed when selected
00791         g_numfavoriteservers = 0;
00792     }
00793 }

Here is the call graph for this function:

int ArenaServers_MaxPing void   )  [static]
 

Definition at line 258 of file ui_servers2.c.

References trap_Cvar_VariableValue().

Referenced by ArenaServers_DoRefresh(), ArenaServers_Insert(), ArenaServers_InsertFavorites(), and ArenaServers_LoadFavorites().

00258                                         {
00259     int     maxPing;
00260 
00261     maxPing = (int)trap_Cvar_VariableValue( "cl_maxPing" );
00262     if( maxPing < 100 ) {
00263         maxPing = 100;
00264     }
00265     return maxPing;
00266 }

Here is the call graph for this function:

void ArenaServers_MenuDraw void   )  [static]
 

Definition at line 1284 of file ui_servers2.c.

References ArenaServers_DoRefresh(), g_arenaservers, arenaservers_t::menu, Menu_Draw(), and arenaservers_t::refreshservers.

01285 {
01286     if (g_arenaservers.refreshservers)
01287         ArenaServers_DoRefresh();
01288 
01289     Menu_Draw( &g_arenaservers.menu );
01290 }

Here is the call graph for this function:

void ArenaServers_MenuInit void   )  [static]
 

Definition at line 1326 of file ui_servers2.c.

References ArenaServers_Cache(), ArenaServers_LoadFavorites(), ArenaServers_SetType(), arenaservers_t::arrows, arenaservers_t::back, arenaservers_t::banner, table_t::buff, menucommon_s::callback, menutext_s::color, Com_Clamp(), arenaservers_t::create, menuradiobutton_s::curvalue, menulist_s::curvalue, arenaservers_t::down, _tag_menuframework::draw, menubitmap_s::errorpic, menucommon_s::flags, menubitmap_s::focuspic, _tag_menuframework::fullscreen, g_arenaservers, g_emptyservers, g_fullservers, g_gametype, g_servertype, g_sortkey, arenaservers_t::gametype, menubitmap_s::generic, menuradiobutton_s::generic, menulist_s::generic, menutext_s::generic, arenaservers_t::go, menubitmap_s::height, menulist_s::height, i, menucommon_s::id, vmCvar_t::integer, menulist_s::itemnames, arenaservers_t::items, _tag_menuframework::key, arenaservers_t::list, arenaservers_t::mappic, arenaservers_t::master, memset(), arenaservers_t::menu, Menu_AddItem(), menucommon_s::name, NULL, arenaservers_t::pblogo, arenaservers_t::punkbuster, QMF_LEFT_JUSTIFY, QMF_PULSEIFFOCUS, QMF_RIGHT_JUSTIFY, arenaservers_t::refresh, arenaservers_t::remove, arenaservers_t::showempty, arenaservers_t::showfull, arenaservers_t::sortkey, arenaservers_t::specify, arenaservers_t::status, arenaservers_t::statusbar, menutext_s::string, menutext_s::style, arenaservers_t::table, trap_Cvar_Register(), trap_Cvar_VariableValue(), type, menucommon_s::type, ui_browserGameType, ui_browserMaster, ui_browserShowEmpty, ui_browserShowFull, ui_browserSortKey, UI_CENTER, arenaservers_t::up, value, menubitmap_s::width, menulist_s::width, _tag_menuframework::wrapAround, menucommon_s::x, y, and menucommon_s::y.

Referenced by UI_ArenaServersMenu().

01326                                           {
01327     int         i;
01328     int         type;
01329     int         y;
01330     int         value;
01331     static char statusbuffer[MAX_STATUSLENGTH];
01332 
01333     // zero set all our globals
01334     memset( &g_arenaservers, 0 ,sizeof(arenaservers_t) );
01335 
01336     ArenaServers_Cache();
01337 
01338     g_arenaservers.menu.fullscreen = qtrue;
01339     g_arenaservers.menu.wrapAround = qtrue;
01340     g_arenaservers.menu.draw       = ArenaServers_MenuDraw;
01341     g_arenaservers.menu.key        = ArenaServers_MenuKey;
01342 
01343     g_arenaservers.banner.generic.type  = MTYPE_BTEXT;
01344     g_arenaservers.banner.generic.flags = QMF_CENTER_JUSTIFY;
01345     g_arenaservers.banner.generic.x     = 320;
01346     g_arenaservers.banner.generic.y     = 16;
01347     g_arenaservers.banner.string        = "ARENA SERVERS";
01348     g_arenaservers.banner.style         = UI_CENTER;
01349     g_arenaservers.banner.color         = color_white;
01350 
01351     y = 80;
01352     g_arenaservers.master.generic.type          = MTYPE_SPINCONTROL;
01353     g_arenaservers.master.generic.name          = "Servers:";
01354     g_arenaservers.master.generic.flags         = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
01355     g_arenaservers.master.generic.callback      = ArenaServers_Event;
01356     g_arenaservers.master.generic.id            = ID_MASTER;
01357     g_arenaservers.master.generic.x             = 320;
01358     g_arenaservers.master.generic.y             = y;
01359     g_arenaservers.master.itemnames             = master_items;
01360 
01361     y += SMALLCHAR_HEIGHT;
01362     g_arenaservers.gametype.generic.type        = MTYPE_SPINCONTROL;
01363     g_arenaservers.gametype.generic.name        = "Game Type:";
01364     g_arenaservers.gametype.generic.flags       = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
01365     g_arenaservers.gametype.generic.callback    = ArenaServers_Event;
01366     g_arenaservers.gametype.generic.id          = ID_GAMETYPE;
01367     g_arenaservers.gametype.generic.x           = 320;
01368     g_arenaservers.gametype.generic.y           = y;
01369     g_arenaservers.gametype.itemnames           = servertype_items;
01370 
01371     y += SMALLCHAR_HEIGHT;
01372     g_arenaservers.sortkey.generic.type         = MTYPE_SPINCONTROL;
01373     g_arenaservers.sortkey.generic.name         = "Sort By:";
01374     g_arenaservers.sortkey.generic.flags        = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
01375     g_arenaservers.sortkey.generic.callback     = ArenaServers_Event;
01376     g_arenaservers.sortkey.generic.id           = ID_SORTKEY;
01377     g_arenaservers.sortkey.generic.x            = 320;
01378     g_arenaservers.sortkey.generic.y            = y;
01379     g_arenaservers.sortkey.itemnames            = sortkey_items;
01380 
01381     y += SMALLCHAR_HEIGHT;
01382     g_arenaservers.showfull.generic.type        = MTYPE_RADIOBUTTON;
01383     g_arenaservers.showfull.generic.name        = "Show Full:";
01384     g_arenaservers.showfull.generic.flags       = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
01385     g_arenaservers.showfull.generic.callback    = ArenaServers_Event;
01386     g_arenaservers.showfull.generic.id          = ID_SHOW_FULL;
01387     g_arenaservers.showfull.generic.x           = 320;
01388     g_arenaservers.showfull.generic.y           = y;
01389 
01390     y += SMALLCHAR_HEIGHT;
01391     g_arenaservers.showempty.generic.type       = MTYPE_RADIOBUTTON;
01392     g_arenaservers.showempty.generic.name       = "Show Empty:";
01393     g_arenaservers.showempty.generic.flags      = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
01394     g_arenaservers.showempty.generic.callback   = ArenaServers_Event;
01395     g_arenaservers.showempty.generic.id         = ID_SHOW_EMPTY;
01396     g_arenaservers.showempty.generic.x          = 320;
01397     g_arenaservers.showempty.generic.y          = y;
01398 
01399     y += 3 * SMALLCHAR_HEIGHT;
01400     g_arenaservers.list.generic.type            = MTYPE_SCROLLLIST;
01401     g_arenaservers.list.generic.flags           = QMF_HIGHLIGHT_IF_FOCUS;
01402     g_arenaservers.list.generic.id              = ID_LIST;
01403     g_arenaservers.list.generic.callback        = ArenaServers_Event;
01404     g_arenaservers.list.generic.x               = 72;
01405     g_arenaservers.list.generic.y               = y;
01406     g_arenaservers.list.width                   = MAX_LISTBOXWIDTH;
01407     g_arenaservers.list.height                  = 11;
01408     g_arenaservers.list.itemnames               = (const char **)g_arenaservers.items;
01409     for( i = 0; i < MAX_LISTBOXITEMS; i++ ) {
01410         g_arenaservers.items[i] = g_arenaservers.table[i].buff;
01411     }
01412 
01413     g_arenaservers.mappic.generic.type          = MTYPE_BITMAP;
01414     g_arenaservers.mappic.generic.flags         = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
01415     g_arenaservers.mappic.generic.x             = 72;
01416     g_arenaservers.mappic.generic.y             = 80;
01417     g_arenaservers.mappic.width                 = 128;
01418     g_arenaservers.mappic.height                = 96;
01419     g_arenaservers.mappic.errorpic              = ART_UNKNOWNMAP;
01420 
01421     g_arenaservers.arrows.generic.type          = MTYPE_BITMAP;
01422     g_arenaservers.arrows.generic.name          = ART_ARROWS0;
01423     g_arenaservers.arrows.generic.flags         = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
01424     g_arenaservers.arrows.generic.callback      = ArenaServers_Event;
01425     g_arenaservers.arrows.generic.x             = 512+48;
01426     g_arenaservers.arrows.generic.y             = 240-64+16;
01427     g_arenaservers.arrows.width                 = 64;
01428     g_arenaservers.arrows.height                = 128;
01429 
01430     g_arenaservers.up.generic.type              = MTYPE_BITMAP;
01431     g_arenaservers.up.generic.flags             = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
01432     g_arenaservers.up.generic.callback          = ArenaServers_Event;
01433     g_arenaservers.up.generic.id                = ID_SCROLL_UP;
01434     g_arenaservers.up.generic.x                 = 512+48;
01435     g_arenaservers.up.generic.y                 = 240-64+16;
01436     g_arenaservers.up.width                     = 64;
01437     g_arenaservers.up.height                    = 64;
01438     g_arenaservers.up.focuspic                  = ART_ARROWS_UP;
01439 
01440     g_arenaservers.down.generic.type            = MTYPE_BITMAP;
01441     g_arenaservers.down.generic.flags           = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
01442     g_arenaservers.down.generic.callback        = ArenaServers_Event;
01443     g_arenaservers.down.generic.id              = ID_SCROLL_DOWN;
01444     g_arenaservers.down.generic.x               = 512+48;
01445     g_arenaservers.down.generic.y               = 240+16;
01446     g_arenaservers.down.width                   = 64;
01447     g_arenaservers.down.height                  = 64;
01448     g_arenaservers.down.focuspic                = ART_ARROWS_DOWN;
01449 
01450     y = 376;
01451     g_arenaservers.status.generic.type      = MTYPE_TEXT;
01452     g_arenaservers.status.generic.x         = 320;
01453     g_arenaservers.status.generic.y         = y;
01454     g_arenaservers.status.string            = statusbuffer;
01455     g_arenaservers.status.style             = UI_CENTER|UI_SMALLFONT;
01456     g_arenaservers.status.color             = menu_text_color;
01457 
01458     y += SMALLCHAR_HEIGHT;
01459     g_arenaservers.statusbar.generic.type   = MTYPE_TEXT;
01460     g_arenaservers.statusbar.generic.x      = 320;
01461     g_arenaservers.statusbar.generic.y      = y;
01462     g_arenaservers.statusbar.string         = "";
01463     g_arenaservers.statusbar.style          = UI_CENTER|UI_SMALLFONT;
01464     g_arenaservers.statusbar.color          = text_color_normal;
01465 
01466     g_arenaservers.remove.generic.type      = MTYPE_BITMAP;
01467     g_arenaservers.remove.generic.name      = ART_REMOVE0;
01468     g_arenaservers.remove.generic.flags     = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
01469     g_arenaservers.remove.generic.callback  = ArenaServers_Event;
01470     g_arenaservers.remove.generic.id        = ID_REMOVE;
01471     g_arenaservers.remove.generic.x         = 450;
01472     g_arenaservers.remove.generic.y         = 86;
01473     g_arenaservers.remove.width             = 96;
01474     g_arenaservers.remove.height            = 48;
01475     g_arenaservers.remove.focuspic          = ART_REMOVE1;
01476 
01477     g_arenaservers.back.generic.type        = MTYPE_BITMAP;
01478     g_arenaservers.back.generic.name        = ART_BACK0;
01479     g_arenaservers.back.generic.flags       = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
01480     g_arenaservers.back.generic.callback    = ArenaServers_Event;
01481     g_arenaservers.back.generic.id          = ID_BACK;
01482     g_arenaservers.back.generic.x           = 0;
01483     g_arenaservers.back.generic.y           = 480-64;
01484     g_arenaservers.back.width               = 128;
01485     g_arenaservers.back.height              = 64;
01486     g_arenaservers.back.focuspic            = ART_BACK1;
01487 
01488     g_arenaservers.specify.generic.type     = MTYPE_BITMAP;
01489     g_arenaservers.specify.generic.name     = ART_SPECIFY0;
01490     g_arenaservers.specify.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
01491     g_arenaservers.specify.generic.callback = ArenaServers_Event;
01492     g_arenaservers.specify.generic.id       = ID_SPECIFY;
01493     g_arenaservers.specify.generic.x        = 128;
01494     g_arenaservers.specify.generic.y        = 480-64;
01495     g_arenaservers.specify.width            = 128;
01496     g_arenaservers.specify.height           = 64;
01497     g_arenaservers.specify.focuspic         = ART_SPECIFY1;
01498 
01499     g_arenaservers.refresh.generic.type     = MTYPE_BITMAP;
01500     g_arenaservers.refresh.generic.name     = ART_REFRESH0;
01501     g_arenaservers.refresh.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
01502     g_arenaservers.refresh.generic.callback = ArenaServers_Event;
01503     g_arenaservers.refresh.generic.id       = ID_REFRESH;
01504     g_arenaservers.refresh.generic.x        = 256;
01505     g_arenaservers.refresh.generic.y        = 480-64;
01506     g_arenaservers.refresh.width            = 128;
01507     g_arenaservers.refresh.height           = 64;
01508     g_arenaservers.refresh.focuspic         = ART_REFRESH1;
01509 
01510     g_arenaservers.create.generic.type      = MTYPE_BITMAP;
01511     g_arenaservers.create.generic.name      = ART_CREATE0;
01512     g_arenaservers.create.generic.flags     = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
01513     g_arenaservers.create.generic.callback  = ArenaServers_Event;
01514     g_arenaservers.create.generic.id        = ID_CREATE;
01515     g_arenaservers.create.generic.x         = 384;
01516     g_arenaservers.create.generic.y         = 480-64;
01517     g_arenaservers.create.width             = 128;
01518     g_arenaservers.create.height            = 64;
01519     g_arenaservers.create.focuspic          = ART_CREATE1;
01520 
01521     g_arenaservers.go.generic.type          = MTYPE_BITMAP;
01522     g_arenaservers.go.generic.name          = ART_CONNECT0;
01523     g_arenaservers.go.generic.flags         = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
01524     g_arenaservers.go.generic.callback      = ArenaServers_Event;
01525     g_arenaservers.go.generic.id            = ID_CONNECT;
01526     g_arenaservers.go.generic.x             = 640;
01527     g_arenaservers.go.generic.y             = 480-64;
01528     g_arenaservers.go.width                 = 128;
01529     g_arenaservers.go.height                = 64;
01530     g_arenaservers.go.focuspic              = ART_CONNECT1;
01531 
01532     g_arenaservers.punkbuster.generic.type          = MTYPE_SPINCONTROL;
01533     g_arenaservers.punkbuster.generic.name          = "Punkbuster:";
01534     g_arenaservers.punkbuster.generic.flags         = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
01535     g_arenaservers.punkbuster.generic.callback      = ArenaServers_Event;
01536     g_arenaservers.punkbuster.generic.id            = ID_PUNKBUSTER;
01537     g_arenaservers.punkbuster.generic.x             = 480+32;
01538     g_arenaservers.punkbuster.generic.y             = 144;
01539     g_arenaservers.punkbuster.itemnames             = punkbuster_items;
01540     
01541     g_arenaservers.pblogo.generic.type          = MTYPE_BITMAP;
01542     g_arenaservers.pblogo.generic.name          = ART_PUNKBUSTER;
01543     g_arenaservers.pblogo.generic.flags         = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
01544     g_arenaservers.pblogo.generic.x             = 526;
01545     g_arenaservers.pblogo.generic.y             = 176;
01546     g_arenaservers.pblogo.width                 = 32;
01547     g_arenaservers.pblogo.height                = 16;
01548     g_arenaservers.pblogo.errorpic              = ART_UNKNOWNMAP;
01549     
01550     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.banner );
01551 
01552     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.master );
01553     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.gametype );
01554     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.sortkey );
01555     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showfull);
01556     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showempty );
01557 
01558     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.mappic );
01559     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.list );
01560     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.status );
01561     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.statusbar );
01562     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.arrows );
01563     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.up );
01564     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.down );
01565 
01566     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.remove );
01567     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.back );
01568     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.specify );
01569     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.refresh );
01570     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.create );
01571     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.go );
01572 
01573     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.punkbuster );
01574     Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.pblogo );
01575     
01576     ArenaServers_LoadFavorites();
01577 
01578     g_servertype = Com_Clamp( 0, 3, ui_browserMaster.integer );
01579     // hack to get rid of MPlayer stuff
01580     value = g_servertype;
01581     if (value >= 1)
01582         value--;
01583     g_arenaservers.master.curvalue = value;
01584 
01585     g_gametype = Com_Clamp( 0, 4, ui_browserGameType.integer );
01586     g_arenaservers.gametype.curvalue = g_gametype;
01587 
01588     g_sortkey = Com_Clamp( 0, 4, ui_browserSortKey.integer );
01589     g_arenaservers.sortkey.curvalue = g_sortkey;
01590 
01591     g_fullservers = Com_Clamp( 0, 1, ui_browserShowFull.integer );
01592     g_arenaservers.showfull.curvalue = g_fullservers;
01593 
01594     g_emptyservers = Com_Clamp( 0, 1, ui_browserShowEmpty.integer );
01595     g_arenaservers.showempty.curvalue = g_emptyservers;
01596     
01597     g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, trap_Cvar_VariableValue( "cl_punkbuster" ) );
01598 
01599     // force to initial state and refresh
01600     type = g_servertype;
01601     g_servertype = -1;
01602     ArenaServers_SetType( type );
01603 
01604     trap_Cvar_Register(NULL, "debug_protocol", "", 0 );
01605 }

Here is the call graph for this function:

sfxHandle_t ArenaServers_MenuKey int  key  )  [static]
 

Definition at line 1298 of file ui_servers2.c.

References ArenaServers_Remove(), ArenaServers_SaveChanges(), ArenaServers_StopRefresh(), ArenaServers_UpdateMenu(), g_arenaservers, g_servertype, K_DEL, K_MOUSE2, K_SPACE, arenaservers_t::list, arenaservers_t::menu, Menu_DefaultKey(), Menu_ItemAtCursor(), arenaservers_t::refreshservers, and sfxHandle_t.

01298                                                    {
01299     if( key == K_SPACE  && g_arenaservers.refreshservers ) {
01300         ArenaServers_StopRefresh(); 
01301         return menu_move_sound;
01302     }
01303 
01304     if( ( key == K_DEL || key == K_KP_DEL ) && ( g_servertype == AS_FAVORITES ) &&
01305         ( Menu_ItemAtCursor( &g_arenaservers.menu) == &g_arenaservers.list ) ) {
01306         ArenaServers_Remove();
01307         ArenaServers_UpdateMenu();
01308         return menu_move_sound;
01309     }
01310 
01311     if( key == K_MOUSE2 || key == K_ESCAPE ) {
01312         ArenaServers_StopRefresh();
01313         ArenaServers_SaveChanges();
01314     }
01315 
01316 
01317     return Menu_DefaultKey( &g_arenaservers.menu, key );
01318 }

Here is the call graph for this function:

void ArenaServers_Remove void   )  [static]
 

Definition at line 553 of file ui_servers2.c.

References servernode_s::adrstr, arenaservers_t::currentping, menulist_s::curvalue, arenaservers_t::favoriteaddresses, g_arenaservers, g_favoriteserverlist, g_numfavoriteservers, i, arenaservers_t::list, MAX_ADDRESSLENGTH, memcpy(), arenaservers_t::numfavoriteaddresses, menulist_s::numitems, arenaservers_t::numqueriedservers, Q_stricmp(), table_t::servernode, servernode_t, and arenaservers_t::table.

Referenced by ArenaServers_Event(), and ArenaServers_MenuKey().

00554 {
00555     int             i;
00556     servernode_t*   servernodeptr;
00557     table_t*        tableptr;
00558 
00559     if (!g_arenaservers.list.numitems)
00560         return;
00561 
00562     // remove selected item from display list
00563     // items are in scattered order due to sort and cull
00564     // perform delete on list box contents, resync all lists
00565 
00566     tableptr      = &g_arenaservers.table[g_arenaservers.list.curvalue];
00567     servernodeptr = tableptr->servernode;
00568 
00569     // find address in master list
00570     for (i=0; i<g_arenaservers.numfavoriteaddresses; i++)
00571         if (!Q_stricmp(g_arenaservers.favoriteaddresses[i],servernodeptr->adrstr))
00572                 break;
00573 
00574     // delete address from master list
00575     if (i <= g_arenaservers.numfavoriteaddresses-1)
00576     {
00577         if (i < g_arenaservers.numfavoriteaddresses-1)
00578         {
00579             // shift items up
00580             memcpy( &g_arenaservers.favoriteaddresses[i], &g_arenaservers.favoriteaddresses[i+1], (g_arenaservers.numfavoriteaddresses - i - 1)*sizeof(MAX_ADDRESSLENGTH));
00581         }
00582         g_arenaservers.numfavoriteaddresses--;
00583     }   
00584 
00585     // find address in server list
00586     for (i=0; i<g_numfavoriteservers; i++)
00587         if (&g_favoriteserverlist[i] == servernodeptr)
00588                 break;
00589 
00590     // delete address from server list
00591     if (i <= g_numfavoriteservers-1)
00592     {
00593         if (i < g_numfavoriteservers-1)
00594         {
00595             // shift items up
00596             memcpy( &g_favoriteserverlist[i], &g_favoriteserverlist[i+1], (g_numfavoriteservers - i - 1)*sizeof(servernode_t));
00597         }
00598         g_numfavoriteservers--;
00599     }   
00600 
00601     g_arenaservers.numqueriedservers = g_arenaservers.numfavoriteaddresses;
00602     g_arenaservers.currentping       = g_arenaservers.numfavoriteaddresses;
00603 }

Here is the call graph for this function:

void ArenaServers_SaveChanges void   ) 
 

Definition at line 1069 of file ui_servers2.c.

References arenaservers_t::favoriteaddresses, g_arenaservers, i, arenaservers_t::numfavoriteaddresses, trap_Cvar_Set(), and va().

Referenced by ArenaServers_Event(), and ArenaServers_MenuKey().

01070 {
01071     int i;
01072 
01073     for (i=0; i<g_arenaservers.numfavoriteaddresses; i++)
01074         trap_Cvar_Set( va("server%d",i+1), g_arenaservers.favoriteaddresses[i] );
01075 
01076     for (; i<MAX_FAVORITESERVERS; i++)
01077         trap_Cvar_Set( va("server%d",i+1), "" );
01078 }

Here is the call graph for this function:

void ArenaServers_SetType int  type  ) 
 

Definition at line 1101 of file ui_servers2.c.

References ArenaServers_StartRefresh(), ArenaServers_UpdateMenu(), AS_FAVORITES, AS_GLOBAL, AS_LOCAL, AS_MPLAYER, arenaservers_t::currentping, menucommon_s::flags, g_arenaservers, g_servertype, menubitmap_s::generic, arenaservers_t::maxservers, arenaservers_t::numqueriedservers, arenaservers_t::numservers, QMF_INACTIVE, arenaservers_t::remove, arenaservers_t::serverlist, arenaservers_t::status, strcpy(), and menutext_s::string.

Referenced by ArenaServers_Event(), and ArenaServers_MenuInit().

01102 {
01103     if (g_servertype == type)
01104         return;
01105 
01106     g_servertype = type;
01107 
01108     switch( type ) {
01109     default:
01110     case AS_LOCAL:
01111         g_arenaservers.remove.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
01112         g_arenaservers.serverlist = g_localserverlist;
01113         g_arenaservers.numservers = &g_numlocalservers;
01114         g_arenaservers.maxservers = MAX_LOCALSERVERS;
01115         break;
01116 
01117     case AS_GLOBAL:
01118         g_arenaservers.remove.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
01119         g_arenaservers.serverlist = g_globalserverlist;
01120         g_arenaservers.numservers = &g_numglobalservers;
01121         g_arenaservers.maxservers = MAX_GLOBALSERVERS;
01122         break;
01123 
01124     case AS_FAVORITES:
01125         g_arenaservers.remove.generic.flags &= ~(QMF_INACTIVE|QMF_HIDDEN);
01126         g_arenaservers.serverlist = g_favoriteserverlist;
01127         g_arenaservers.numservers = &g_numfavoriteservers;
01128         g_arenaservers.maxservers = MAX_FAVORITESERVERS;
01129         break;
01130 
01131     case AS_MPLAYER:
01132         g_arenaservers.remove.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
01133         g_arenaservers.serverlist = g_mplayerserverlist;
01134         g_arenaservers.numservers = &g_nummplayerservers;
01135         g_arenaservers.maxservers = MAX_GLOBALSERVERS;
01136         break;
01137         
01138     }
01139 
01140     if( !*g_arenaservers.numservers ) {
01141         ArenaServers_StartRefresh();
01142     }
01143     else {
01144         // avoid slow operation, use existing results
01145         g_arenaservers.currentping       = *g_arenaservers.numservers;
01146         g_arenaservers.numqueriedservers = *g_arenaservers.numservers; 
01147         ArenaServers_UpdateMenu();
01148     }
01149     strcpy(g_arenaservers.status.string,"hit refresh to update");
01150 }

Here is the call graph for this function:

void ArenaServers_Sort int  type  ) 
 

Definition at line 1086 of file ui_servers2.c.

References ArenaServers_Compare(), g_arenaservers, g_sortkey, arenaservers_t::numservers, qsort(), arenaservers_t::serverlist, and servernode_t.

Referenced by ArenaServers_Event().

01086                                    {
01087     if( g_sortkey == type ) {
01088         return;
01089     }
01090 
01091     g_sortkey = type;
01092     qsort( g_arenaservers.serverlist, *g_arenaservers.numservers, sizeof( servernode_t ), ArenaServers_Compare);
01093 }

Here is the call graph for this function:

void ArenaServers_StartRefresh void   )  [static]
 

Definition at line 982 of file ui_servers2.c.

References pinglist_t::adrstr, ArenaServers_UpdateMenu(), AS_GLOBAL, arenaservers_t::currentping, menulist_s::curvalue, EXEC_APPEND, g_arenaservers, g_servertype, GAMES_ALL, GAMES_CTF, GAMES_FFA, GAMES_TEAMPLAY, GAMES_TOURNEY, arenaservers_t::gametype, i, arenaservers_t::maxservers, memset(), arenaservers_t::nextpingtime, arenaservers_t::numqueriedservers, arenaservers_t::numservers, arenaservers_t::pinglist, uiStatic_t::realtime, arenaservers_t::refreshservers, arenaservers_t::refreshtime, arenaservers_t::serverlist, strcat(), strcpy(), strlen(), trap_Cmd_ExecuteText(), trap_Cvar_VariableStringBuffer(), trap_Cvar_VariableValue(), trap_LAN_ClearPing(), uis, and va().

Referenced by ArenaServers_Event(), and ArenaServers_SetType().

00983 {
00984     int     i;
00985     char    myargs[32], protocol[32];
00986 
00987     memset( g_arenaservers.serverlist, 0, g_arenaservers.maxservers*sizeof(table_t) );
00988 
00989     for (i=0; i<MAX_PINGREQUESTS; i++)
00990     {
00991         g_arenaservers.pinglist[i].adrstr[0] = '\0';
00992         trap_LAN_ClearPing( i );
00993     }
00994 
00995     g_arenaservers.refreshservers    = qtrue;
00996     g_arenaservers.currentping       = 0;
00997     g_arenaservers.nextpingtime      = 0;
00998     *g_arenaservers.numservers       = 0;
00999     g_arenaservers.numqueriedservers = 0;
01000 
01001     // allow max 5 seconds for responses
01002     g_arenaservers.refreshtime = uis.realtime + 5000;
01003 
01004     // place menu in zeroed state
01005     ArenaServers_UpdateMenu();
01006 
01007     if( g_servertype == AS_LOCAL ) {
01008         trap_Cmd_ExecuteText( EXEC_APPEND, "localservers\n" );
01009         return;
01010     }
01011 
01012     if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) {
01013         if( g_servertype == AS_GLOBAL ) {
01014             i = 0;
01015         }
01016         else {
01017             i = 1;
01018         }
01019 
01020         switch( g_arenaservers.gametype.curvalue ) {
01021         default:
01022         case GAMES_ALL:
01023             myargs[0] = 0;
01024             break;
01025 
01026         case GAMES_FFA:
01027             strcpy( myargs, " ffa" );
01028             break;
01029 
01030         case GAMES_TEAMPLAY:
01031             strcpy( myargs, " team" );
01032             break;
01033 
01034         case GAMES_TOURNEY:
01035             strcpy( myargs, " tourney" );
01036             break;
01037 
01038         case GAMES_CTF:
01039             strcpy( myargs, " ctf" );
01040             break;
01041         }
01042 
01043 
01044         if (g_emptyservers) {
01045             strcat(myargs, " empty");
01046         }
01047 
01048         if (g_fullservers) {
01049             strcat(myargs, " full");
01050         }
01051 
01052         protocol[0] = '\0';
01053         trap_Cvar_VariableStringBuffer( "debug_protocol", protocol, sizeof(protocol) );
01054         if (strlen(protocol)) {
01055             trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d %s%s\n", i, protocol, myargs ));
01056         }
01057         else {
01058             trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d %d%s\n", i, (int)trap_Cvar_VariableValue( "protocol" ), myargs ) );
01059         }
01060     }
01061 }

Here is the call graph for this function:

void ArenaServers_StopRefresh void   )  [static]
 

Definition at line 801 of file ui_servers2.c.

References ArenaServers_Compare(), ArenaServers_InsertFavorites(), ArenaServers_UpdateMenu(), arenaservers_t::currentping, g_arenaservers, g_servertype, arenaservers_t::numqueriedservers, arenaservers_t::numservers, qsort(), arenaservers_t::refreshservers, arenaservers_t::serverlist, and servernode_t.

Referenced by ArenaServers_DoRefresh(), ArenaServers_Event(), and ArenaServers_MenuKey().

00802 {
00803     if (!g_arenaservers.refreshservers)
00804         // not currently refreshing
00805         return;
00806 
00807     g_arenaservers.refreshservers = qfalse;
00808 
00809     if (g_servertype == AS_FAVORITES)
00810     {
00811         // nonresponsive favorites must be shown
00812         ArenaServers_InsertFavorites();
00813     }
00814 
00815     // final tally
00816     if (g_arenaservers.numqueriedservers >= 0)
00817     {
00818         g_arenaservers.currentping       = *g_arenaservers.numservers;
00819         g_arenaservers.numqueriedservers = *g_arenaservers.numservers; 
00820     }
00821     
00822     // sort
00823     qsort( g_arenaservers.serverlist, *g_arenaservers.numservers, sizeof( servernode_t ), ArenaServers_Compare);
00824 
00825     ArenaServers_UpdateMenu();
00826 }

Here is the call graph for this function:

void ArenaServers_UpdateMenu void   )  [static]
 

Definition at line 376 of file ui_servers2.c.

References ArenaServers_Compare(), ArenaServers_UpdatePicture(), AS_GLOBAL, servernode_s::bPB, table_t::buff, Com_sprintf(), count, arenaservers_t::currentping, menulist_s::curvalue, menucommon_s::flags, g_arenaservers, g_emptyservers, g_fullservers, g_servertype, servernode_s::gamename, GAMES_ALL, GAMES_CTF, GAMES_FFA, GAMES_TEAMPLAY, GAMES_TOURNEY, servernode_s::gametype, arenaservers_t::gametype, menubitmap_s::generic, menuradiobutton_s::generic, menulist_s::generic, arenaservers_t::go, servernode_s::hostname, i, j, arenaservers_t::list, servernode_s::mapname, arenaservers_t::master, MAX_LISTBOXWIDTH, MAX_STATUSLENGTH, servernode_s::maxclients, servernode_s::maxPing, servernode_s::minPing, netnames, servernode_s::nettype, servernode_s::numclients, menulist_s::numitems, arenaservers_t::numqueriedservers, arenaservers_t::numservers, servernode_s::pingtime, arenaservers_t::punkbuster, qsort(), arenaservers_t::refresh, arenaservers_t::refreshservers, S_COLOR_YELLOW, arenaservers_t::serverlist, table_t::servernode, servernode_t, arenaservers_t::showempty, arenaservers_t::showfull, arenaservers_t::sortkey, arenaservers_t::status, arenaservers_t::statusbar, strcpy(), menutext_s::string, arenaservers_t::table, and menulist_s::top.

Referenced by ArenaServers_DoRefresh(), ArenaServers_Event(), ArenaServers_MenuKey(), ArenaServers_SetType(), ArenaServers_StartRefresh(), and ArenaServers_StopRefresh().

00376                                             {
00377     int             i;
00378     int             j;
00379     int             count;
00380     char*           buff;
00381     servernode_t*   servernodeptr;
00382     table_t*        tableptr;
00383     char            *pingColor;
00384 
00385     if( g_arenaservers.numqueriedservers > 0 ) {
00386         // servers found
00387         if( g_arenaservers.refreshservers && ( g_arenaservers.currentping <= g_arenaservers.numqueriedservers ) ) {
00388             // show progress
00389             Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "%d of %d Arena Servers.", g_arenaservers.currentping, g_arenaservers.numqueriedservers);
00390             g_arenaservers.statusbar.string  = "Press SPACE to stop";
00391             qsort( g_arenaservers.serverlist, *g_arenaservers.numservers, sizeof( servernode_t ), ArenaServers_Compare);
00392         }
00393         else {
00394             // all servers pinged - enable controls
00395             g_arenaservers.master.generic.flags     &= ~QMF_GRAYED;
00396             g_arenaservers.gametype.generic.flags   &= ~QMF_GRAYED;
00397             g_arenaservers.sortkey.generic.flags    &= ~QMF_GRAYED;
00398             g_arenaservers.showempty.generic.flags  &= ~QMF_GRAYED;
00399             g_arenaservers.showfull.generic.flags   &= ~QMF_GRAYED;
00400             g_arenaservers.list.generic.flags       &= ~QMF_GRAYED;
00401             g_arenaservers.refresh.generic.flags    &= ~QMF_GRAYED;
00402             g_arenaservers.go.generic.flags         &= ~QMF_GRAYED;
00403             g_arenaservers.punkbuster.generic.flags &= ~QMF_GRAYED;
00404 
00405             // update status bar
00406             if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) {
00407                 g_arenaservers.statusbar.string = quake3worldMessage;
00408             }
00409             else {
00410                 g_arenaservers.statusbar.string = "";
00411             }
00412 
00413         }
00414     }
00415     else {
00416         // no servers found
00417         if( g_arenaservers.refreshservers ) {
00418             strcpy( g_arenaservers.status.string,"Scanning For Servers." );
00419             g_arenaservers.statusbar.string = "Press SPACE to stop";
00420 
00421             // disable controls during refresh
00422             g_arenaservers.master.generic.flags     |= QMF_GRAYED;
00423             g_arenaservers.gametype.generic.flags   |= QMF_GRAYED;
00424             g_arenaservers.sortkey.generic.flags    |= QMF_GRAYED;
00425             g_arenaservers.showempty.generic.flags  |= QMF_GRAYED;
00426             g_arenaservers.showfull.generic.flags   |= QMF_GRAYED;
00427             g_arenaservers.list.generic.flags       |= QMF_GRAYED;
00428             g_arenaservers.refresh.generic.flags    |= QMF_GRAYED;
00429             g_arenaservers.go.generic.flags         |= QMF_GRAYED;
00430             g_arenaservers.punkbuster.generic.flags |= QMF_GRAYED;
00431         }
00432         else {
00433             if( g_arenaservers.numqueriedservers < 0 ) {
00434                 strcpy(g_arenaservers.status.string,"No Response From Master Server." );
00435             }
00436             else {
00437                 strcpy(g_arenaservers.status.string,"No Servers Found." );
00438             }
00439 
00440             // update status bar
00441             if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) {
00442                 g_arenaservers.statusbar.string = quake3worldMessage;
00443             }
00444             else {
00445                 g_arenaservers.statusbar.string = "";
00446             }
00447 
00448             // end of refresh - set control state
00449             g_arenaservers.master.generic.flags     &= ~QMF_GRAYED;
00450             g_arenaservers.gametype.generic.flags   &= ~QMF_GRAYED;
00451             g_arenaservers.sortkey.generic.flags    &= ~QMF_GRAYED;
00452             g_arenaservers.showempty.generic.flags  &= ~QMF_GRAYED;
00453             g_arenaservers.showfull.generic.flags   &= ~QMF_GRAYED;
00454             g_arenaservers.list.generic.flags       |= QMF_GRAYED;
00455             g_arenaservers.refresh.generic.flags    &= ~QMF_GRAYED;
00456             g_arenaservers.go.generic.flags         |= QMF_GRAYED;
00457             g_arenaservers.punkbuster.generic.flags &= ~QMF_GRAYED;
00458         }
00459 
00460         // zero out list box
00461         g_arenaservers.list.numitems = 0;
00462         g_arenaservers.list.curvalue = 0;
00463         g_arenaservers.list.top      = 0;
00464 
00465         // update picture
00466         ArenaServers_UpdatePicture();
00467         return;
00468     }
00469 
00470     // build list box strings - apply culling filters
00471     servernodeptr = g_arenaservers.serverlist;
00472     count         = *g_arenaservers.numservers;
00473     for( i = 0, j = 0; i < count; i++, servernodeptr++ ) {
00474         tableptr = &g_arenaservers.table[j];
00475         tableptr->servernode = servernodeptr;
00476         buff = tableptr->buff;
00477 
00478         // can only cull valid results
00479         if( !g_emptyservers && !servernodeptr->numclients ) {
00480             continue;
00481         }
00482 
00483         if( !g_fullservers && ( servernodeptr->numclients == servernodeptr->maxclients ) ) {
00484             continue;
00485         }
00486 
00487         switch( g_gametype ) {
00488         case GAMES_ALL:
00489             break;
00490 
00491         case GAMES_FFA:
00492             if( servernodeptr->gametype != GT_FFA ) {
00493                 continue;
00494             }
00495             break;
00496 
00497         case GAMES_TEAMPLAY:
00498             if( servernodeptr->gametype != GT_TEAM ) {
00499                 continue;
00500             }
00501             break;
00502 
00503         case GAMES_TOURNEY:
00504             if( servernodeptr->gametype != GT_TOURNAMENT ) {
00505                 continue;
00506             }
00507             break;
00508 
00509         case GAMES_CTF:
00510             if( servernodeptr->gametype != GT_CTF ) {
00511                 continue;
00512             }
00513             break;
00514         }
00515 
00516         if( servernodeptr->pingtime < servernodeptr->minPing ) {
00517             pingColor = S_COLOR_BLUE;
00518         }
00519         else if( servernodeptr->maxPing && servernodeptr->pingtime > servernodeptr->maxPing ) {
00520             pingColor = S_COLOR_BLUE;
00521         }
00522         else if( servernodeptr->pingtime < 200 ) {
00523             pingColor = S_COLOR_GREEN;
00524         }
00525         else if( servernodeptr->pingtime < 400 ) {
00526             pingColor = S_COLOR_YELLOW;
00527         }
00528         else {
00529             pingColor = S_COLOR_RED;
00530         }
00531 
00532         Com_sprintf( buff, MAX_LISTBOXWIDTH, "%-20.20s %-12.12s %2d/%2d %-8.8s %3s %s%3d " S_COLOR_YELLOW "%s", 
00533             servernodeptr->hostname, servernodeptr->mapname, servernodeptr->numclients,
00534             servernodeptr->maxclients, servernodeptr->gamename,
00535             netnames[servernodeptr->nettype], pingColor, servernodeptr->pingtime, servernodeptr->bPB ? "Yes" : "No" );
00536         j++;
00537     }
00538 
00539     g_arenaservers.list.numitems = j;
00540     g_arenaservers.list.curvalue = 0;
00541     g_arenaservers.list.top      = 0;
00542 
00543     // update picture
00544     ArenaServers_UpdatePicture();
00545 }

Here is the call graph for this function:

void ArenaServers_UpdatePicture void   )  [static]
 

Definition at line 352 of file ui_servers2.c.

References Com_sprintf(), menulist_s::curvalue, g_arenaservers, menubitmap_s::generic, arenaservers_t::list, servernode_s::mapname, arenaservers_t::mappic, menucommon_s::name, menulist_s::numitems, table_t::servernode, servernode_t, menubitmap_s::shader, and arenaservers_t::table.

Referenced by ArenaServers_Event(), and ArenaServers_UpdateMenu().

00352                                                {
00353     static char     picname[64];
00354     servernode_t*   servernodeptr;
00355 
00356     if( !g_arenaservers.list.numitems ) {
00357         g_arenaservers.mappic.generic.name = NULL;
00358     }
00359     else {
00360         servernodeptr = g_arenaservers.table[g_arenaservers.list.curvalue].servernode;
00361         Com_sprintf( picname, sizeof(picname), "levelshots/%s.tga", servernodeptr->mapname );
00362         g_arenaservers.mappic.generic.name = picname;
00363     
00364     }
00365 
00366     // force shader update during draw
00367     g_arenaservers.mappic.shader = 0;
00368 }

Here is the call graph for this function:

void Punkbuster_ConfirmDisable qboolean  result  )  [static]
 

Definition at line 1165 of file ui_servers2.c.

References Com_Clamp(), menulist_s::curvalue, g_arenaservers, arenaservers_t::punkbuster, punkbuster_msg, trap_Cvar_VariableValue(), trap_SetPbClStatus(), and UI_Message().

Referenced by ArenaServers_Event().

01165                                                          {
01166     if (result)
01167     {
01168         trap_SetPbClStatus(0);
01169         UI_Message( punkbuster_msg );
01170     }
01171     g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, trap_Cvar_VariableValue( "cl_punkbuster" ) );
01172 }

Here is the call graph for this function:

void Punkbuster_ConfirmEnable qboolean  result  )  [static]
 

Definition at line 1157 of file ui_servers2.c.

References Com_Clamp(), menulist_s::curvalue, g_arenaservers, arenaservers_t::punkbuster, trap_Cvar_VariableValue(), and trap_SetPbClStatus().

Referenced by ArenaServers_Event().

01157                                                         {
01158     if (result)
01159     {       
01160         trap_SetPbClStatus(1);
01161     }
01162     g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, trap_Cvar_VariableValue( "cl_punkbuster" ) );
01163 }

Here is the call graph for this function:

void UI_ArenaServersMenu void   ) 
 

Definition at line 1637 of file ui_servers2.c.

References ArenaServers_MenuInit(), g_arenaservers, arenaservers_t::menu, and UI_PushMenu().

01637                                  {
01638     ArenaServers_MenuInit();
01639     UI_PushMenu( &g_arenaservers.menu );
01640 }                         

Here is the call graph for this function:


Variable Documentation

arenaservers_t g_arenaservers [static]
 

Definition at line 235 of file ui_servers2.c.

Referenced by ArenaServers_DoRefresh(), ArenaServers_Event(), ArenaServers_Go(), ArenaServers_Insert(), ArenaServers_InsertFavorites(), ArenaServers_LoadFavorites(), ArenaServers_MenuDraw(), ArenaServers_MenuInit(), ArenaServers_MenuKey(), ArenaServers_Remove(), ArenaServers_SaveChanges(), ArenaServers_SetType(), ArenaServers_Sort(), ArenaServers_StartRefresh(), ArenaServers_StopRefresh(), ArenaServers_UpdateMenu(), ArenaServers_UpdatePicture(), Punkbuster_ConfirmDisable(), Punkbuster_ConfirmEnable(), and UI_ArenaServersMenu().

int g_emptyservers [static]
 

Definition at line 249 of file ui_servers2.c.

Referenced by ArenaServers_Event(), ArenaServers_MenuInit(), and ArenaServers_UpdateMenu().

servernode_t g_favoriteserverlist[MAX_FAVORITESERVERS] [static]
 

Definition at line 242 of file ui_servers2.c.

Referenced by ArenaServers_InsertFavorites(), ArenaServers_LoadFavorites(), and ArenaServers_Remove().

int g_fullservers [static]
 

Definition at line 250 of file ui_servers2.c.

Referenced by ArenaServers_Event(), ArenaServers_MenuInit(), and ArenaServers_UpdateMenu().

int g_gametype [static]
 

Definition at line 247 of file ui_servers2.c.

servernode_t g_globalserverlist[MAX_GLOBALSERVERS] [static]
 

Definition at line 238 of file ui_servers2.c.

servernode_t g_localserverlist[MAX_LOCALSERVERS] [static]
 

Definition at line 240 of file ui_servers2.c.

servernode_t g_mplayerserverlist[MAX_GLOBALSERVERS] [static]
 

Definition at line 244 of file ui_servers2.c.

int g_numfavoriteservers [static]
 

Definition at line 243 of file ui_servers2.c.

Referenced by ArenaServers_LoadFavorites(), and ArenaServers_Remove().

int g_numglobalservers [static]
 

Definition at line 239 of file ui_servers2.c.

int g_numlocalservers [static]
 

Definition at line 241 of file ui_servers2.c.

int g_nummplayerservers [static]
 

Definition at line 245 of file ui_servers2.c.

int g_servertype [static]
 

Definition at line 246 of file ui_servers2.c.

Referenced by ArenaServers_DoRefresh(), ArenaServers_Insert(), ArenaServers_MenuInit(), ArenaServers_MenuKey(), ArenaServers_SetType(), ArenaServers_StartRefresh(), ArenaServers_StopRefresh(), and ArenaServers_UpdateMenu().

int g_sortkey [static]
 

Definition at line 248 of file ui_servers2.c.

Referenced by ArenaServers_MenuInit(), and ArenaServers_Sort().

char* gamenames[] [static]
 

Initial value:

 {
    "DM ",  
    "1v1",  
    "SP ",  
    "Team DM",  
    "CTF",  
    "One Flag CTF",     
    "OverLoad",             
    "Harvester",            
    "Rocket Arena 3",   
    "Q3F",                      
    "Urban Terror",     
    "OSP",                      
    "???",          
    0
}

Definition at line 125 of file ui_servers2.c.

Referenced by ArenaServers_Insert().

const char* master_items[] [static]
 

Initial value:

 {
    "Local",
    "Internet",
    "Favorites",
    0
}

Definition at line 100 of file ui_servers2.c.

char* netnames[] [static]
 

Initial value:

 {
    "???",
    "UDP",
    "IPX",
    NULL
}

Definition at line 142 of file ui_servers2.c.

Referenced by ArenaServers_UpdateMenu().

const char* punkbuster_items[]
 

Initial value:

 {
    "Disabled",
    "Enabled",
    NULL
}

Definition at line 151 of file ui_servers2.c.

const char* punkbuster_msg[]
 

Initial value:

 {
    "PunkBuster will be",
    "disabled the next time",
    "Quake III Arena",
    "is started.",
    NULL
}

Definition at line 157 of file ui_servers2.c.

Referenced by Punkbuster_ConfirmDisable().

char quake3worldMessage[] = "Visit www.quake3world.com - News, Community, Events, Files" [static]
 

Definition at line 149 of file ui_servers2.c.

const char* servertype_items[] [static]
 

Initial value:

 {
    "All",
    "Free For All",
    "Team Deathmatch",
    "Tournament",
    "Capture the Flag",
    0
}

Definition at line 107 of file ui_servers2.c.

const char* sortkey_items[] [static]
 

Initial value:

 {
    "Server Name",
    "Map Name",
    "Open Player Spots",
    "Game Type",
    "Ping Time",
    0
}

Definition at line 116 of file ui_servers2.c.


Generated on Thu Aug 25 14:34:30 2005 for Quake III Arena by  doxygen 1.3.9.1