Explorar o código

ENH: use dicom host service in example app

ivowolf %!s(int64=15) %!d(string=hai) anos
pai
achega
25a50d6262

+ 4 - 3
Applications/ctkExampleHostedApp/ctkExampleHostedAppMain.cpp

@@ -28,7 +28,8 @@
 
 // replace "//$" with nothing as soon as ctkDicomAppServer/ctkDicomHostService exist
 #include <ctkDicomAppServer.h>
-//$#include <ctkDicomHostService.h>
+#include <ctkDicomHostService.h>
+#include <ctkDicomHostInterface.h>
 
 #include <QApplication>
 #include <QString>
@@ -150,8 +151,8 @@ int main(int argv, char** argc)
 
   // setup the communication infrastructure: DicomAppServer and DicomHostService
   ctkDicomAppServer * appServer = new ctkDicomAppServer(QUrl(appURL).port()); // accesses the app-plugin via getService("ctkDicomAppInterface");
-//$  ctkDicomHostInterface * hostInterface = new ctkDicomHostService(QUrl(hostURL).port());
-//$  framework->getPluginContext()->registerService(QStringList("ctkDicomHostInterface"), hostInterface);
+  ctkDicomHostInterface * hostInterface = new ctkDicomHostService(QUrl(hostURL).port());
+  framework->getPluginContext()->registerService(QStringList("ctkDicomHostInterface"), hostInterface);
 
   // install and start the plugin with the business logic and remember pointer to start it later
   ctkPlugin* plugin;

+ 46 - 2
Plugins/org.commontk.dicom.wg23.app/ctkDicomHostService.cpp

@@ -23,11 +23,55 @@
 
 #include "ctkDicomHostServicePrivate.h"
 
-ctkDicomHostService::ctkDicomHostService()
-  : d_ptr(new ctkDicomHostServicePrivate())
+#include "ctkDicomWG23TypesHelper.h"
+
+ctkDicomHostService::ctkDicomHostService(int port)
+  : d_ptr(new ctkDicomHostServicePrivate(port))
 {
 
 }
 ctkDicomHostService::~ctkDicomHostService()
 {
 }
+
+QString ctkDicomHostService::generateUID()
+{
+  Q_D(ctkDicomHostService);
+
+  const QtSoapType& result = d->askHost("generateUID", NULL);
+  QString resultUID = ctkDicomSoapUID::getUID(result);
+  return resultUID;
+}
+
+QString ctkDicomHostService::getOutputLocation(const QStringList& preferredProtocols)
+{
+  //Q_D(ctkDicomHostService);
+
+  Q_UNUSED(preferredProtocols)
+  return QString();
+}
+
+QRect ctkDicomHostService::getAvailableScreen(const QRect& preferredScreen)
+{
+  Q_D(ctkDicomHostService);
+
+  QtSoapStruct* input = new ctkDicomSoapRectangle("preferredScreen", preferredScreen);
+  const QtSoapType& result = d->askHost("getAvailableScreen", input);
+  QRect resultRect = ctkDicomSoapRectangle::getQRect(result);
+  qDebug() << "x:" << resultRect.x() << " y:" << resultRect.y();
+  return resultRect;
+}
+
+void ctkDicomHostService::notifyStateChanged(ctkDicomWG23::State state)
+{
+  Q_D(ctkDicomHostService);
+  QtSoapType* input = new ctkDicomSoapState("stateChanged", state);
+  d->askHost("notifyStateChanged", input);
+}
+
+void ctkDicomHostService::notifyStatus(const ctkDicomWG23::Status& status)
+{
+  Q_D(ctkDicomHostService);
+  QtSoapStruct* input = new ctkDicomSoapStatus("status", status);
+  d->askHost("notifyStatus", input);
+}

+ 10 - 2
Plugins/org.commontk.dicom.wg23.app/ctkDicomHostService.h

@@ -23,17 +23,25 @@
 #ifndef CTKDICOMHOSTSERVICE_H
 #define CTKDICOMHOSTSERVICE_H
 
+#include <ctkDicomHostInterface.h>
 #include <QScopedPointer>
+#include <org_commontk_dicom_wg23_app_Export.h>
 
 class ctkDicomHostServicePrivate;
 
-class ctkDicomHostService
+class org_commontk_dicom_wg23_app_EXPORT ctkDicomHostService : public ctkDicomHostInterface
 {
 
 public:
-  ctkDicomHostService();
+  ctkDicomHostService(int port);
   ~ctkDicomHostService();
 
+  QString generateUID();
+  QRect getAvailableScreen(const QRect& preferredScreen);
+  QString getOutputLocation(const QStringList& preferredProtocols);
+  void notifyStateChanged(ctkDicomWG23::State state);
+  void notifyStatus(const ctkDicomWG23::Status& status);
+
 private:
   Q_DECLARE_PRIVATE(ctkDicomHostService)
 

+ 2 - 36
Plugins/org.commontk.dicom.wg23.app/ctkDicomHostServicePrivate.cpp

@@ -28,11 +28,11 @@
 
 #include <stdexcept>
 
-ctkDicomHostServicePrivate::ctkDicomHostServicePrivate()
+ctkDicomHostServicePrivate::ctkDicomHostServicePrivate(int port)
 {
   connect(&http, SIGNAL(responseReady()), this, SLOT(responseReady()));
 
-  http.setHost("127.0.0.1", false, 8080);
+  http.setHost("127.0.0.1", false, port);
 }
 
 void ctkDicomHostServicePrivate::responseReady()
@@ -96,37 +96,3 @@ QtSoapType ctkDicomHostServicePrivate::askHost(const QString& methodName, QtSoap
 
   return screenResult;
 }
-
-QString ctkDicomHostServicePrivate::generateUID()
-{
-  const QtSoapType& result = askHost("generateUID", NULL);
-  QString resultUID = ctkDicomSoapUID::getUID(result);
-  return resultUID;
-}
-
-QString ctkDicomHostServicePrivate::getOutputLocation(const QStringList& preferredProtocols)
-{
-  Q_UNUSED(preferredProtocols)
-  return QString();
-}
-
-QRect ctkDicomHostServicePrivate::getAvailableScreen(const QRect& preferredScreen)
-{
-  QtSoapStruct* input = new ctkDicomSoapRectangle("preferredScreen", preferredScreen);
-  const QtSoapType& result = askHost("getAvailableScreen", input);
-  QRect resultRect = ctkDicomSoapRectangle::getQRect(result);
-  qDebug() << "x:" << resultRect.x() << " y:" << resultRect.y();
-  return resultRect;
-}
-
-void ctkDicomHostServicePrivate::notifyStateChanged(ctkDicomWG23::State state)
-{
-  QtSoapType* input = new ctkDicomSoapState("stateChanged", state);
-  askHost("notifyStateChanged", input);
-}
-
-void ctkDicomHostServicePrivate::notifyStatus(const ctkDicomWG23::Status& status)
-{
-  QtSoapStruct* input = new ctkDicomSoapStatus("status", status);
-  askHost("notifyStatus", input);
-}

+ 8 - 15
Plugins/org.commontk.dicom.wg23.app/ctkDicomHostServicePrivate.h

@@ -23,34 +23,27 @@
 #define CTKDICOMHOSTSERVICEPRIVATE_H
 
 #include <ctkDicomWG23Types.h>
-#include <ctkDicomHostInterface.h>
 
 #include <QEventLoop>
 #include <QtSoapHttpTransport>
 
-class ctkDicomHostServicePrivate : public ctkDicomHostInterface
+class ctkDicomHostServicePrivate : public QObject
 {
   Q_OBJECT
 
 public:
-  ctkDicomHostServicePrivate();
-
-  QString generateUID();
-  QRect getAvailableScreen(const QRect& preferredScreen);
-  QString getOutputLocation(const QStringList& preferredProtocols);
-  void notifyStateChanged(ctkDicomWG23::State state);
-  void notifyStatus(const ctkDicomWG23::Status& status);
-
-private slots:
-
-  void responseReady();
-
-private:
+  ctkDicomHostServicePrivate(int port);
 
   QtSoapType askHost(const QString& methodName, QtSoapType* soapStruct);
     
   QEventLoop blockingLoop;
   QtSoapHttpTransport http;
+
+  int port;
+
+private slots:
+
+  void responseReady();
 };
 
 #endif // CTKDICOMHOSTSERVICEPRIVATE_H