mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
48 lines
No EOL
1.1 KiB
C++
48 lines
No EOL
1.1 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include "Netplay/NetMessage.h"
|
|
#include "Shared/Emulator.h"
|
|
#include "Shared/EmuSettings.h"
|
|
#include "Shared/CheatManager.h"
|
|
#include "Shared/SaveStateManager.h"
|
|
|
|
class SaveStateMessage : public NetMessage
|
|
{
|
|
private:
|
|
vector<CheatCode> _activeCheats;
|
|
vector<uint8_t> _stateData;
|
|
|
|
protected:
|
|
void Serialize(Serializer &s) override
|
|
{
|
|
SVVector(_stateData);
|
|
SVVector(_activeCheats);
|
|
}
|
|
|
|
public:
|
|
SaveStateMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
|
|
|
SaveStateMessage(Emulator* emu) : NetMessage(MessageType::SaveState)
|
|
{
|
|
//Used when sending state to clients
|
|
stringstream state;
|
|
{
|
|
auto lock = emu->AcquireLock();
|
|
_activeCheats = emu->GetCheatManager()->GetCheats();
|
|
emu->Serialize(state, true);
|
|
}
|
|
|
|
uint32_t dataSize = (uint32_t)state.tellp();
|
|
_stateData.resize(dataSize);
|
|
state.read((char*)_stateData.data(), dataSize);
|
|
}
|
|
|
|
void LoadState(Emulator* emu)
|
|
{
|
|
std::stringstream ss;
|
|
ss.write((char*)_stateData.data(), _stateData.size());
|
|
emu->Deserialize(ss, SaveStateManager::FileFormatVersion, true);
|
|
|
|
emu->GetCheatManager()->SetCheats(_activeCheats);
|
|
}
|
|
}; |