Просмотр исходного кода

FIX: merge output of hosted application

Marco Nolden лет назад: 14
Родитель
Сommit
017a87ca06

+ 14 - 6
Plugins/org.commontk.dicom.examplehost/ctkDicomExampleHost.cpp

@@ -5,12 +5,14 @@
 #include <QtDebug>
 #include <QRect>
 
+#include <iostream>
 
 ctkDicomExampleHost::ctkDicomExampleHost(ctkHostedAppPlaceholderWidget* placeholderWidget, int hostPort, int appPort) :
     ctkDicomAbstractHost(hostPort, appPort),
     placeholderWidget(placeholderWidget),
     applicationState(ctkDicomWG23::IDLE)
 {
+  connect(&this->appProcess,SIGNAL(readyReadStandardOutput()),SLOT(forwardConsoleOutput()));
 }
 
 void ctkDicomExampleHost::StartApplication(QString AppPath){
@@ -21,13 +23,9 @@ void ctkDicomExampleHost::StartApplication(QString AppPath){
     l.append("--applicationURL");
     l.append(QString("http://localhost:") + QString::number(this->getAppPort()));
     l.append("dicomapp"); // the app plugin to use - has to be changed later
-    if (!QProcess::startDetached (
-            AppPath,l))
-    {
-        qCritical() << "application failed to start!";
-    }
-    qDebug() << "starting application: " << AppPath << " " << l;
 
+    qDebug() << "starting application: " << AppPath << " " << l;
+    this->appProcess.setProcessChannelMode(QProcess::MergedChannels);
     this->appProcess.start(AppPath,l);
 
 }
@@ -58,3 +56,13 @@ ctkDicomExampleHost::~ctkDicomExampleHost()
   qDebug() << "Exiting host: trying to kill app";
   this->appProcess.kill();
 }
+
+void ctkDicomExampleHost::forwardConsoleOutput()
+{
+  while( this->appProcess.bytesAvailable() )
+  {
+    QString line( this->appProcess.readLine() );
+    line.prepend(">>>> ");
+    std::cout << line.toStdString();
+  }
+}

+ 45 - 0
Plugins/org.commontk.dicom.examplehost/ctkDicomExampleHost.cpp.orig

@@ -0,0 +1,45 @@
+#include "ctkDicomExampleHost.h"
+#include <QProcess>
+#include <QtDebug>
+
+ctkDicomExampleHost::ctkDicomExampleHost() : ctkDicomAbstractHost(8080)
+{
+}
+
+void ctkDicomExampleHost::StartApplication(QString AppPath, const QUrl& App_URL){
+
+    QStringList l;
+    l.append("--hostURL");
+    l.append(QString("localhost:") + this->getPort() );
+    l.append("--applicationURL");
+    l.append(App_URL.toString());
+<<<<<<< HEAD
+    if (!QProcess::startDetached (
+            AppPath,l))
+    {
+        qCritical() << "application failed to start!";
+    }
+=======
+
+    this->appProcess.start(AppPath,l);
+
+>>>>>>> CHG: keep track of the state of the hosted application process and display it in GUI
+}
+
+QRect ctkDicomExampleHost::getAvailableScreen(const QRect& preferredScreen){
+    qDebug()<< "set screen from preferredScreen:"<< preferredScreen;
+    QRect rect (preferredScreen);
+    emit giveAvailableScreen(rect);
+    return rect;
+}
+
+
+void ctkDicomExampleHost::notifyStateChanged(ctkDicomWG23::State state){
+    qDebug()<< "new state received:"<< static_cast<int>(state);
+    emit stateChangedReceived(state);
+}
+
+void ctkDicomExampleHost::notifyStatus(const ctkDicomWG23::Status& status){
+    qDebug()<< "new status received:"<<status.codeMeaning;
+    emit statusReceived(status);;
+}

+ 2 - 0
Plugins/org.commontk.dicom.examplehost/ctkDicomExampleHost.h

@@ -32,6 +32,8 @@ protected:
     QProcess appProcess;
     ctkHostedAppPlaceholderWidget* placeholderWidget;
     ctkDicomWG23::State applicationState;
+  protected slots:
+    void forwardConsoleOutput();
 };
 
 #endif // CTKDICOMEXAMPLEHOST_H