Netplay modified data read code to allow smaller buffered data to arrive in pieces rather than waiting for full data set.

This commit is contained in:
harry 2024-03-24 20:49:17 -04:00
parent 450870ef77
commit a63f5e6051
2 changed files with 12 additions and 9 deletions

View File

@ -366,6 +366,7 @@ int NetPlayServer::sendRomLoadReq( NetPlayClient *client )
{ {
sendMsg( client, buf, bytesRead ); sendMsg( client, buf, bytesRead );
} }
client->flushData();
::fclose(fp); ::fclose(fp);
@ -392,6 +393,7 @@ int NetPlayServer::sendStateSyncReq( NetPlayClient *client )
sendMsg( client, &hdr, sizeof(netPlayMsgHdr), [&hdr]{ hdr.toNetworkByteOrder(); } ); sendMsg( client, &hdr, sizeof(netPlayMsgHdr), [&hdr]{ hdr.toNetworkByteOrder(); } );
sendMsg( client, em.buf(), em.size() ); sendMsg( client, em.buf(), em.size() );
client->flushData();
opsCrc32 = 0; opsCrc32 = 0;
inputClear(); inputClear();
@ -1112,6 +1114,7 @@ QTcpSocket* NetPlayClient::createSocket(void)
if (sock == nullptr) if (sock == nullptr)
{ {
sock = new QTcpSocket(this); sock = new QTcpSocket(this);
//sock->setReadBufferSize( recvMsgBufSize );
connect(sock, SIGNAL(connected(void)) , this, SLOT(onConnect(void))); connect(sock, SIGNAL(connected(void)) , this, SLOT(onConnect(void)));
connect(sock, SIGNAL(disconnected(void)), this, SLOT(onDisconnect(void))); connect(sock, SIGNAL(disconnected(void)), this, SLOT(onDisconnect(void)));
@ -1342,33 +1345,33 @@ int NetPlayClient::readMessages( void (*msgCallback)( void *userData, void *msgB
int bytesAvailable = sock->bytesAvailable(); int bytesAvailable = sock->bytesAvailable();
readReq = bytesAvailable > 0; readReq = bytesAvailable > 0;
//printf("Read Bytes Available: %lu %i\n", ts.toMilliSeconds(), bytesAvailable); printf("Read Bytes Available: %lu %i %i\n", ts.toMilliSeconds(), bytesAvailable, recvMsgBytesLeft);
while (readReq) while (readReq)
{ {
if (recvMsgBytesLeft > 0) if (recvMsgBytesLeft > 0)
{ {
bytesAvailable = sock->bytesAvailable(); bytesAvailable = sock->bytesAvailable();
readReq = (bytesAvailable >= recvMsgBytesLeft); readReq = (bytesAvailable > 0);
if (readReq) if (readReq)
{ {
int dataRead; int dataRead;
//size_t readSize = recvMsgBytesLeft; size_t readSize = recvMsgBytesLeft;
dataRead = sock->read( &recvMsgBuf[recvMsgByteIndex], recvMsgBytesLeft ); dataRead = sock->read( &recvMsgBuf[recvMsgByteIndex], readSize );
if (dataRead > 0) if (dataRead > 0)
{ {
recvMsgBytesLeft -= dataRead; recvMsgBytesLeft -= dataRead;
recvMsgByteIndex += dataRead; recvMsgByteIndex += dataRead;
} }
//printf(" Data: Id: %u Size: %zu Read: %i\n", recvMsgId, readSize, dataRead ); printf(" Data: Id: %u Size: %zu Read: %i\n", recvMsgId, readSize, dataRead );
if (recvMsgBytesLeft > 0) if (recvMsgBytesLeft > 0)
{ {
bytesAvailable = sock->bytesAvailable(); bytesAvailable = sock->bytesAvailable();
readReq = (bytesAvailable >= recvMsgBytesLeft); readReq = (bytesAvailable > 0);
} }
else else
{ {
@ -1398,7 +1401,7 @@ int NetPlayClient::readMessages( void (*msgCallback)( void *userData, void *msgB
{ {
printf("Error: Message size too large: %08X\n", recvMsgId); printf("Error: Message size too large: %08X\n", recvMsgId);
} }
//printf("HDR: Id: %u Size: %u\n", netPlayByteSwap(hdr->msgId), netPlayByteSwap(hdr->msgSize) ); printf("HDR: Id: %u Size: %u\n", netPlayByteSwap(hdr->msgId), netPlayByteSwap(hdr->msgSize) );
recvMsgByteIndex = sizeof(netPlayMsgHdr); recvMsgByteIndex = sizeof(netPlayMsgHdr);
@ -1407,7 +1410,7 @@ int NetPlayClient::readMessages( void (*msgCallback)( void *userData, void *msgB
msgCallback( userData, recvMsgBuf, recvMsgSize ); msgCallback( userData, recvMsgBuf, recvMsgSize );
} }
bytesAvailable = sock->bytesAvailable(); bytesAvailable = sock->bytesAvailable();
readReq = (bytesAvailable >= recvMsgSize); readReq = (bytesAvailable > 0);
} }
else else
{ {

View File

@ -38,7 +38,7 @@ enum netPlayerId
NETPLAY_PLAYER4 NETPLAY_PLAYER4
}; };
static const uint32_t NETPLAY_MAGIC_NUMBER = 0xaa55aa55; static constexpr uint32_t NETPLAY_MAGIC_NUMBER = 0xaa55aa55;
struct netPlayMsgHdr struct netPlayMsgHdr
{ {