mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-16 00:12:51 +00:00
111 lines
2.2 KiB
C
111 lines
2.2 KiB
C
#include "stdafx.h"
|
|
#include "network_data.h"
|
|
|
|
#ifdef ENABLE_NETWORK
|
|
|
|
//
|
|
// This file handles the GameList
|
|
// Also, it handles the request to a server for data about the server
|
|
|
|
extern void UpdateNetworkGameWindow(bool unselect);
|
|
|
|
void NetworkGameListClear(void)
|
|
{
|
|
NetworkGameList *item;
|
|
NetworkGameList *next;
|
|
|
|
item = _network_game_list;
|
|
|
|
while (item != NULL) {
|
|
next = item->next;
|
|
free(item);
|
|
item = next;
|
|
}
|
|
_network_game_list = NULL;
|
|
_network_game_count = 0;
|
|
|
|
UpdateNetworkGameWindow(true);
|
|
|
|
DEBUG(net, 4)("[NET][GameList] Cleared list");
|
|
}
|
|
|
|
NetworkGameList *NetworkGameListAddItem(uint32 ip, uint16 port)
|
|
{
|
|
NetworkGameList *item;
|
|
|
|
item = _network_game_list;
|
|
if (item != NULL) {
|
|
while (item->next != NULL) {
|
|
if (item->ip == ip && item->port == port)
|
|
return item;
|
|
item = item->next;
|
|
}
|
|
|
|
if (item->ip == ip && item->port == port)
|
|
return item;
|
|
|
|
item->next = malloc(sizeof(*item));
|
|
item = item->next;
|
|
} else {
|
|
item = malloc(sizeof(*item));
|
|
_network_game_list = item;
|
|
}
|
|
|
|
DEBUG(net, 4) ("[NET][GameList] Added server to list");
|
|
|
|
memset(item, 0, sizeof(*item));
|
|
|
|
item->next = NULL;
|
|
item->ip = ip;
|
|
item->port = port;
|
|
_network_game_count++;
|
|
|
|
UpdateNetworkGameWindow(false);
|
|
|
|
return item;
|
|
}
|
|
|
|
void NetworkGameListRemoveItem(NetworkGameList *remove)
|
|
{
|
|
NetworkGameList *item;
|
|
|
|
item = _network_game_list;
|
|
|
|
// examine head of the list
|
|
if ( remove == _network_game_list ) {
|
|
_network_game_list = remove->next;
|
|
free(remove);
|
|
DEBUG(net, 4) ("[NET][GameList] Removed server from list");
|
|
return;
|
|
}
|
|
|
|
// examine each item
|
|
while ( item->next != NULL ) {
|
|
if ( item->next == remove )
|
|
{
|
|
item->next = remove->next;
|
|
free(remove);
|
|
DEBUG(net, 4) ("[NET][GameList] Removed server from list");
|
|
return;
|
|
}
|
|
item = item->next;
|
|
}
|
|
}
|
|
|
|
void NetworkGameListAddQueriedItem(const NetworkGameInfo *info, bool server_online)
|
|
{
|
|
// We queried a server and now we are going to add it to the list
|
|
NetworkGameList *item;
|
|
|
|
item = NetworkGameListAddItem(_network_last_host_ip, _network_last_port);
|
|
item->online = server_online;
|
|
memcpy(&item->info, info, sizeof(NetworkGameInfo));
|
|
ttd_strlcpy(item->info.hostname, _network_last_host, sizeof(item->info.hostname));
|
|
|
|
UpdateNetworkGameWindow(false);
|
|
}
|
|
|
|
#endif /* ENABLE_NETWORK */
|
|
|
|
|