| 953 | static bool pinglastselected = false; |
| 954 | |
| 955 | void refreshservers(void *menu, bool init) |
| 956 | { |
| 957 | static int servermenumillis; |
| 958 | static bool usedselect = false; |
| 959 | static string title; |
| 960 | bool issearch = menu == searchmenu; |
| 961 | bool isinfo = menu == serverinfomenu; |
| 962 | bool isscoreboard = menu == NULL; |
| 963 | |
| 964 | serverinfo *curserver = getconnectedserverinfo(), *oldsel = NULL; |
| 965 | if(init) |
| 966 | { |
| 967 | loopi(PINGBUFSIZE) if(pingbuf[i] < totalmillis) pingbuf[i] = 0; |
| 968 | if(resolverthreads.empty()) resolverinit(); |
| 969 | else resolverclear(); |
| 970 | loopv(servers) resolverquery(servers[i]->name); |
| 971 | servermenumillis = totalmillis; |
| 972 | usedselect = false; |
| 973 | if(menu && curserver) oldsel = curserver; |
| 974 | } |
| 975 | |
| 976 | checkresolver(); |
| 977 | checkpings(); |
| 978 | if(isinfo) |
| 979 | { |
| 980 | if(lastselectedserver) |
| 981 | { |
| 982 | bool found = false; |
| 983 | loopv(servers) if(lastselectedserver == servers[i]) { found = true; break; } |
| 984 | if(!found) lastselectedserver = NULL; |
| 985 | } |
| 986 | menureset(menu); |
| 987 | static string infotext; |
| 988 | static char dummy = '\0'; |
| 989 | if(lastselectedserver) |
| 990 | { |
| 991 | serverinfo &si = *lastselectedserver; |
| 992 | formatstring(si.full)("%s:%d %s", si.name, si.port, si.sdesc); |
| 993 | menuitemmanual(menu, si.full); |
| 994 | menuitemmanual(menu, &dummy); |
| 995 | if(si.infotexts.length() && !pinglastselected) |
| 996 | { |
| 997 | infotext[0] = '\0'; |
| 998 | loopv(si.infotexts) menuimagemanual(menu, NULL, "bargraphs", si.infotexts[i]); |
| 999 | } |
| 1000 | else |
| 1001 | { |
| 1002 | copystring(infotext, "-- waiting for server response --"); |
| 1003 | if(si.getinfo == EXTPING_NOP) si.getinfo = EXTPING_SERVERINFO; |
| 1004 | if(init || pinglastselected || totalmillis - lastinfo >= servpingrate) pingservers(false, lastselectedserver); |
| 1005 | pinglastselected = false; |
| 1006 | } |
| 1007 | } |
| 1008 | else |
| 1009 | copystring(infotext, " -- no server selected --"); |
| 1010 | if(*infotext) menuitemmanual(menu, infotext); |
| 1011 | return; |
| 1012 | } |
no test coverage detected