Added ROM unload handling logic for netplay.
This commit is contained in:
parent
25cab8195f
commit
2fe563181e
|
@ -2643,6 +2643,18 @@ void consoleWin_t::loadRomRequestCB( QString s )
|
||||||
|
|
||||||
void consoleWin_t::closeROMCB(void)
|
void consoleWin_t::closeROMCB(void)
|
||||||
{
|
{
|
||||||
|
if (isNetPlayClient())
|
||||||
|
{
|
||||||
|
QString msgBoxTxt = tr("Unloading ROM will cause a disconnect from the current netplay session.\n\nDo you want to continue with unloading and disconnection?");
|
||||||
|
int ans = QMessageBox::question( this, tr("NetPlay Client ROM Unload Warning"), msgBoxTxt, QMessageBox::Yes | QMessageBox::No );
|
||||||
|
|
||||||
|
if (ans == QMessageBox::No)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NetPlayCloseSession();
|
||||||
|
}
|
||||||
|
|
||||||
FCEU_WRAPPER_LOCK();
|
FCEU_WRAPPER_LOCK();
|
||||||
CloseGame();
|
CloseGame();
|
||||||
FCEU_WRAPPER_UNLOCK();
|
FCEU_WRAPPER_UNLOCK();
|
||||||
|
|
|
@ -177,6 +177,7 @@ NetPlayServer::NetPlayServer(QObject *parent)
|
||||||
connect(this, SIGNAL(newConnection(void)), this, SLOT(newConnectionRdy(void)));
|
connect(this, SIGNAL(newConnection(void)), this, SLOT(newConnectionRdy(void)));
|
||||||
|
|
||||||
connect(consoleWindow, SIGNAL(romLoaded(void)), this, SLOT(onRomLoad(void)));
|
connect(consoleWindow, SIGNAL(romLoaded(void)), this, SLOT(onRomLoad(void)));
|
||||||
|
connect(consoleWindow, SIGNAL(romUnload(void)), this, SLOT(onRomUnload(void)));
|
||||||
connect(consoleWindow, SIGNAL(stateLoaded(void)), this, SLOT(onStateLoad(void)));
|
connect(consoleWindow, SIGNAL(stateLoaded(void)), this, SLOT(onStateLoad(void)));
|
||||||
connect(consoleWindow, SIGNAL(nesResetOccurred(void)), this, SLOT(onNesReset(void)));
|
connect(consoleWindow, SIGNAL(nesResetOccurred(void)), this, SLOT(onNesReset(void)));
|
||||||
|
|
||||||
|
@ -473,6 +474,21 @@ void NetPlayServer::onRomLoad()
|
||||||
FCEU_WRAPPER_UNLOCK();
|
FCEU_WRAPPER_UNLOCK();
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
void NetPlayServer::onRomUnload()
|
||||||
|
{
|
||||||
|
netPlayMsgHdr unloadMsg(NETPLAY_UNLOAD_ROM_REQ);
|
||||||
|
|
||||||
|
romCrc32 = 0;
|
||||||
|
|
||||||
|
unloadMsg.toNetworkByteOrder();
|
||||||
|
|
||||||
|
// New ROM has been loaded by server, signal clients to load and sync
|
||||||
|
for (auto& client : clientList )
|
||||||
|
{
|
||||||
|
sendMsg( client, &unloadMsg, sizeof(unloadMsg) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
void NetPlayServer::onStateLoad()
|
void NetPlayServer::onStateLoad()
|
||||||
{
|
{
|
||||||
//printf("New State Loaded!\n");
|
//printf("New State Loaded!\n");
|
||||||
|
@ -1512,6 +1528,13 @@ void NetPlayClient::clientProcessMessage( void *msgBuf, size_t msgSize )
|
||||||
FCEU_WRAPPER_UNLOCK();
|
FCEU_WRAPPER_UNLOCK();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NETPLAY_UNLOAD_ROM_REQ:
|
||||||
|
{
|
||||||
|
FCEU_WRAPPER_LOCK();
|
||||||
|
CloseGame();
|
||||||
|
FCEU_WRAPPER_UNLOCK();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case NETPLAY_SYNC_STATE_RESP:
|
case NETPLAY_SYNC_STATE_RESP:
|
||||||
{
|
{
|
||||||
char *stateData = &static_cast<char*>(msgBuf)[ sizeof(netPlayMsgHdr) ];
|
char *stateData = &static_cast<char*>(msgBuf)[ sizeof(netPlayMsgHdr) ];
|
||||||
|
@ -2266,6 +2289,11 @@ bool isNetPlayHost(void)
|
||||||
return (NetPlayServer::GetInstance() != nullptr);
|
return (NetPlayServer::GetInstance() != nullptr);
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
bool isNetPlayClient(void)
|
||||||
|
{
|
||||||
|
return (NetPlayClient::GetInstance() != nullptr);
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void NetPlayPeriodicUpdate(void)
|
void NetPlayPeriodicUpdate(void)
|
||||||
{
|
{
|
||||||
NetPlayClient *client = NetPlayClient::GetInstance();
|
NetPlayClient *client = NetPlayClient::GetInstance();
|
||||||
|
|
|
@ -178,6 +178,7 @@ class NetPlayServer : public QTcpServer
|
||||||
public slots:
|
public slots:
|
||||||
void newConnectionRdy(void);
|
void newConnectionRdy(void);
|
||||||
void onRomLoad(void);
|
void onRomLoad(void);
|
||||||
|
void onRomUnload(void);
|
||||||
void onStateLoad(void);
|
void onStateLoad(void);
|
||||||
void onNesReset(void);
|
void onNesReset(void);
|
||||||
};
|
};
|
||||||
|
@ -435,6 +436,7 @@ public slots:
|
||||||
|
|
||||||
bool NetPlayActive(void);
|
bool NetPlayActive(void);
|
||||||
bool isNetPlayHost(void);
|
bool isNetPlayHost(void);
|
||||||
|
bool isNetPlayClient(void);
|
||||||
void NetPlayPeriodicUpdate(void);
|
void NetPlayPeriodicUpdate(void);
|
||||||
bool NetPlaySkipWait(void);
|
bool NetPlaySkipWait(void);
|
||||||
int NetPlayFrameWait(void);
|
int NetPlayFrameWait(void);
|
||||||
|
|
|
@ -18,6 +18,7 @@ enum netPlayMsgType
|
||||||
NETPLAY_AUTH_REQ,
|
NETPLAY_AUTH_REQ,
|
||||||
NETPLAY_AUTH_RESP,
|
NETPLAY_AUTH_RESP,
|
||||||
NETPLAY_LOAD_ROM_REQ,
|
NETPLAY_LOAD_ROM_REQ,
|
||||||
|
NETPLAY_UNLOAD_ROM_REQ,
|
||||||
NETPLAY_SYNC_STATE_REQ,
|
NETPLAY_SYNC_STATE_REQ,
|
||||||
NETPLAY_SYNC_STATE_RESP,
|
NETPLAY_SYNC_STATE_RESP,
|
||||||
NETPLAY_RUN_FRAME_REQ,
|
NETPLAY_RUN_FRAME_REQ,
|
||||||
|
|
Loading…
Reference in New Issue