File: vtkTCPNetworkAccessManager.h

package info (click to toggle)
paraview 5.4.1%2Bdfsg4-3.1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 218,616 kB
  • sloc: cpp: 2,331,508; ansic: 322,365; python: 111,051; xml: 79,203; tcl: 47,013; yacc: 4,877; java: 4,438; perl: 3,238; sh: 2,920; lex: 1,908; f90: 748; makefile: 273; pascal: 228; objc: 83; fortran: 31
file content (131 lines) | stat: -rw-r--r-- 4,783 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
/*=========================================================================

  Program:   ParaView
  Module:    vtkTCPNetworkAccessManager.h

  Copyright (c) Kitware, Inc.
  All rights reserved.
  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
/**
 * @class   vtkTCPNetworkAccessManager
 *
 * vtkTCPNetworkAccessManager is a concrete implementation of
 * vtkNetworkAccessManager that uses tcp/ip sockets for communication between
 * processes. It supports urls that use "tcp" as their protocol specifier.
*/

#ifndef vtkTCPNetworkAccessManager_h
#define vtkTCPNetworkAccessManager_h

#include "vtkNetworkAccessManager.h"
#include "vtkPVClientServerCoreCoreModule.h" //needed for exports

class vtkMultiProcessController;

class VTKPVCLIENTSERVERCORECORE_EXPORT vtkTCPNetworkAccessManager : public vtkNetworkAccessManager
{
public:
  static vtkTCPNetworkAccessManager* New();
  vtkTypeMacro(vtkTCPNetworkAccessManager, vtkNetworkAccessManager);
  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;

  /**
   * Creates a new connection given the url.
   * This call may block until the connection can be established. To keep
   * user-interfaces responsive, one can listen to the vtkCommand::ProgressEvent
   * fired periodically by this class while waiting.

   * vtkNetworkAccessManager can  be waiting for atmost one connection at a
   * time. Calling NewConnection() while another connection is pending will
   * raise an error.

   * To abort the connection and cancel the waiting, simply call
   * AbortPendingConnection() in the vtkCommand::ProgressEvent callback.

   * Returns the new connection instance on success, otherwise NULL.

   * URLs are of the following form:
   * \c \<transport\>://\<address\>
   * * \c tcp://<hostname\>:\<port\>
   * * \c tcp://localhost:\<port\>?listen=true& -- listen for connection on port.
   * * \c tcp://localhost:\<port\>?listen=true&multiple=true -- listen for multiple
   * Examples:
   * * \c tcp://medea:12345
   * * \c tcp://localhost:12345?listen&handshake=3.8.12
   * Supported parameters:
   * handshake :- specify a message that is matched with the other side
   * listen    :- open a server-socket for a client to connect to
   * multiple  :- leave server-socket open for more than 1 client to connect
   * (listen must be set to true)
   * nonblocking:- When listen is true, this will result in the call returning
   * NULL if a client connection is not available immediately.
   * It leaves the server socket open for client to connect.
   * timeout   :- When connecting to remote i.e listen==false, specify the time
   * (in seconds) for which this call blocks to retry attempts to
   * connect to the host/port. If absent, default is 60s. 0 or
   * negative implies no retry attempts.
   */
  virtual vtkMultiProcessController* NewConnection(const char* url) VTK_OVERRIDE;

  /**
   * Used to abort pending connection creation, if any. Refer to
   * NewConnection() for details.
   */
  virtual void AbortPendingConnection() VTK_OVERRIDE;

  /**
   * Process any network activity.
   */
  virtual int ProcessEvents(unsigned long timeout_msecs) VTK_OVERRIDE;

  /**
   * Peeks to check if any activity is available. When this call returns true,
   * ProcessEvents() will always result in some activity processing if called
   * afterword.
   */
  virtual bool GetNetworkEventsAvailable() VTK_OVERRIDE;

  /**
   * Returns true is the manager is currently waiting for any connections.
   */
  virtual bool GetPendingConnectionsPresent() VTK_OVERRIDE;

protected:
  vtkTCPNetworkAccessManager();
  ~vtkTCPNetworkAccessManager();

  // used by GetPendingConnectionsPresent and ProcessEvents
  int ProcessEventsInternal(unsigned long timeout_msecs, bool do_processing);

  /**
   * Connects to remote processes.
   */
  vtkMultiProcessController* ConnectToRemote(
    const char* hostname, int port, const char* handshake, int timeout_in_seconds);

  /**
   * Waits for connection from remote process.
   */
  vtkMultiProcessController* WaitForConnection(
    int port, bool once, const char* handshake, bool nonblocking);

  bool ParaViewHandshake(
    vtkMultiProcessController* controller, bool server_side, const char* handshake);

  bool AbortPendingConnectionFlag;

private:
  vtkTCPNetworkAccessManager(const vtkTCPNetworkAccessManager&) VTK_DELETE_FUNCTION;
  void operator=(const vtkTCPNetworkAccessManager&) VTK_DELETE_FUNCTION;

  class vtkInternals;
  vtkInternals* Internals;
};

#endif