diff OrthancServer/main.cpp @ 1786:164d78911382 worklists

primitives to handle dicom worklists
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 18 Nov 2015 12:00:14 +0100
parents 5ad4e4d92ecb
children 1b1d5470233f
line wrap: on
line diff
--- a/OrthancServer/main.cpp	Wed Nov 18 09:56:34 2015 +0100
+++ b/OrthancServer/main.cpp	Wed Nov 18 12:00:14 2015 +0100
@@ -89,10 +89,32 @@
 };
 
 
+class OrthancWorklistRequestHandler : public IWorklistRequestHandler
+{
+private:
+  ServerContext& server_;
+
+public:
+  OrthancWorklistRequestHandler(ServerContext& context) :
+    server_(context)
+  {
+  }
+
+  virtual bool Handle(DicomWorklistAnswers& answers,
+                      const ParsedDicomFile& query,
+                      const std::string& remoteIp,
+                      const std::string& remoteAet)
+  {
+    printf("Worklist\n");
+    return true;
+  }
+};
+
 
 class MyDicomServerFactory : 
   public IStoreRequestHandlerFactory,
-  public IFindRequestHandlerFactory, 
+  public IFindRequestHandlerFactory,
+  public IWorklistRequestHandlerFactory, 
   public IMoveRequestHandlerFactory
 {
 private:
@@ -143,6 +165,11 @@
     return new OrthancMoveRequestHandler(context_);
   }
 
+  virtual IWorklistRequestHandler* ConstructWorklistRequestHandler()
+  {
+    return new OrthancWorklistRequestHandler(context_);
+  }
+
   void Done()
   {
   }
@@ -550,6 +577,7 @@
     PrintErrorCode(ErrorCode_DatabaseNotInitialized, "Plugin trying to call the database during its initialization");
     PrintErrorCode(ErrorCode_SslDisabled, "Orthanc has been built without SSL support");
     PrintErrorCode(ErrorCode_CannotOrderSlices, "Unable to order the slices of the series");
+    PrintErrorCode(ErrorCode_NoWorklistHandler, "No request handler factory for DICOM C-Find Modality SCP");
   }
 
   std::cout << std::endl;
@@ -704,6 +732,10 @@
   dicomServer.SetStoreRequestHandlerFactory(serverFactory);
   dicomServer.SetMoveRequestHandlerFactory(serverFactory);
   dicomServer.SetFindRequestHandlerFactory(serverFactory);
+
+  // TODO - Disable the following line if no worklist plugin is available
+  dicomServer.SetWorklistRequestHandlerFactory(serverFactory);
+
   dicomServer.SetPortNumber(Configuration::GetGlobalIntegerParameter("DicomPort", 4242));
   dicomServer.SetApplicationEntityTitle(Configuration::GetGlobalStringParameter("DicomAet", "ORTHANC"));
   dicomServer.SetApplicationEntityFilter(dicomFilter);