SLOT(slotPressedButtonBoundingBoxMoveZNeg())); connect(ui->bu_bounding_box_move_z_pos, SIGNAL(clicked()), this, SLOT(slotPressedButtonBoundingBoxMoveZPos())); // NetRender connect(ui->bu_netrender_connect, SIGNAL(clicked()), this, SLOT(slotNetRenderClientConnect())); connect( ui->bu_netrender_disconnect, SIGNAL(clicked()), this, SLOT(slotNetRenderClientDisconnect())); connect(ui->bu_netrender_start_server, SIGNAL(clicked()), this, SLOT(slotNetRenderServerStart())); connect(ui->bu_netrender_stop_server, SIGNAL(clicked()), this, SLOT(slotNetRenderServerStop())); connect(ui->comboBox_netrender_mode, SIGNAL(currentIndexChanged(int)), this, SLOT(slotNetRenderClientServerChange(int))); connect( ui->group_netrender, SIGNAL(toggled(bool)), this, SLOT(slotCheckBoxDisableNetRender(bool))); connect(ui->bu_netrender_connect, SIGNAL(clicked()), this, SLOT(slotNetRenderClientConnect())); connect(gNetRender, SIGNAL(NewStatusClient()), this, SLOT(slotNetRenderStatusClientUpdate())); connect(gNetRender, SIGNAL(NewStatusServer()), this, SLOT(slotNetRenderStatusServerUpdate())); connect(gNetRender, SIGNAL(ClientsChanged()), this, SLOT(slotNetRenderClientListUpdate())); connect(gNetRender, SIGNAL(ClientsChanged(int)), this, SLOT(slotNetRenderClientListUpdate(int))); connect(gNetRender, SIGNAL(ClientsChanged(int, int)), this, SLOT(slotNetRenderClientListUpdate(int, int))); connect(ui->checkBox_connect_detail_level_2, SIGNAL(stateChanged(int)), this, SIGNAL(stateChangedConnectDetailLevel(int))); connect(ui->pushButton_calculate_dist_thresh, SIGNAL(clicked()), this, SLOT(slotCalculateDistanceThreshold())); } void cDockRenderingEngine::slotNetRenderServerStart() const {
void CNetRender::ProcessData(QTcpSocket *socket, sMessage *inMsg) { // beware: payload points to char, first cast to target type pointer, then dereference // *(qint32*)msg->payload //------------------------- CLIENT ------------------------ if(IsClient()) { switch ((netCommand)inMsg->command) { case netRender_VERSION: { sMessage outMsg; if(*(qint32*)inMsg->payload.data() == version) { WriteLog("NetRender - version matches (" + QString::number(version) + "), connection established"); if(systemData.noGui) { QTextStream out(stdout); out << "NetRender - version matches (" + QString::number(version) + "), connection established\n"; } // server version matches, send worker count outMsg.command = netRender_WORKER; QDataStream stream(&outMsg.payload, QIODevice::WriteOnly); stream << workerCount; QString machineName = QHostInfo::localHostName(); stream << (qint32)machineName.toUtf8().size(); stream.writeRawData(machineName.toUtf8().data(), machineName.toUtf8().size()); status = netRender_READY; emit NewStatusClient(); } else { qWarning() << "CNetRender - version mismatch! client version: " << version << ", server: " << *(qint32*)inMsg->payload.data(); outMsg.command = netRender_BAD; } SendData(clientSocket, outMsg); break; } case netRender_STOP: { status = netRender_READY; gMainInterface->stopRequest = true; emit NotifyStatus(); WriteLog("CNetRender - STOP"); break; } case netRender_STATUS: { emit NotifyStatus(); break; } case netRender_JOB: { if (inMsg->id == actualId) { WriteLog("NetRender - received new job"); QDataStream stream(&inMsg->payload, QIODevice::ReadOnly); QByteArray buffer; qint32 size; status = netRender_WORKING; emit NotifyStatus(); // read settings stream >> size; buffer.resize(size); stream.readRawData(buffer.data(), size); settingsText = QString::fromUtf8(buffer.data(), buffer.size()); // read textures for (int i = 0; i < textures.textureList.size(); i++) { stream >> size; if (size > 0) { buffer.resize(size); stream.readRawData(buffer.data(), size); textures.textureList[i]->FromQByteArray(buffer); } } cSettings parSettings(cSettings::formatCondensedText); parSettings.BeQuiet(true); parSettings.LoadFromString(settingsText); parSettings.Decode(gPar, gParFractal); if(!systemData.noGui) { gMainInterface->SynchronizeInterface(gPar, gParFractal, cInterface::write); gMainInterface->StartRender(true); } else { //in noGui mode it must be started as separate thread to be able to process event loop gMainInterface->headless = new cHeadless; QThread *thread = new QThread; //deleted by deleteLater() gMainInterface->headless->moveToThread(thread); QObject::connect(thread, SIGNAL(started()), gMainInterface->headless, SLOT(slotNetRender())); thread->setObjectName("RenderJob"); thread->start(); QObject::connect(gMainInterface->headless, SIGNAL(finished()), gMainInterface->headless, SLOT(deleteLater())); QObject::connect(gMainInterface->headless, SIGNAL(finished()), thread, SLOT(quit())); QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); } } else { WriteLog("NetRender - received JOB message with wrong id"); } break; } case netRender_RENDER: { if (inMsg->id == actualId) { QDataStream stream(&inMsg->payload, QIODevice::ReadOnly); qint32 doneSize; stream >> doneSize; QList<int> done; for (int i = 0; i < doneSize; i++) { qint32 line; stream >> line; done.append(line); } emit ToDoListArrived(done); } else {