MCPcopy Create free account
hub / github.com/assaultcube/AC / pingservers

Function pingservers

source/src/serverbrowser.cpp:342–408  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

340}
341
342void pingservers(bool issearch, serverinfo *onlyconnected)
343{
344 if(pingsock == ENET_SOCKET_NULL)
345 {
346 pingsock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM);
347 if(pingsock == ENET_SOCKET_NULL)
348 {
349 lastinfo = totalmillis;
350 return;
351 }
352 enet_socket_set_option(pingsock, ENET_SOCKOPT_NONBLOCK, 1);
353 enet_socket_set_option(pingsock, ENET_SOCKOPT_BROADCAST, 1);
354 }
355 ENetBuffer buf;
356 static uchar ping[MAXTRANS];
357 ucharbuf p(ping, sizeof(ping));
358 curpingbuf = (curpingbuf + 1) % PINGBUFSIZE;
359 pingbuf[(curpingbuf + PINGBUFSIZE / 2) % PINGBUFSIZE] = 0;
360 pingbuf[curpingbuf] = onlyconnected ? 0 : totalmillis;
361 putint(p, curpingbuf + 1); // offset by 1 to avoid extinfo trigger
362 int baselen = p.length();
363 if(onlyconnected)
364 {
365 serverinfo *si = onlyconnected;
366 //p.len = baselen;
367 if(si->getinfo == EXTPING_SERVERINFO)
368 {
369 putint(p, EXTPING_SERVERINFO);
370 const char *silang;
371 if(strlen(lang) != 2) silang = "en";
372 else silang = lang;
373 loopi(2) putint(p, silang[i]);
374 }
375 else putint(p, issearch ? EXTPING_NAMELIST : chooseextping(si));
376 buf.data = ping;
377 buf.dataLength = p.length();
378 enet_socket_send(pingsock, &si->address, &buf, 1);
379 }
380 else if(searchlan < 2)
381 {
382 static int lastping = 0;
383 if(lastping >= servers.length()) lastping = 0;
384 loopi(maxservpings ? min(servers.length(), maxservpings) : servers.length())
385 {
386 serverinfo &si = *servers[lastping];
387 if(++lastping >= servers.length()) lastping = 0;
388 if(si.address.host == ENET_HOST_ANY) continue;
389 p.len = baselen;
390 putint(p, issearch ? EXTPING_NAMELIST : chooseextping(&si));
391 buf.data = ping;
392 buf.dataLength = p.length();
393 enet_socket_send(pingsock, &si.address, &buf, 1);
394 }
395 }
396 if(searchlan && !onlyconnected)
397 {
398 ENetAddress address;
399 address.host = ENET_HOST_BROADCAST;

Callers 1

refreshserversFunction · 0.85

Calls 8

putintFunction · 0.85
chooseextpingFunction · 0.85
minFunction · 0.85
loopiFunction · 0.70
enet_socket_createFunction · 0.50
enet_socket_set_optionFunction · 0.50
enet_socket_sendFunction · 0.50
lengthMethod · 0.45

Tested by

no test coverage detected