File: pvserver_common.h

package info (click to toggle)
paraview 5.13.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 544,220 kB
  • sloc: cpp: 3,374,605; ansic: 1,332,409; python: 150,381; xml: 122,166; sql: 65,887; sh: 7,317; javascript: 5,262; yacc: 4,417; java: 3,977; perl: 2,363; lex: 1,929; f90: 1,397; makefile: 170; objc: 153; tcl: 59; pascal: 50; fortran: 29
file content (138 lines) | stat: -rw-r--r-- 4,617 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
// SPDX-License-Identifier: BSD-3-Clause

#include "vtkCLIOptions.h"
#include "vtkInitializationHelper.h"
#include "vtkLogger.h"
#include "vtkMultiProcessController.h"
#include "vtkNetworkAccessManager.h"
#include "vtkPVPluginTracker.h"
#include "vtkPVSessionServer.h"
#include "vtkProcessModule.h"
#include "vtkProcessModuleConfiguration.h"
#include "vtkRemotingCoreConfiguration.h"
#include "vtkSMProxyManager.h"
#include "vtkSmartPointer.h"

#if PARAVIEW_USE_PYTHON
extern "C"
{
  void vtkPVInitializePythonModules();
}
#endif

#include "ParaView_paraview_plugins.h"

static int RealMain(int argc, char* argv[], vtkProcessModule::ProcessTypes type)
{
  vtkInitializationHelper::SetApplicationName("ParaViewServer");

  auto cliApp = vtk::TakeSmartPointer(vtkCLIOptions::New());
  cliApp->SetAllowExtras(false);
  cliApp->SetStopOnUnrecognizedArgument(true);
  switch (type)
  {
    case vtkProcessModule::PROCESS_DATA_SERVER:
      cliApp->SetDescription(
        "pvdataserver: the ParaView data-server\n"
        "=============================\n"
        "This is the ParaView data-server executable. Together with the render-server "
        "(pvrenderserver), "
        "this can be used for client-server use-cases. "
        "This process handles all the rendering requests. \n\n"
        "Typically, one connects a ParaView client (either a graphical client, or a Python-based "
        "client) to this process to drive the data analysis and visualization pipelines.");
      break;

    case vtkProcessModule::PROCESS_RENDER_SERVER:
      cliApp->SetDescription(
        "pvrenderserver: the ParaView render-server\n"
        "=============================\n"
        "This is the ParaView render-server executable. Together with the data-server "
        "(pvdataserver), "
        "this can be used for client-server use-cases. "
        "This process handles all the data-processing requests. \n\n"
        "Typically, one connects a ParaView client (either a graphical client, or a Python-based "
        "client) to this process to drive the data analysis and visualization pipelines.");
      break;

    case vtkProcessModule::PROCESS_SERVER:
      cliApp->SetDescription(
        "pvserver: the ParaView server\n"
        "=============================\n"
        "This is the ParaView server executable. This is intended for client-server use-cases "
        "which require the client and server to be on different processes, potentially on "
        "different systems.\n\n"
        "Typically, one connects a ParaView client (either a graphical client, or a Python-based "
        "client) to this process to drive the data analysis and visualization pipelines.");
      break;
    default:
      vtkLogF(ERROR, "process type not supported!");
      abort();
  }

  // Init current process type
  auto status = vtkInitializationHelper::Initialize(argc, argv, type, cliApp);
  cliApp = nullptr;
  if (!status)
  {
    return vtkInitializationHelper::GetExitCode();
  }

  auto config = vtkRemotingCoreConfiguration::GetInstance();

#if PARAVIEW_USE_PYTHON
  // register callback to initialize modules statically. The callback is
  // empty when BUILD_SHARED_LIBS is ON.
  vtkPVInitializePythonModules();
#endif

  // register static plugins
  ParaView_paraview_plugins_initialize();

  vtkPVPluginTracker::GetInstance()->LoadPluginConfigurationXMLs("paraview");

  vtkProcessModule* pm = vtkProcessModule::GetProcessModule();
  vtkMultiProcessController* controller = pm->GetGlobalController();

  vtkPVSessionServer* session = vtkPVSessionServer::New();
  session->SetMultipleConnection(config->GetMultiClientMode());
  session->SetDisableFurtherConnections(config->GetDisableFurtherConnections());

  int process_id = controller->GetLocalProcessId();
  if (process_id == 0)
  {
    // Report status:
    if (config->GetReverseConnection())
    {
      cout << "Connecting to client (reverse connection requested)..." << endl;
    }
    else
    {
      cout << "Waiting for client..." << endl;
    }
  }
  bool success = false;
  if (session->Connect())
  {
    success = true;
    pm->RegisterSession(session);
    if (controller->GetLocalProcessId() == 0)
    {
      while (pm->GetNetworkAccessManager()->ProcessEvents(0) != -1)
      {
      }
    }
    else
    {
      controller->ProcessRMIs();
    }
    pm->UnRegisterSession(session);
  }

  cout << "Exiting..." << endl;
  session->Delete();
  // Exit application
  vtkInitializationHelper::Finalize();
  return success ? vtkInitializationHelper::GetExitCode() : EXIT_FAILURE;
}