204 changes: 90 additions & 114 deletions Source/Core/Core/NetPlayClient.cpp
Expand Up @@ -244,25 +244,25 @@ bool NetPlayClient::Connect()
return false;
}

MessageId error;
ConnectionError error;
rpac >> error;

// got error message
if (error)
if (error != ConnectionError::NoError)
{
switch (error)
{
case CON_ERR_SERVER_FULL:
case ConnectionError::ServerFull:
m_dialog->OnConnectionError(_trans("The server is full."));
break;
case CON_ERR_VERSION_MISMATCH:
case ConnectionError::VersionMismatch:
m_dialog->OnConnectionError(
_trans("The server and client's NetPlay versions are incompatible."));
break;
case CON_ERR_GAME_RUNNING:
case ConnectionError::GameRunning:
m_dialog->OnConnectionError(_trans("The game is currently running."));
break;
case CON_ERR_NAME_TOO_LONG:
case ConnectionError::NameTooLong:
m_dialog->OnConnectionError(_trans("Nickname is too long."));
break;
default:
Expand Down Expand Up @@ -313,143 +313,143 @@ static void ReceiveSyncIdentifier(sf::Packet& spac, SyncIdentifier& sync_identif
// called from ---NETPLAY--- thread
void NetPlayClient::OnData(sf::Packet& packet)
{
MessageId mid;
MessageID mid;
packet >> mid;

INFO_LOG_FMT(NETPLAY, "Got server message: {:x}", mid);

switch (mid)
{
case NP_MSG_PLAYER_JOIN:
case MessageID::PlayerJoin:
OnPlayerJoin(packet);
break;

case NP_MSG_PLAYER_LEAVE:
case MessageID::PlayerLeave:
OnPlayerLeave(packet);
break;

case NP_MSG_CHAT_MESSAGE:
case MessageID::ChatMessage:
OnChatMessage(packet);
break;

case NP_MSG_CHUNKED_DATA_START:
case MessageID::ChunkedDataStart:
OnChunkedDataStart(packet);
break;

case NP_MSG_CHUNKED_DATA_END:
case MessageID::ChunkedDataEnd:
OnChunkedDataEnd(packet);
break;

case NP_MSG_CHUNKED_DATA_PAYLOAD:
case MessageID::ChunkedDataPayload:
OnChunkedDataPayload(packet);
break;

case NP_MSG_CHUNKED_DATA_ABORT:
case MessageID::ChunkedDataAbort:
OnChunkedDataAbort(packet);
break;

case NP_MSG_PAD_MAPPING:
case MessageID::PadMapping:
OnPadMapping(packet);
break;

case NP_MSG_GBA_CONFIG:
case MessageID::GBAConfig:
OnGBAConfig(packet);
break;

case NP_MSG_WIIMOTE_MAPPING:
case MessageID::WiimoteMapping:
OnWiimoteMapping(packet);
break;

case NP_MSG_PAD_DATA:
case MessageID::PadData:
OnPadData(packet);
break;

case NP_MSG_PAD_HOST_DATA:
case MessageID::PadHostData:
OnPadHostData(packet);
break;

case NP_MSG_WIIMOTE_DATA:
case MessageID::WiimoteData:
OnWiimoteData(packet);
break;

case NP_MSG_PAD_BUFFER:
case MessageID::PadBuffer:
OnPadBuffer(packet);
break;

case NP_MSG_HOST_INPUT_AUTHORITY:
case MessageID::HostInputAuthority:
OnHostInputAuthority(packet);
break;

case NP_MSG_GOLF_SWITCH:
case MessageID::GolfSwitch:
OnGolfSwitch(packet);
break;

case NP_MSG_GOLF_PREPARE:
case MessageID::GolfPrepare:
OnGolfPrepare(packet);
break;

case NP_MSG_CHANGE_GAME:
case MessageID::ChangeGame:
OnChangeGame(packet);
break;

case NP_MSG_GAME_STATUS:
case MessageID::GameStatus:
OnGameStatus(packet);
break;

case NP_MSG_START_GAME:
case MessageID::StartGame:
OnStartGame(packet);
break;

case NP_MSG_STOP_GAME:
case NP_MSG_DISABLE_GAME:
case MessageID::StopGame:
case MessageID::DisableGame:
OnStopGame(packet);
break;

case NP_MSG_POWER_BUTTON:
case MessageID::PowerButton:
OnPowerButton();
break;

case NP_MSG_PING:
case MessageID::Ping:
OnPing(packet);
break;

case NP_MSG_PLAYER_PING_DATA:
case MessageID::PlayerPingData:
OnPlayerPingData(packet);
break;

case NP_MSG_DESYNC_DETECTED:
case MessageID::DesyncDetected:
OnDesyncDetected(packet);
break;

case NP_MSG_SYNC_GC_SRAM:
case MessageID::SyncGCSRAM:
OnSyncGCSRAM(packet);
break;

case NP_MSG_SYNC_SAVE_DATA:
case MessageID::SyncSaveData:
OnSyncSaveData(packet);
break;

case NP_MSG_SYNC_CODES:
case MessageID::SyncCodes:
OnSyncCodes(packet);
break;

case NP_MSG_COMPUTE_MD5:
case MessageID::ComputeMD5:
OnComputeMD5(packet);
break;

case NP_MSG_MD5_PROGRESS:
case MessageID::MD5Progress:
OnMD5Progress(packet);
break;

case NP_MSG_MD5_RESULT:
case MessageID::MD5Result:
OnMD5Result(packet);
break;

case NP_MSG_MD5_ERROR:
case MessageID::MD5Error:
OnMD5Error(packet);
break;

case NP_MSG_MD5_ABORT:
case MessageID::MD5Abort:
OnMD5Abort();
break;

Expand Down Expand Up @@ -547,7 +547,7 @@ void NetPlayClient::OnChunkedDataEnd(sf::Packet& packet)
m_dialog->HideChunkedProgressDialog();

sf::Packet complete_packet;
complete_packet << static_cast<MessageId>(NP_MSG_CHUNKED_DATA_COMPLETE);
complete_packet << MessageID::ChunkedDataComplete;
complete_packet << cid;
Send(complete_packet, CHUNKED_DATA_CHANNEL);
}
Expand All @@ -572,7 +572,7 @@ void NetPlayClient::OnChunkedDataPayload(sf::Packet& packet)
m_dialog->SetChunkedProgress(m_local_player->pid, data_packet.getDataSize());

sf::Packet progress_packet;
progress_packet << static_cast<MessageId>(NP_MSG_CHUNKED_DATA_PROGRESS);
progress_packet << MessageID::ChunkedDataProgress;
progress_packet << cid;
progress_packet << sf::Uint64{data_packet.getDataSize()};
Send(progress_packet, CHUNKED_DATA_CHANNEL);
Expand Down Expand Up @@ -731,13 +731,13 @@ void NetPlayClient::OnGolfSwitch(sf::Packet& packet)
if (m_local_player->pid == previous_golfer)
{
sf::Packet spac;
spac << static_cast<MessageId>(NP_MSG_GOLF_RELEASE);
spac << MessageID::GolfRelease;
Send(spac);
}
else if (m_local_player->pid == pid)
{
sf::Packet spac;
spac << static_cast<MessageId>(NP_MSG_GOLF_ACQUIRE);
spac << MessageID::GolfAcquire;
Send(spac);

// Pads are already calibrated so we can just ignore this
Expand Down Expand Up @@ -771,7 +771,7 @@ void NetPlayClient::OnChangeGame(sf::Packet& packet)
SendGameStatus();

sf::Packet client_capabilities_packet;
client_capabilities_packet << static_cast<MessageId>(NP_MSG_CLIENT_CAPABILITIES);
client_capabilities_packet << MessageID::ClientCapabilities;
client_capabilities_packet << ExpansionInterface::CEXIIPL::HasIPLDump();
client_capabilities_packet << Config::Get(Config::SESSION_USE_FMA);
Send(client_capabilities_packet);
Expand All @@ -784,10 +784,7 @@ void NetPlayClient::OnGameStatus(sf::Packet& packet)

{
std::lock_guard lkp(m_crit.players);
Player& player = m_players[pid];
u32 status;
packet >> status;
player.game_status = static_cast<SyncIdentifierComparison>(status);
packet >> m_players[pid].game_status;
}

m_dialog->Update();
Expand All @@ -797,19 +794,12 @@ void NetPlayClient::OnStartGame(sf::Packet& packet)
{
{
std::lock_guard lkg(m_crit.game);
packet >> m_current_game;
packet >> m_net_settings.m_CPUthread;

INFO_LOG_FMT(NETPLAY, "Start of game {}", m_selected_game.game_id);

{
std::underlying_type_t<PowerPC::CPUCore> core;
if (packet >> core)
m_net_settings.m_CPUcore = static_cast<PowerPC::CPUCore>(core);
else
m_net_settings.m_CPUcore = PowerPC::CPUCore::CachedInterpreter;
}

packet >> m_current_game;
packet >> m_net_settings.m_CPUthread;
packet >> m_net_settings.m_CPUcore;
packet >> m_net_settings.m_EnableCheats;
packet >> m_net_settings.m_SelectedLanguage;
packet >> m_net_settings.m_OverrideRegionSettings;
Expand All @@ -819,24 +809,14 @@ void NetPlayClient::OnStartGame(sf::Packet& packet)
packet >> m_net_settings.m_RAMOverrideEnable;
packet >> m_net_settings.m_Mem1Size;
packet >> m_net_settings.m_Mem2Size;

{
std::underlying_type_t<DiscIO::Region> tmp;
packet >> tmp;
m_net_settings.m_FallbackRegion = static_cast<DiscIO::Region>(tmp);
}

packet >> m_net_settings.m_FallbackRegion;
packet >> m_net_settings.m_AllowSDWrites;
packet >> m_net_settings.m_CopyWiiSave;
packet >> m_net_settings.m_OCEnable;
packet >> m_net_settings.m_OCFactor;

for (auto& device : m_net_settings.m_EXIDevice)
{
int tmp;
packet >> tmp;
device = static_cast<ExpansionInterface::TEXIDevices>(tmp);
}
packet >> device;

for (u32& value : m_net_settings.m_SYSCONFSettings)
packet >> value;
Expand Down Expand Up @@ -924,7 +904,7 @@ void NetPlayClient::OnPing(sf::Packet& packet)
packet >> ping_key;

sf::Packet response_packet;
response_packet << static_cast<MessageId>(NP_MSG_PONG);
response_packet << MessageID::Pong;
response_packet << ping_key;

Send(response_packet);
Expand Down Expand Up @@ -981,31 +961,31 @@ void NetPlayClient::OnSyncGCSRAM(sf::Packet& packet)

void NetPlayClient::OnSyncSaveData(sf::Packet& packet)
{
MessageId sub_id;
SyncSaveDataID sub_id;
packet >> sub_id;

if (m_local_player->IsHost())
return;

switch (sub_id)
{
case SYNC_SAVE_DATA_NOTIFY:
case SyncSaveDataID::Notify:
OnSyncSaveDataNotify(packet);
break;

case SYNC_SAVE_DATA_RAW:
case SyncSaveDataID::RawData:
OnSyncSaveDataRaw(packet);
break;

case SYNC_SAVE_DATA_GCI:
case SyncSaveDataID::GCIData:
OnSyncSaveDataGCI(packet);
break;

case SYNC_SAVE_DATA_WII:
case SyncSaveDataID::WiiData:
OnSyncSaveDataWii(packet);
break;

case SYNC_SAVE_DATA_GBA:
case SyncSaveDataID::GBAData:
OnSyncSaveDataGBA(packet);
break;

Expand Down Expand Up @@ -1183,11 +1163,7 @@ void NetPlayClient::OnSyncSaveDataWii(sf::Packet& packet)
{
WiiSave::Storage::SaveFile file;
packet >> file.mode >> file.attributes;
{
u8 tmp;
packet >> tmp;
file.type = static_cast<WiiSave::Storage::SaveFile::Type>(tmp);
}
packet >> file.type;
packet >> file.path;

if (file.type == WiiSave::Storage::SaveFile::Type::File)
Expand Down Expand Up @@ -1239,29 +1215,29 @@ void NetPlayClient::OnSyncSaveDataGBA(sf::Packet& packet)
void NetPlayClient::OnSyncCodes(sf::Packet& packet)
{
// Recieve Data Packet
MessageId sub_id;
SyncCodeID sub_id;
packet >> sub_id;

// Check Which Operation to Perform with This Packet
switch (sub_id)
{
case SYNC_CODES_NOTIFY:
case SyncCodeID::Notify:
OnSyncCodesNotify();
break;

case SYNC_CODES_NOTIFY_GECKO:
case SyncCodeID::NotifyGecko:
OnSyncCodesNotifyGecko(packet);
break;

case SYNC_CODES_DATA_GECKO:
case SyncCodeID::GeckoData:
OnSyncCodesDataGecko(packet);
break;

case SYNC_CODES_NOTIFY_AR:
case SyncCodeID::NotifyAR:
OnSyncCodesNotifyAR(packet);
break;

case SYNC_CODES_DATA_AR:
case SyncCodeID::ARData:
OnSyncCodesDataAR(packet);
break;

Expand Down Expand Up @@ -1643,7 +1619,7 @@ const NetSettings& NetPlayClient::GetNetSettings() const
void NetPlayClient::SendChatMessage(const std::string& msg)
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_CHAT_MESSAGE);
packet << MessageID::ChatMessage;
packet << msg;

SendAsync(std::move(packet));
Expand All @@ -1666,7 +1642,7 @@ void NetPlayClient::AddPadStateToPacket(const int in_game_pad, const GCPadStatus
void NetPlayClient::SendWiimoteState(const int in_game_pad, const WiimoteInput& nw)
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_WIIMOTE_DATA);
packet << MessageID::WiimoteData;
packet << static_cast<PadIndex>(in_game_pad);
packet << static_cast<u8>(nw.report_id);
packet << static_cast<u8>(nw.data.size());
Expand All @@ -1678,7 +1654,7 @@ void NetPlayClient::SendWiimoteState(const int in_game_pad, const WiimoteInput&
void NetPlayClient::SendStartGamePacket()
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_START_GAME);
packet << MessageID::StartGame;
packet << m_current_game;

SendAsync(std::move(packet));
Expand All @@ -1688,7 +1664,7 @@ void NetPlayClient::SendStartGamePacket()
void NetPlayClient::SendStopGamePacket()
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_STOP_GAME);
packet << MessageID::StopGame;

SendAsync(std::move(packet));
}
Expand Down Expand Up @@ -1760,17 +1736,17 @@ void NetPlayClient::SyncSaveDataResponse(const bool success)
if (++m_sync_save_data_success_count >= m_sync_save_data_count)
{
sf::Packet response_packet;
response_packet << static_cast<MessageId>(NP_MSG_SYNC_SAVE_DATA);
response_packet << static_cast<MessageId>(SYNC_SAVE_DATA_SUCCESS);
response_packet << MessageID::SyncSaveData;
response_packet << SyncSaveDataID::Success;

Send(response_packet);
}
}
else
{
sf::Packet response_packet;
response_packet << static_cast<MessageId>(NP_MSG_SYNC_SAVE_DATA);
response_packet << static_cast<MessageId>(SYNC_SAVE_DATA_FAILURE);
response_packet << MessageID::SyncSaveData;
response_packet << SyncSaveDataID::Failure;

Send(response_packet);
}
Expand All @@ -1784,8 +1760,8 @@ void NetPlayClient::SyncCodeResponse(const bool success)
m_dialog->AppendChat(Common::GetStringT("Error processing codes."));

sf::Packet response_packet;
response_packet << static_cast<MessageId>(NP_MSG_SYNC_CODES);
response_packet << static_cast<MessageId>(SYNC_CODES_FAILURE);
response_packet << MessageID::SyncCodes;
response_packet << SyncCodeID::Failure;

Send(response_packet);
return;
Expand All @@ -1797,8 +1773,8 @@ void NetPlayClient::SyncCodeResponse(const bool success)
m_dialog->AppendChat(Common::GetStringT("Codes received!"));

sf::Packet response_packet;
response_packet << static_cast<MessageId>(NP_MSG_SYNC_CODES);
response_packet << static_cast<MessageId>(SYNC_CODES_SUCCESS);
response_packet << MessageID::SyncCodes;
response_packet << SyncCodeID::Success;

Send(response_packet);
}
Expand Down Expand Up @@ -1960,7 +1936,7 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu
{
// Tell the server we've acknowledged the message
sf::Packet spac;
spac << static_cast<MessageId>(NP_MSG_GOLF_PREPARE);
spac << MessageID::GolfPrepare;
Send(spac);

m_wait_on_input_received = false;
Expand All @@ -1972,7 +1948,7 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu
if (IsFirstInGamePad(pad_nb) && batching)
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_PAD_DATA);
packet << MessageID::PadData;

bool send_packet = false;
const int num_local_pads = NumLocalPads();
Expand All @@ -1990,11 +1966,11 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu

if (!batching)
{
int local_pad = InGamePadToLocalPad(pad_nb);
const int local_pad = InGamePadToLocalPad(pad_nb);
if (local_pad < 4)
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_PAD_DATA);
packet << MessageID::PadData;
if (PollLocalPad(local_pad, packet))
SendAsync(std::move(packet));
}
Expand Down Expand Up @@ -2208,7 +2184,7 @@ void NetPlayClient::SendPadHostPoll(const PadIndex pad_num)
return;

sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_PAD_HOST_DATA);
packet << MessageID::PadHostData;

if (pad_num < 0)
{
Expand Down Expand Up @@ -2309,7 +2285,7 @@ void NetPlayClient::RequestStopGame()
void NetPlayClient::SendPowerButtonEvent()
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_POWER_BUTTON);
packet << MessageID::PowerButton;
SendAsync(std::move(packet));
}

Expand All @@ -2319,7 +2295,7 @@ void NetPlayClient::RequestGolfControl(const PlayerId pid)
return;

sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_GOLF_REQUEST);
packet << MessageID::GolfRequest;
packet << pid;
SendAsync(std::move(packet));
}
Expand Down Expand Up @@ -2410,7 +2386,7 @@ bool NetPlayClient::IsLocalPlayer(const PlayerId pid) const
void NetPlayClient::SendGameStatus()
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_GAME_STATUS);
packet << MessageID::GameStatus;

SyncIdentifierComparison result;
m_dialog->FindGameFile(m_selected_game, &result);
Expand All @@ -2436,7 +2412,7 @@ void NetPlayClient::SendTimeBase()
const sf::Uint64 timebase = SystemTimers::GetFakeTimeBase();

sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_TIMEBASE);
packet << MessageID::TimeBase;
packet << timebase;
packet << netplay_client->m_timebase_frame;

Expand Down Expand Up @@ -2472,7 +2448,7 @@ void NetPlayClient::ComputeMD5(const SyncIdentifier& sync_identifier)
if (file.empty() || !File::Exists(file))
{
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_MD5_ERROR);
packet << MessageID::MD5Error;
packet << "file not found";
Send(packet);
return;
Expand All @@ -2483,15 +2459,15 @@ void NetPlayClient::ComputeMD5(const SyncIdentifier& sync_identifier)
m_MD5_thread = std::thread([this, file]() {
std::string sum = MD5::MD5Sum(file, [&](int progress) {
sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_MD5_PROGRESS);
packet << MessageID::MD5Progress;
packet << progress;
SendAsync(std::move(packet));

return m_should_compute_MD5;
});

sf::Packet packet;
packet << static_cast<MessageId>(NP_MSG_MD5_RESULT);
packet << MessageID::MD5Result;
packet << sum;
SendAsync(std::move(packet));
});
Expand Down
159 changes: 80 additions & 79 deletions Source/Core/Core/NetPlayProto.h
Expand Up @@ -120,94 +120,96 @@ struct NetTraversalConfig
u16 traversal_port = 0;
};

// messages
enum
enum class MessageID : u8
{
NP_MSG_PLAYER_JOIN = 0x10,
NP_MSG_PLAYER_LEAVE = 0x11,

NP_MSG_CHAT_MESSAGE = 0x30,

NP_MSG_CHUNKED_DATA_START = 0x40,
NP_MSG_CHUNKED_DATA_END = 0x41,
NP_MSG_CHUNKED_DATA_PAYLOAD = 0x42,
NP_MSG_CHUNKED_DATA_PROGRESS = 0x43,
NP_MSG_CHUNKED_DATA_COMPLETE = 0x44,
NP_MSG_CHUNKED_DATA_ABORT = 0x45,

NP_MSG_PAD_DATA = 0x60,
NP_MSG_PAD_MAPPING = 0x61,
NP_MSG_PAD_BUFFER = 0x62,
NP_MSG_PAD_HOST_DATA = 0x63,
NP_MSG_GBA_CONFIG = 0x64,

NP_MSG_WIIMOTE_DATA = 0x70,
NP_MSG_WIIMOTE_MAPPING = 0x71,

NP_MSG_GOLF_REQUEST = 0x90,
NP_MSG_GOLF_SWITCH = 0x91,
NP_MSG_GOLF_ACQUIRE = 0x92,
NP_MSG_GOLF_RELEASE = 0x93,
NP_MSG_GOLF_PREPARE = 0x94,

NP_MSG_START_GAME = 0xA0,
NP_MSG_CHANGE_GAME = 0xA1,
NP_MSG_STOP_GAME = 0xA2,
NP_MSG_DISABLE_GAME = 0xA3,
NP_MSG_GAME_STATUS = 0xA4,
NP_MSG_CLIENT_CAPABILITIES = 0xA5,
NP_MSG_HOST_INPUT_AUTHORITY = 0xA6,
NP_MSG_POWER_BUTTON = 0xA7,

NP_MSG_TIMEBASE = 0xB0,
NP_MSG_DESYNC_DETECTED = 0xB1,

NP_MSG_COMPUTE_MD5 = 0xC0,
NP_MSG_MD5_PROGRESS = 0xC1,
NP_MSG_MD5_RESULT = 0xC2,
NP_MSG_MD5_ABORT = 0xC3,
NP_MSG_MD5_ERROR = 0xC4,

NP_MSG_READY = 0xD0,
NP_MSG_NOT_READY = 0xD1,

NP_MSG_PING = 0xE0,
NP_MSG_PONG = 0xE1,
NP_MSG_PLAYER_PING_DATA = 0xE2,

NP_MSG_SYNC_GC_SRAM = 0xF0,
NP_MSG_SYNC_SAVE_DATA = 0xF1,
NP_MSG_SYNC_CODES = 0xF2,
ConnectionSuccessful = 0,

PlayerJoin = 0x10,
PlayerLeave = 0x11,

ChatMessage = 0x30,

ChunkedDataStart = 0x40,
ChunkedDataEnd = 0x41,
ChunkedDataPayload = 0x42,
ChunkedDataProgress = 0x43,
ChunkedDataComplete = 0x44,
ChunkedDataAbort = 0x45,

PadData = 0x60,
PadMapping = 0x61,
PadBuffer = 0x62,
PadHostData = 0x63,
GBAConfig = 0x64,

WiimoteData = 0x70,
WiimoteMapping = 0x71,

GolfRequest = 0x90,
GolfSwitch = 0x91,
GolfAcquire = 0x92,
GolfRelease = 0x93,
GolfPrepare = 0x94,

StartGame = 0xA0,
ChangeGame = 0xA1,
StopGame = 0xA2,
DisableGame = 0xA3,
GameStatus = 0xA4,
ClientCapabilities = 0xA5,
HostInputAuthority = 0xA6,
PowerButton = 0xA7,

TimeBase = 0xB0,
DesyncDetected = 0xB1,

ComputeMD5 = 0xC0,
MD5Progress = 0xC1,
MD5Result = 0xC2,
MD5Abort = 0xC3,
MD5Error = 0xC4,

Ready = 0xD0,
NotReady = 0xD1,

Ping = 0xE0,
Pong = 0xE1,
PlayerPingData = 0xE2,

SyncGCSRAM = 0xF0,
SyncSaveData = 0xF1,
SyncCodes = 0xF2,
};

enum
enum class ConnectionError : u8
{
CON_ERR_SERVER_FULL = 1,
CON_ERR_GAME_RUNNING = 2,
CON_ERR_VERSION_MISMATCH = 3,
CON_ERR_NAME_TOO_LONG = 4
NoError = 0,
ServerFull = 1,
GameRunning = 2,
VersionMismatch = 3,
NameTooLong = 4
};

enum
enum class SyncSaveDataID : u8
{
SYNC_SAVE_DATA_NOTIFY = 0,
SYNC_SAVE_DATA_SUCCESS = 1,
SYNC_SAVE_DATA_FAILURE = 2,
SYNC_SAVE_DATA_RAW = 3,
SYNC_SAVE_DATA_GCI = 4,
SYNC_SAVE_DATA_WII = 5,
SYNC_SAVE_DATA_GBA = 6
Notify = 0,
Success = 1,
Failure = 2,
RawData = 3,
GCIData = 4,
WiiData = 5,
GBAData = 6
};

enum
enum class SyncCodeID : u8
{
SYNC_CODES_NOTIFY = 0,
SYNC_CODES_NOTIFY_GECKO = 1,
SYNC_CODES_NOTIFY_AR = 2,
SYNC_CODES_DATA_GECKO = 3,
SYNC_CODES_DATA_AR = 4,
SYNC_CODES_SUCCESS = 5,
SYNC_CODES_FAILURE = 6,
Notify = 0,
NotifyGecko = 1,
NotifyAR = 2,
GeckoData = 3,
ARData = 4,
Success = 5,
Failure = 6,
};

constexpr u32 MAX_NAME_LENGTH = 30;
Expand All @@ -225,7 +227,6 @@ struct WiimoteInput
u8 report_id;
std::vector<u8> data;
};
using MessageId = u8;
using PlayerId = u8;
using FrameNum = u32;
using PadIndex = s8;
Expand Down
221 changes: 110 additions & 111 deletions Source/Core/Core/NetPlayServer.cpp

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Source/Core/Core/NetPlayServer.h
Expand Up @@ -129,7 +129,7 @@ class NetPlayServer : public TraversalClientClient
void SendToClients(const sf::Packet& packet, PlayerId skip_pid = 0,
u8 channel_id = DEFAULT_CHANNEL);
void Send(ENetPeer* socket, const sf::Packet& packet, u8 channel_id = DEFAULT_CHANNEL);
unsigned int OnConnect(ENetPeer* socket, sf::Packet& rpac);
ConnectionError OnConnect(ENetPeer* socket, sf::Packet& rpac);
unsigned int OnDisconnect(const Client& player);
unsigned int OnData(sf::Packet& packet, Client& player);

Expand Down