Files
SourMesen e9f48e23e8 Netplay: Fixed game crashing when connecting to server (#113)
The server would send a save state taken inside the PpuFrameDone event when a config change was detected, which is not safe. PpuFrameDone runs in the middle of CPU instructions, which could easily cause game crashes or desyncs.
2026-05-14 15:54:57 -07:00

42 lines
896 B
C++

#pragma once
#include "pch.h"
#include "Utilities/SimpleLock.h"
class Socket;
class NetMessage;
class Emulator;
class GameConnection
{
protected:
static constexpr int MaxMsgLength = 1500000;
unique_ptr<Socket> _socket;
Emulator* _emu;
uint8_t _readBuffer[GameConnection::MaxMsgLength] = {};
uint8_t _messageBuffer[GameConnection::MaxMsgLength] = {};
int _readPosition = 0;
SimpleLock _socketLock;
private:
void ReadSocket();
bool ExtractMessage(void* buffer, uint32_t& messageLength);
NetMessage* ReadMessage();
virtual void ProcessMessage(NetMessage* message) = 0;
protected:
void Disconnect();
virtual void ProcessPendingEvents() {}
public:
static constexpr uint8_t SpectatorPort = 0xFF;
GameConnection(Emulator* emu, unique_ptr<Socket> socket);
virtual ~GameConnection();
bool ConnectionError();
void ProcessMessages();
void SendNetMessage(NetMessage& message);
};