Skip to content

Commit

Permalink
Added more netplay status data to host status dialog.
Browse files Browse the repository at this point in the history
  • Loading branch information
thor2016 committed Apr 13, 2024
1 parent 94975d7 commit 84b823f
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 5 deletions.
87 changes: 85 additions & 2 deletions src/drivers/Qt/NetPlay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -865,7 +865,7 @@ void NetPlayServer::serverProcessMessage( NetPlayClient *client, void *msgBuf, s
client->gpData[3] = msg->ctrlState[3];

client->setPaused( (msg->flags & netPlayClientState::PauseFlag ) ? true : false );
client->setDesync( (msg->flags & netPlayClientState::DesyncFlag) ? true : false );
//client->setDesync( (msg->flags & netPlayClientState::DesyncFlag) ? true : false );

client->romMatch = (romCrc32 == msg->romCrc32);

Expand All @@ -885,8 +885,16 @@ void NetPlayServer::serverProcessMessage( NetPlayClient *client, void *msgBuf, s
{
printf("Client %s Frame:%u is NOT in Sync: OPS:%i RAM:%i\n",
client->userName.toLocal8Bit().constData(), msg->frameRun, opsSync, ramSync);

if (0 == client->desyncCount)
{
client->desyncSinceReset++;
client->totalDesyncCount++;
}
client->desyncCount++;

client->setDesync(true);

if (client->desyncCount > forceResyncCount)
{
FCEU_WRAPPER_LOCK();
Expand All @@ -904,6 +912,7 @@ void NetPlayServer::serverProcessMessage( NetPlayClient *client, void *msgBuf, s
}
else
{
client->setDesync(false);
client->desyncCount = 0;
}
}
Expand Down Expand Up @@ -1682,18 +1691,30 @@ int NetPlayClient::requestSync(void)
return 0;
}
//-----------------------------------------------------------------------------
void NetPlayClient::recordPingResult( uint64_t delay_ms )
void NetPlayClient::recordPingResult( const uint64_t delay_ms )
{
pingNumSamples++;
pingDelayLast = delay_ms;
pingDelaySum += delay_ms;

if (delay_ms < pingDelayMin)
{
pingDelayMin = delay_ms;
}

if (delay_ms > pingDelayMax)
{
pingDelayMax = delay_ms;
}
}
//-----------------------------------------------------------------------------
void NetPlayClient::resetPingData()
{
pingNumSamples = 0;
pingDelayLast = 0;
pingDelaySum = 0;
pingDelayMax = 0;
pingDelayMin = 1000;
}
//-----------------------------------------------------------------------------
double NetPlayClient::getAvgPingDelay()
Expand Down Expand Up @@ -2864,6 +2885,40 @@ void NetPlayClientTreeItem::updateData()
setText( 1, QObject::tr(roleString) );
setText( 2, state);
setText( 3, QString::number(client->currentFrame) );

if (isExpanded())
{
FCEU::FixedString<256> infoLine;
const int numChildren = childCount();

//printf("Calculating Expanded Item\n");

for (int i=0; i<numChildren; i++)
{
auto* item = static_cast<NetPlayClientTreeItem*>( child(i) );
switch (item->type)
{
case NetPlayClientTreeItem::PingInfo:
{
infoLine.sprintf("Ping ms: Avg %.2f Min: %llu Max: %llu",
client->getAvgPingDelay(), client->getMinPingDelay(), client->getMaxPingDelay() );
item->setFirstColumnSpanned(true);
item->setText( 0, QObject::tr(infoLine.c_str()) );
}
break;
case NetPlayClientTreeItem::DesyncInfo:
{
infoLine.sprintf("Desync Count: Since Last Sync: %u Total: %u",
client->desyncSinceReset, client->totalDesyncCount );
item->setFirstColumnSpanned(true);
item->setText( 0, QObject::tr(infoLine.c_str()) );
}
break;
default:
break;
}
}
}
}
}
//----------------------------------------------------------------------------
Expand All @@ -2889,11 +2944,22 @@ void NetPlayHostStatusDialog::loadClientTree()
{
return;
}
QFont font;

font.setFamily("Courier New");
font.setStyle( QFont::StyleNormal );
font.setStyleHint( QFont::Monospace );

auto* serverTopLvlItem = new NetPlayClientTreeItem();

serverTopLvlItem->server = server;
serverTopLvlItem->updateData();

serverTopLvlItem->setFont( 0, font );
serverTopLvlItem->setFont( 1, font );
serverTopLvlItem->setFont( 2, font );
serverTopLvlItem->setFont( 3, font );

clientTree->addTopLevelItem( serverTopLvlItem );

auto& clientList = server->getClientList();
Expand All @@ -2905,6 +2971,23 @@ void NetPlayHostStatusDialog::loadClientTree()
clientTopLvlItem->client = client;
clientTopLvlItem->updateData();

auto* clientPingInfo = new NetPlayClientTreeItem();
clientPingInfo->setFont( 0, font );
clientPingInfo->type = NetPlayClientTreeItem::PingInfo;
clientPingInfo->setFirstColumnSpanned(true);
clientTopLvlItem->addChild( clientPingInfo );

auto* clientDesyncInfo = new NetPlayClientTreeItem();
clientDesyncInfo->setFont( 0, font );
clientDesyncInfo->type = NetPlayClientTreeItem::DesyncInfo;
clientDesyncInfo->setFirstColumnSpanned(true);
clientTopLvlItem->addChild( clientDesyncInfo );

clientTopLvlItem->setFont( 0, font );
clientTopLvlItem->setFont( 1, font );
clientTopLvlItem->setFont( 2, font );
clientTopLvlItem->setFont( 3, font );

clientTree->addTopLevelItem( clientTopLvlItem );
}

Expand Down
21 changes: 18 additions & 3 deletions src/drivers/Qt/NetPlay.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ class NetPlayServer : public QTcpServer
int role = -1;
int roleMask = 0;
NetPlayClient* clientPlayer[4] = { nullptr };
int forceResyncCount = 10;
uint32_t forceResyncCount = 10;
uint32_t cycleCounter = 0;
uint32_t maxLeadFrames = 10u;
uint32_t clientWaitCounter = 0;
Expand Down Expand Up @@ -281,16 +281,21 @@ class NetPlayClient : public QObject
void setPaused(bool value){ paused = value; }
bool hasDesync(){ return desync; }
void setDesync(bool value){ desync = value; }
void recordPingResult( uint64_t delay_ms );
void recordPingResult( const uint64_t delay_ms );
void resetPingData(void);
double getAvgPingDelay();
unsigned long long getLastPingDelay(){ return pingDelayLast; };
unsigned long long getMinPingDelay(){ return pingDelayMin; };
unsigned long long getMaxPingDelay(){ return pingDelayMax; };
void setDebugLog(QFile* file){ debugLog = file; };

QString userName;
QString password;
int role = -1;
int state = 0;
int desyncCount = 0;
unsigned int desyncCount = 0;
unsigned int desyncSinceReset = 0;
unsigned int totalDesyncCount = 0;
bool syncOk = false;
bool romMatch = false;
unsigned int currentFrame = 0;
Expand Down Expand Up @@ -336,6 +341,8 @@ class NetPlayClient : public QObject

uint64_t pingDelaySum = 0;
uint64_t pingDelayLast = 0;
uint64_t pingDelayMin = 1000;
uint64_t pingDelayMax = 0;
uint64_t pingNumSamples = 0;
uint32_t romCrc32 = 0;
uint32_t numMsgBoxObjs = 0;
Expand Down Expand Up @@ -436,6 +443,14 @@ class NetPlayClientTreeItem : public QTreeWidgetItem

}

enum Type
{
StatusInfo = 0,
PingInfo,
DesyncInfo
};

int type = StatusInfo;
NetPlayClient* client = nullptr;
NetPlayServer* server = nullptr;

Expand Down

0 comments on commit 84b823f

Please sign in to comment.