mirror of
https://github.com/Detanup01/gbe_fork.git
synced 2025-03-28 14:56:24 +01:00
grab players list for Steam_Matchmaking_Servers from Steam_GameServers , probably broken!
This commit is contained in:
parent
8393261473
commit
6a7bd6c063
3 changed files with 25 additions and 19 deletions
|
@ -300,7 +300,7 @@ static int send_packet_to(sock_t sock, IP_PORT ip_port, char *data, unsigned lon
|
||||||
|
|
||||||
static int receive_packet(sock_t sock, IP_PORT *ip_port, char *data, unsigned long max_length)
|
static int receive_packet(sock_t sock, IP_PORT *ip_port, char *data, unsigned long max_length)
|
||||||
{
|
{
|
||||||
struct sockaddr_storage addr;
|
struct sockaddr_storage addr{};
|
||||||
#if defined(STEAM_WIN32)
|
#if defined(STEAM_WIN32)
|
||||||
int addrlen = sizeof(addr);
|
int addrlen = sizeof(addr);
|
||||||
#else
|
#else
|
||||||
|
@ -943,22 +943,24 @@ void Networking::Run()
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (query_alive && is_socket_valid(query_socket)) {
|
if (query_alive && is_socket_valid(query_socket)) {
|
||||||
PRINT_DEBUG("RECV QUERY\n");
|
PRINT_DEBUG("Networking::Run RECV Source Query\n");
|
||||||
Steam_Client* client = get_steam_client();
|
Steam_Client* client = get_steam_client();
|
||||||
sockaddr_in addr;
|
sockaddr_in addr;
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
|
|
||||||
while ((len = receive_packet(query_socket, &ip_port, data, sizeof(data))) >= 0) {
|
while ((len = receive_packet(query_socket, &ip_port, data, sizeof(data))) >= 0) {
|
||||||
|
PRINT_DEBUG("Networking::Run requesting Source Query server info from Steam_GameServer\n");
|
||||||
client->steam_gameserver->HandleIncomingPacket(data, len, htonl(ip_port.ip), htons(ip_port.port));
|
client->steam_gameserver->HandleIncomingPacket(data, len, htonl(ip_port.ip), htons(ip_port.port));
|
||||||
len = client->steam_gameserver->GetNextOutgoingPacket(data, sizeof(data), &ip_port.ip, &ip_port.port);
|
len = client->steam_gameserver->GetNextOutgoingPacket(data, sizeof(data), &ip_port.ip, &ip_port.port);
|
||||||
|
|
||||||
|
PRINT_DEBUG("Networking::Run sending Source Query server info\n");
|
||||||
addr.sin_addr.s_addr = htonl(ip_port.ip);
|
addr.sin_addr.s_addr = htonl(ip_port.ip);
|
||||||
addr.sin_port = htons(ip_port.port);
|
addr.sin_port = htons(ip_port.port);
|
||||||
sendto(query_socket, data, len, 0, (sockaddr*)&addr, sizeof(addr));
|
sendto(query_socket, data, len, 0, (sockaddr*)&addr, sizeof(addr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PRINT_DEBUG("RECV UDP\n");
|
PRINT_DEBUG("Networking::Run RECV UDP\n");
|
||||||
while((len = receive_packet(udp_socket, &ip_port, data, sizeof(data))) >= 0) {
|
while((len = receive_packet(udp_socket, &ip_port, data, sizeof(data))) >= 0) {
|
||||||
PRINT_DEBUG("recv %i %hhu.%hhu.%hhu.%hhu:%hu\n", len, ((unsigned char *)&ip_port.ip)[0], ((unsigned char *)&ip_port.ip)[1], ((unsigned char *)&ip_port.ip)[2], ((unsigned char *)&ip_port.ip)[3], htons(ip_port.port));
|
PRINT_DEBUG("recv %i %hhu.%hhu.%hhu.%hhu:%hu\n", len, ((unsigned char *)&ip_port.ip)[0], ((unsigned char *)&ip_port.ip)[1], ((unsigned char *)&ip_port.ip)[2], ((unsigned char *)&ip_port.ip)[3], htons(ip_port.port));
|
||||||
Common_Message msg;
|
Common_Message msg;
|
||||||
|
@ -981,7 +983,7 @@ void Networking::Run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PRINT_DEBUG("RECV LOCAL\n");
|
PRINT_DEBUG("Networking::Run RECV LOCAL\n");
|
||||||
std::vector<Common_Message> local_send_copy = local_send;
|
std::vector<Common_Message> local_send_copy = local_send;
|
||||||
local_send.clear();
|
local_send.clear();
|
||||||
|
|
||||||
|
@ -1346,7 +1348,7 @@ void Networking::startQuery(IP_PORT ip_port)
|
||||||
}
|
}
|
||||||
retry = 0;
|
retry = 0;
|
||||||
|
|
||||||
sockaddr_in addr;
|
sockaddr_in addr{};
|
||||||
addr.sin_addr.s_addr = htonl(ip_port.ip);
|
addr.sin_addr.s_addr = htonl(ip_port.ip);
|
||||||
addr.sin_port = htons(ip_port.port);
|
addr.sin_port = htons(ip_port.port);
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
|
@ -1369,7 +1371,7 @@ void Networking::startQuery(IP_PORT ip_port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char str_ip[16];
|
char str_ip[16]{};
|
||||||
inet_ntop(AF_INET, &(addr.sin_addr), str_ip, 16);
|
inet_ntop(AF_INET, &(addr.sin_addr), str_ip, 16);
|
||||||
|
|
||||||
PRINT_DEBUG("Started query server on %s:%d\n", str_ip, htons(addr.sin_port));
|
PRINT_DEBUG("Started query server on %s:%d\n", str_ip, htons(addr.sin_port));
|
||||||
|
|
|
@ -152,12 +152,12 @@ std::vector<uint8_t> Source_Query::handle_source_query(const void* buffer, size_
|
||||||
source_query_data const& query = *reinterpret_cast<source_query_data const*>(buffer);
|
source_query_data const& query = *reinterpret_cast<source_query_data const*>(buffer);
|
||||||
|
|
||||||
// || gs.max_player_count() == 0
|
// || gs.max_player_count() == 0
|
||||||
if (gs.offline() || query.magic != source_query_magic::simple)
|
if (gs.offline() || query.magic != source_query_magic::simple) return output_buffer;
|
||||||
return output_buffer;
|
|
||||||
|
|
||||||
switch (query.header)
|
switch (query.header)
|
||||||
{
|
{
|
||||||
case source_query_header::A2S_INFO:
|
case source_query_header::A2S_INFO:
|
||||||
|
PRINT_DEBUG("Source_Query::handle_source_query got request for server info\n");
|
||||||
if (len >= a2s_query_info_size && !strncmp(query.a2s_info_payload, a2s_info_payload, a2s_info_payload_size))
|
if (len >= a2s_query_info_size && !strncmp(query.a2s_info_payload, a2s_info_payload, a2s_info_payload_size))
|
||||||
{
|
{
|
||||||
std::vector<std::pair<CSteamID, Gameserver_Player_Info_t>> const& players = *get_steam_client()->steam_gameserver->get_players();
|
std::vector<std::pair<CSteamID, Gameserver_Player_Info_t>> const& players = *get_steam_client()->steam_gameserver->get_players();
|
||||||
|
@ -213,6 +213,7 @@ std::vector<uint8_t> Source_Query::handle_source_query(const void* buffer, size_
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case source_query_header::A2S_PLAYER:
|
case source_query_header::A2S_PLAYER:
|
||||||
|
PRINT_DEBUG("Source_Query::handle_source_query got request for player info\n");
|
||||||
if (len >= a2s_query_challenge_size)
|
if (len >= a2s_query_challenge_size)
|
||||||
{
|
{
|
||||||
if (query.challenge == 0xFFFFFFFFul)
|
if (query.challenge == 0xFFFFFFFFul)
|
||||||
|
@ -240,6 +241,7 @@ std::vector<uint8_t> Source_Query::handle_source_query(const void* buffer, size_
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case source_query_header::A2S_RULES:
|
case source_query_header::A2S_RULES:
|
||||||
|
PRINT_DEBUG("Source_Query::handle_source_query got request for rules info\n");
|
||||||
if (len >= a2s_query_challenge_size)
|
if (len >= a2s_query_challenge_size)
|
||||||
{
|
{
|
||||||
if (query.challenge == 0xFFFFFFFFul)
|
if (query.challenge == 0xFFFFFFFFul)
|
||||||
|
@ -262,6 +264,10 @@ std::vector<uint8_t> Source_Query::handle_source_query(const void* buffer, size_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
PRINT_DEBUG("Source_Query::handle_source_query got unknown request\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return output_buffer;
|
return output_buffer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
License along with the Goldberg Emulator; if not, see
|
License along with the Goldberg Emulator; if not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#include "dll/steam_matchmaking_servers.h"
|
#include "dll/dll.h"
|
||||||
|
|
||||||
|
|
||||||
static void network_callback(void *object, Common_Message *msg)
|
static void network_callback(void *object, Common_Message *msg)
|
||||||
|
@ -652,16 +652,14 @@ void Steam_Matchmaking_Servers::RunCallbacks()
|
||||||
|
|
||||||
if (r.players_response) {
|
if (r.players_response) {
|
||||||
uint32_t number_players = g.server.num_players();
|
uint32_t number_players = g.server.num_players();
|
||||||
PRINT_DEBUG("Steam_Matchmaking_Servers players: %i\n", number_players);
|
PRINT_DEBUG("Steam_Matchmaking_Servers players: %u\n", number_players);
|
||||||
// const auto &players = get_steam_client()->steam_gameserver->get_players();
|
const auto &players = get_steam_client()->steam_gameserver->get_players();
|
||||||
// auto &player = players->begin();
|
auto &player = players->cbegin();
|
||||||
|
for (int i = 0; i < number_players && player != players->end(); ++i, ++player) {
|
||||||
// for (int i = 0; i < number_players && i < players->size(); i++) {
|
float playtime = static_cast<float>(std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - player->second.join_time).count());
|
||||||
// float playtime = static_cast<float>(std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - player->second.join_time).count());
|
PRINT_DEBUG("Steam_Matchmaking_Servers PLAYER [%u] '%s' %u %f\n", i, player->second.name.c_str(), player->second.score, playtime);
|
||||||
// PRINT_DEBUG("Steam_Matchmaking_Servers PLAYER [%u] '%s' %u %f\n", i, player->second.name.c_str(), player->second.score, playtime);
|
r.players_response->AddPlayerToList(player->second.name.c_str(), player->second.score, playtime);
|
||||||
// r.players_response->AddPlayerToList(player->second.name.c_str(), player->second.score, playtime);
|
}
|
||||||
// ++player;
|
|
||||||
// }
|
|
||||||
r.players_response->PlayersRefreshComplete();
|
r.players_response->PlayersRefreshComplete();
|
||||||
r.players_response = NULL;
|
r.players_response = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue