super ugly attempt at state sharing

This commit is contained in:
Arisotura 2023-04-05 23:22:18 +02:00
parent 6ed77df24b
commit de48816f78
1 changed files with 32 additions and 9 deletions

View File

@ -34,6 +34,7 @@
#include "Input.h" #include "Input.h"
#include "ROMManager.h" #include "ROMManager.h"
#include "Config.h" #include "Config.h"
#include "Savestate.h"
#include "ui_NetplayStartHostDialog.h" #include "ui_NetplayStartHostDialog.h"
#include "ui_NetplayStartClientDialog.h" #include "ui_NetplayStartClientDialog.h"
@ -210,6 +211,7 @@ enum
{ {
Blob_CartROM = 0, Blob_CartROM = 0,
Blob_CartSRAM, Blob_CartSRAM,
Blob_InitState,
Blob_MAX Blob_MAX
}; };
@ -613,13 +615,6 @@ printf("[MC] finish blob type=%d len=%d\n", type, len);
} }
} }
for (int i = 0; i < Blob_MAX; i++)
{
if (Blobs[i]) delete[] Blobs[i];
Blobs[i] = nullptr;
BlobLens[i] = 0;
}
if (res) if (res)
{ {
ROMManager::CartType = 0; ROMManager::CartType = 0;
@ -628,7 +623,22 @@ printf("[MC] finish blob type=%d len=%d\n", type, len);
//LoadCheats(); //LoadCheats();
} }
// TODO: load state!!!! // load initial state
// TODO: terrible hack!!
FILE* f = fopen("netplay2.mln", "wb");
fwrite(Blobs[Blob_InitState], BlobLens[Blob_InitState], 1, f);
fclose(f);
Savestate* state = new Savestate("netplay2.mln", false);
NDS::DoSavestate(state);
delete state;
for (int i = 0; i < Blob_MAX; i++)
{
if (Blobs[i]) delete[] Blobs[i];
Blobs[i] = nullptr;
BlobLens[i] = 0;
}
printf("[MC] good\n"); printf("[MC] good\n");
ENetPacket* resp = enet_packet_create(buf, 1, ENET_PACKET_FLAG_RELIABLE); ENetPacket* resp = enet_packet_create(buf, 1, ENET_PACKET_FLAG_RELIABLE);
enet_peer_send(peer, 1, resp); enet_peer_send(peer, 1, resp);
@ -647,7 +657,20 @@ void SyncMirrorClients()
SendBlobToMirrorClients(Blob_CartROM, NDSCart::CartROMSize, NDSCart::CartROM); SendBlobToMirrorClients(Blob_CartROM, NDSCart::CartROMSize, NDSCart::CartROM);
SendBlobToMirrorClients(Blob_CartSRAM, NDSCart::GetSaveMemoryLength(), NDSCart::GetSaveMemory()); SendBlobToMirrorClients(Blob_CartSRAM, NDSCart::GetSaveMemoryLength(), NDSCart::GetSaveMemory());
// TODO: send initial state!! // send initial state
// TODO: this is a terrible hack!
Savestate* state = new Savestate("netplay.mln", true);
NDS::DoSavestate(state);
delete state;
FILE* f = fopen("netplay.mln", "rb");
fseek(f, 0, SEEK_END);
u32 flen = ftell(f);
fseek(f, 0, SEEK_SET);
u8* statebuf = new u8[flen];
fread(statebuf, flen, 1, f);
fclose(f);
SendBlobToMirrorClients(Blob_InitState, flen, statebuf);
delete[] statebuf;
u8 data[2]; u8 data[2];
data[0] = 0x04; data[0] = 0x04;