mirror of
https://github.com/therealKyp/Earth-and-Beyond-server
synced 2026-08-13 22:23:03 -04:00
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
#include "Net7.h"
|
|
|
|
#include "ServerManager.h"
|
|
#include "UDPConnection.h"
|
|
#include "Opcodes.h"
|
|
#include "PacketStructures.h"
|
|
#include "PacketMethods.h"
|
|
#include "PlayerClass.h"
|
|
#include "MemoryHandler.h"
|
|
|
|
#define ENB_OPCODE_2008_MASTER_HANDOFF 0x2008
|
|
#define ENB_OPCODE_2009_MASTER_HANDOFF_CONFIRM 0x2009
|
|
|
|
|
|
void UDP_Connection::HandleMasterOpcode(char *msg, EnbUdpHeader *hdr, const long source_addr, const short source_port)
|
|
{
|
|
switch (hdr->opcode)
|
|
{
|
|
case ENB_OPCODE_2008_MASTER_HANDOFF:
|
|
ProcessHandoff(msg, hdr, source_addr, source_port);
|
|
break;
|
|
|
|
default:
|
|
LogMessage("bad Master UDP opcode, id 0x%04X\n",hdr->opcode);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void UDP_Connection::ProcessHandoff(char *msg, EnbUdpHeader *hdr, const long source_addr, const short source_port)
|
|
{
|
|
unsigned char data[16];
|
|
int index = 0;
|
|
|
|
long sector_id = *((long*) msg);
|
|
|
|
LogMessage("Master handoff received from player id %x, to sector = %d\n", hdr->player_id, sector_id);
|
|
|
|
Player *player = m_ServerMgr->m_PlayerMgr.GetPlayer(hdr->player_id, true);
|
|
|
|
if (player)
|
|
{
|
|
ServerRedirect redirect;
|
|
memset(&redirect, 0, sizeof(redirect));
|
|
redirect.sector_id = ntohl(sector_id);
|
|
LogMessage("Processing player '%s', sector %d\n", player->Name(), sector_id);
|
|
if (m_ServerMgr->m_SectorServerMgr.LookupSectorServer(redirect))
|
|
{
|
|
LogMessage("Found sector %d\n",sector_id);
|
|
//build response, ip addr of sector and sector port
|
|
AddData(data, redirect.ip_address, index);
|
|
AddData(data, redirect.port, index);
|
|
SendOpcode(ENB_OPCODE_2009_MASTER_HANDOFF_CONFIRM, player, data, index, source_addr, source_port);
|
|
player->SetUDPConnection(g_ServerMgr->m_UDPConnection);
|
|
player->SetHandoffReceived(true);
|
|
}
|
|
else
|
|
{
|
|
LogMessage("Unable to locate sector server for sector %d\n", sector_id);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
LogMessage("SERVER ERROR: Unable to find player [%x]\n", hdr->player_id);
|
|
}
|
|
}
|
|
|