/** * @brief */ static void Ms_Frame(void) { const time_t now = time(NULL); GList *s = ms_servers; while (s) { ms_server_t *server = (ms_server_t *) s->data; if (now - server->last_heartbeat > 30) { if (server->queued_pings > 6) { Com_Print("Server %s timed out\n", stos(server)); Ms_DropServer(server); } else { if (now - server->last_ping >= 10) { server->queued_pings++; server->last_ping = now; Com_Verbose("Pinging %s\n", stos(server)); const char *ping = "\xFF\xFF\xFF\xFF" "ping"; sendto(ms_sock, ping, strlen(ping), 0, (struct sockaddr *) &server->addr, sizeof(server->addr)); } } } s = s->next; } }
/** * @brief Removes the specified server. */ static void Ms_RemoveServer(struct sockaddr_in *from) { ms_server_t *server = Ms_GetServer(from); if (!server) { Com_Warn("Shutdown from unregistered server %s\n", atos(from)); return; } Com_Print("Shutdown from %s\n", stos(server)); Ms_DropServer(server); }
/* * @brief Removes the specified server. */ static void Ms_RemoveServer(struct sockaddr_in *from, ms_server_t *server) { if (!server) // resolve from address server = Ms_GetServer(from); if (!server) { Com_Print("Shutdown from unregistered server %s\n", inet_ntoa(from->sin_addr)); return; } Com_Print("Shutdown from %s\n", inet_ntoa(from->sin_addr)); Ms_DropServer(server); }
/* * @brief */ static void Ms_RunFrame(void) { time_t curtime = time(0); GList *s = ms_servers; while (s) { ms_server_t *server = (ms_server_t *) s->data; if (curtime - server->last_heartbeat > 30) { if (server->queued_pings > 6) { Com_Print("Server %s timed out.\n", inet_ntoa(server->ip.sin_addr)); s = s->next; Ms_DropServer(server); continue; } if (curtime - server->last_ping >= 10) { struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_addr = server->ip.sin_addr; addr.sin_family = AF_INET; addr.sin_port = server->port; server->queued_pings++; server->last_ping = curtime; Com_Print("Pinging %s\n", inet_ntoa(server->ip.sin_addr)); const char *msg = "\xFF\xFF\xFF\xFF" "ping"; sendto(ms_sock, msg, strlen(msg), 0, (struct sockaddr *) &addr, sizeof(addr)); } } s = s->next; } }