Additional work in MainWindow for integration with new classes

This commit is contained in:
Cameron Gutman 2018-06-27 22:16:57 -07:00
parent d7d11635a0
commit 1b36071e02
3 changed files with 104 additions and 14 deletions

View file

@ -4,20 +4,23 @@
#include "http/identitymanager.h"
#include "http/nvpairingmanager.h"
#include "http/nvhttp.h"
#include "streaming/streaming.h"
#include "http/computermanager.h"
#include "http/boxartmanager.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui(new Ui::MainWindow),
m_BoxArtManager(this),
m_ComputerManager(this)
{
ui->setupUi(this);
// sample code for an iconized button performing an action
// will be useful to implement the game grid UI later
// myButton = new QPushButton(this);
// myButton->setIcon(QIcon(":/res/icon128.png"));
// myButton->setIconSize(QSize(128, 128));
// myButton->resize(QSize(128, 128));
// connect(myButton, &QAbstractButton::clicked, this, &MainWindow::on_actionExit_triggered);
connect(&m_BoxArtManager, SIGNAL(boxArtLoadComplete(NvComputer*,NvApp,QImage)),
this, SLOT(boxArtLoadComplete(NvComputer*,NvApp,QImage)));
connect(&m_ComputerManager, SIGNAL(computerStateChanged(NvComputer*)),
this, SLOT(computerStateChanged(NvComputer*)));
m_ComputerManager.startPolling();
qDebug() << "Cached computers: " << m_ComputerManager.getComputers().count();
}
MainWindow::~MainWindow()
@ -25,20 +28,76 @@ MainWindow::~MainWindow()
delete ui;
}
void MainWindow::boxArtLoadComplete(NvComputer* computer, NvApp app, QImage image)
{
qDebug() << "Loaded image";
}
void MainWindow::on_actionExit_triggered()
{
exit(EXIT_SUCCESS);
}
void MainWindow::computerStateChanged(NvComputer* computer)
{
QReadLocker lock(&computer->lock);
NvHTTP http(computer->activeAddress);
if (computer->pairState == NvComputer::PS_NOT_PAIRED) {
NvPairingManager pm(computer->activeAddress);
QString pin = pm.generatePinString();
pm.pair(http.getServerInfo(), pin);
}
else {
QImage im = m_BoxArtManager.loadBoxArt(computer, computer->appList[0]);
#if 0
STREAM_CONFIGURATION sc;
LiInitializeStreamConfiguration(&sc);
sc.width = 1280;
sc.height = 720;
sc.fps = 60;
sc.packetSize = 1024;
sc.bitrate = 10000;
sc.audioConfiguration = AUDIO_CONFIGURATION_51_SURROUND;
QMessageBox* box = new QMessageBox(nullptr);
box->setAttribute(Qt::WA_DeleteOnClose); //makes sure the msgbox is deleted automatically when closed
box->setStandardButtons(QMessageBox::Cancel);
box->setText("Launching game...");
box->open();
if (computer->currentGameId != 0) {
http.resumeApp(&sc);
}
else {
http.launchApp(999999, &sc, true, false, SdlGetAttachedGamepadMask());
}
SERVER_INFORMATION si;
QString serverInfo = http.getServerInfo();
QByteArray hostnameStr = computer->activeAddress.toLatin1();
QByteArray siAppVersion = http.getXmlString(serverInfo, "appversion").toLatin1();
QByteArray siGfeVersion = http.getXmlString(serverInfo, "GfeVersion").toLatin1();
si.address = hostnameStr.data();
si.serverInfoAppVersion = siAppVersion.data();
si.serverInfoGfeVersion = siGfeVersion.data();
StartConnection(&si, &sc, box);
#endif
}
}
void MainWindow::on_newHostBtn_clicked()
{
QString hostname = popupmanager::getHostnameDialog(this);
if (!hostname.isEmpty()) {
NvPairingManager pm(hostname);
QString pin = pm.generatePinString();
pm.pair(http.getServerInfo(), pin);
m_ComputerManager.addNewHost(hostname, false);
QThread::sleep(10);
m_ComputerManager.stopPollingAsync();
}
}

View file

@ -189,6 +189,32 @@ void ComputerManager::startPolling()
}
}
QVector<NvComputer*> ComputerManager::getComputers()
{
QReadLocker lock(&m_Lock);
return QVector<NvComputer*>::fromList(m_KnownHosts.values());
}
void ComputerManager::deleteHost(NvComputer* computer)
{
QWriteLocker lock(&m_Lock);
QThread* pollingThread = m_PollThreads[computer->uuid];
if (pollingThread != nullptr) {
pollingThread->requestInterruption();
// We must wait here because we're going to delete computer
// and we can't do that out from underneath the poller.
pollingThread->wait();
}
m_PollThreads.remove(computer->uuid);
m_KnownHosts.remove(computer->uuid);
delete computer;
}
void ComputerManager::stopPollingAsync()
{
QWriteLocker lock(&m_Lock);

View file

@ -222,6 +222,11 @@ public:
bool addNewHost(QString address, bool mdns);
QVector<NvComputer*> getComputers();
// computer is deleted inside this call
void deleteHost(NvComputer* computer);
signals:
void computerStateChanged(NvComputer* computer);