Files
@ r28025:9116d6e411b0
Branch filter:
Location: cpp/openttd-patchpack/source/src/network/network_gamelist.cpp - annotation
r28025:9116d6e411b0
4.3 KiB
text/x-c
Codechange: replace x.size() == 0 with x.empty()
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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r5584:545d748cc681 r5584:545d748cc681 r17279:76addfee8711 r9428:6800206a6c0d r5897:753985117bdb r5917:d8ebeb21f83f r23588:660d91a03749 r5917:d8ebeb21f83f r21383:942c32fb8b0e r21383:942c32fb8b0e r25799:67f31839e848 r25799:67f31839e848 r5897:753985117bdb r15610:623a23fb6560 r15610:623a23fb6560 r5584:545d748cc681 r25813:ea6d38b6c3a1 r15613:193c12018337 r15613:193c12018337 r25388:32b23efdcf4e r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r25388:32b23efdcf4e r25813:ea6d38b6c3a1 r25388:32b23efdcf4e r23607:36c15679007d r23607:36c15679007d r25388:32b23efdcf4e r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r25390:7b2cc712ea32 r25921:d8ed0ebc701e r25799:67f31839e848 r5584:545d748cc681 r23607:36c15679007d r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r19182:8f0b5a1acb1c r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r15610:623a23fb6560 r15610:623a23fb6560 r15613:193c12018337 r15613:193c12018337 r5584:545d748cc681 r5584:545d748cc681 r23607:36c15679007d r23607:36c15679007d r5584:545d748cc681 r23607:36c15679007d r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r25390:7b2cc712ea32 r5584:545d748cc681 r12533:86f2de494688 r19182:8f0b5a1acb1c r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r5584:545d748cc681 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r25799:67f31839e848 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r23607:36c15679007d r19821:021f5f9159cc r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r23607:36c15679007d r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r27391:048886674223 r23607:36c15679007d r25835:469091d3b5ce r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r19821:021f5f9159cc r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r17403:bbaee031fd60 r17403:bbaee031fd60 r17403:bbaee031fd60 r17403:bbaee031fd60 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r13054:319ef5c8a6c7 r17279:76addfee8711 r17279:76addfee8711 r13054:319ef5c8a6c7 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file network_gamelist.cpp This file handles the GameList
* Also, it handles the request to a server for data about the server
*/
#include "../stdafx.h"
#include "../debug.h"
#include "../window_func.h"
#include "network_internal.h"
#include "network_udp.h"
#include "network_gamelist.h"
#include <atomic>
#include "../safeguards.h"
NetworkGameList *_network_game_list = nullptr; ///< Game list of this client.
int _network_game_list_version = 0; ///< Current version of all items in the list.
/**
* Add a new item to the linked gamelist. If the IP and Port match
* return the existing item instead of adding it again
* @param connection_string the address of the to-be added item
* @return a point to the newly added or already existing item
*/
NetworkGameList *NetworkGameListAddItem(const std::string &connection_string)
{
NetworkGameList *item, *prev_item;
/* Parse the connection string to ensure the default port is there. */
const std::string resolved_connection_string = ServerAddress::Parse(connection_string, NETWORK_DEFAULT_PORT).connection_string;
prev_item = nullptr;
for (item = _network_game_list; item != nullptr; item = item->next) {
if (item->connection_string == resolved_connection_string) return item;
prev_item = item;
}
item = new NetworkGameList(resolved_connection_string);
item->info.gamescript_version = -1;
item->version = _network_game_list_version;
if (prev_item == nullptr) {
_network_game_list = item;
} else {
prev_item->next = item;
}
UpdateNetworkGameWindow();
return item;
}
/**
* Remove an item from the gamelist linked list
* @param remove pointer to the item to be removed
*/
void NetworkGameListRemoveItem(NetworkGameList *remove)
{
NetworkGameList *prev_item = nullptr;
for (NetworkGameList *item = _network_game_list; item != nullptr; item = item->next) {
if (remove == item) {
if (prev_item == nullptr) {
_network_game_list = remove->next;
} else {
prev_item->next = remove->next;
}
/* Remove GRFConfig information */
ClearGRFConfigList(&remove->info.grfconfig);
delete remove;
NetworkRebuildHostList();
UpdateNetworkGameWindow();
return;
}
prev_item = item;
}
}
/**
* Remove all servers that have not recently been updated.
* Call this after you received all the servers from the Game Coordinator, so
* the ones that are no longer listed are removed.
*/
void NetworkGameListRemoveExpired()
{
NetworkGameList **prev_item = &_network_game_list;
for (NetworkGameList *item = _network_game_list; item != nullptr;) {
if (!item->manually && item->version < _network_game_list_version) {
NetworkGameList *remove = item;
item = item->next;
*prev_item = item;
/* Remove GRFConfig information */
ClearGRFConfigList(&remove->info.grfconfig);
delete remove;
} else {
prev_item = &item->next;
item = item->next;
}
}
UpdateNetworkGameWindow();
}
/**
* Rebuild the GRFConfig's of the servers in the game list as we did
* a rescan and might have found new NewGRFs.
*/
void NetworkAfterNewGRFScan()
{
for (NetworkGameList *item = _network_game_list; item != nullptr; item = item->next) {
/* Reset compatibility state */
item->info.compatible = item->info.version_compatible;
for (GRFConfig *c = item->info.grfconfig; c != nullptr; c = c->next) {
assert(HasBit(c->flags, GCF_COPY));
const GRFConfig *f = FindGRFConfig(c->ident.grfid, FGCM_EXACT, &c->ident.md5sum);
if (f == nullptr) {
/* Don't know the GRF (anymore), so mark game incompatible. */
c->status = GCS_NOT_FOUND;
/* If we miss a file, we're obviously incompatible. */
item->info.compatible = false;
} else {
c->filename = f->filename;
c->name = f->name;
c->info = f->info;
c->status = GCS_UNKNOWN;
}
}
}
InvalidateWindowClassesData(WC_NETWORK_WINDOW);
}
|