VTK  9.3.0
vtkSocketCommunicator.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
25#ifndef vtkSocketCommunicator_h
26#define vtkSocketCommunicator_h
27
28#include "vtkCommunicator.h"
29#include "vtkEndian.h" // for VTK_WORDS_BIGENDIAN
30#include "vtkParallelCoreModule.h" // For export macro
31
32#include "vtkByteSwap.h" // Needed for vtkSwap macros
33
34#ifdef VTK_WORDS_BIGENDIAN
35#define vtkSwap4 vtkByteSwap::Swap4LE
36#define vtkSwap4Range vtkByteSwap::Swap4LERange
37#define vtkSwap8 vtkByteSwap::Swap8LE
38#define vtkSwap8Range vtkByteSwap::Swap8LERange
39#else
40#define vtkSwap4 vtkByteSwap::Swap4BE
41#define vtkSwap4Range vtkByteSwap::Swap4BERange
42#define vtkSwap8 vtkByteSwap::Swap8BE
43#define vtkSwap8Range vtkByteSwap::Swap8BERange
44#endif
45
46VTK_ABI_NAMESPACE_BEGIN
47class vtkClientSocket;
48class vtkServerSocket;
49
50class VTKPARALLELCORE_EXPORT vtkSocketCommunicator : public vtkCommunicator
51{
52public:
55 void PrintSelf(ostream& os, vtkIndent indent) override;
56
58
62 virtual int WaitForConnection(int port);
63 virtual int WaitForConnection(vtkServerSocket* socket, unsigned long msec = 0);
65
69 virtual void CloseConnection();
70
74 virtual int ConnectTo(const char* hostName, int port);
75
77
80 vtkGetMacro(SwapBytesInReceivedData, int);
82
87
91 void SetNumberOfProcesses(int num) override;
92
93 //------------------ Communication --------------------
94
96
101 const void* data, vtkIdType length, int type, int remoteHandle, int tag) override;
102 int ReceiveVoidArray(void* data, vtkIdType length, int type, int remoteHandle, int tag) override;
104
109 void Barrier() override;
110
112
117 int BroadcastVoidArray(void* data, vtkIdType length, int type, int srcProcessId) override;
118 int GatherVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType length, int type,
119 int destProcessId) override;
120 int GatherVVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType sendLength,
121 vtkIdType* recvLengths, vtkIdType* offsets, int type, int destProcessId) override;
122 int ScatterVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType length, int type,
123 int srcProcessId) override;
124 int ScatterVVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType* sendLengths,
125 vtkIdType* offsets, vtkIdType recvLength, int type, int srcProcessId) override;
127 const void* sendBuffer, void* recvBuffer, vtkIdType length, int type) override;
128 int AllGatherVVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType sendLength,
129 vtkIdType* recvLengths, vtkIdType* offsets, int type) override;
130 int ReduceVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType length, int type,
131 int operation, int destProcessId) override;
132 int ReduceVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType length, int type,
133 Operation* operation, int destProcessId) override;
135 const void* sendBuffer, void* recvBuffer, vtkIdType length, int type, int operation) override;
136 int AllReduceVoidArray(const void* sendBuffer, void* recvBuffer, vtkIdType length, int type,
137 Operation* operation) override;
139
141
146 vtkSetClampMacro(PerformHandshake, vtkTypeBool, 0, 1);
147 vtkBooleanMacro(PerformHandshake, vtkTypeBool);
148 vtkGetMacro(PerformHandshake, vtkTypeBool);
150
152
156 virtual void SetLogStream(ostream* stream);
157 virtual ostream* GetLogStream();
159
161
167 virtual int LogToFile(const char* name);
168 virtual int LogToFile(const char* name, int append);
170
172
175 vtkSetMacro(ReportErrors, int);
176 vtkGetMacro(ReportErrors, int);
178
180
183 vtkGetObjectMacro(Socket, vtkClientSocket);
186
192
199
206
208
212 vtkGetMacro(IsServer, int);
214
219 static int GetVersion();
220
229 void BufferCurrentMessage() { this->BufferMessage = true; }
230
235
236protected:
242
244
245 ostream* LogFile;
246 ostream* LogStream;
247
250
251 // Wrappers around send/recv calls to implement loops. Return 1 for
252 // success, and 0 for failure.
253 int SendTagged(const void* data, int wordSize, int numWords, int tag, const char* logName);
254 int ReceiveTagged(void* data, int wordSize, int numWords, int tag, const char* logName);
255 int ReceivePartialTagged(void* data, int wordSize, int numWords, int tag, const char* logName);
256
258 void* data, int wordSize, int numWords, int tag, const char* logName);
259
263 void FixByteOrder(void* data, int wordSize, int numWords);
264
265 // Internal utility methods.
267 const char* name, const void* data, int wordSize, int numWords, int tag, const char* logName);
270
271private:
273 void operator=(const vtkSocketCommunicator&) = delete;
274
275 int SelectSocket(int socket, unsigned long msec);
276
277 // SwapBytesInReceiveData needs an invalid / not set.
278 // This avoids checking length of endian handshake.
279 enum ErrorIds
280 {
281 SwapOff = 0,
282 SwapOn,
283 SwapNotSet
284 };
285
286 // One may be tempted to change this to a vtkIdType, but really an int is
287 // enough since we split messages > VTK_INT_MAX.
288 int TagMessageLength;
289
290 // Buffer to save messages received with different tag than requested.
291 class vtkMessageBuffer;
292 vtkMessageBuffer* ReceivedMessageBuffer;
293};
294
295VTK_ABI_NAMESPACE_END
296#endif
Encapsulates a client socket.
A custom operation to use in a reduce command.
Used to send/receive messages in a multiprocess environment.
a simple class to control print indentation
Definition vtkIndent.h:29
Encapsulate a socket that accepts connections.
Process communication using Sockets.
int ReceiveVoidArray(void *data, vtkIdType length, int type, int remoteHandle, int tag) override
Performs the actual communication.
int ClientSideHandshake()
Performs ClientSide handshake.
int BroadcastVoidArray(void *data, vtkIdType length, int type, int srcProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int Handshake()
Performs handshake.
int GatherVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type, int destProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
virtual int LogToFile(const char *name, int append)
Log messages to the given file.
virtual int ConnectTo(const char *hostName, int port)
Open a connection to host.
int ServerSideHandshake()
Performs ServerSide handshake.
void Barrier() override
This class foolishly breaks the conventions of the superclass, so this overload fixes the method.
int GetIsConnected()
Is the communicator connected?.
int SendVoidArray(const void *data, vtkIdType length, int type, int remoteHandle, int tag) override
Performs the actual communication.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GatherVVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType sendLength, vtkIdType *recvLengths, vtkIdType *offsets, int type, int destProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int ReceivePartialTagged(void *data, int wordSize, int numWords, int tag, const char *logName)
virtual void CloseConnection()
Close a connection.
void FixByteOrder(void *data, int wordSize, int numWords)
Fix byte order for received data.
int SendTagged(const void *data, int wordSize, int numWords, int tag, const char *logName)
void LogTagged(const char *name, const void *data, int wordSize, int numWords, int tag, const char *logName)
int ReceivedTaggedFromBuffer(void *data, int wordSize, int numWords, int tag, const char *logName)
virtual int WaitForConnection(vtkServerSocket *socket, unsigned long msec=0)
Wait for connection on a given port.
int ReduceVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type, Operation *operation, int destProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
static int GetVersion()
Uniquely identifies the version of this class.
virtual int WaitForConnection(int port)
Wait for connection on a given port.
void SetNumberOfProcesses(int num) override
Set the number of processes you will be using.
virtual ostream * GetLogStream()
Get/Set the output stream to which communications should be logged.
int ScatterVVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType *sendLengths, vtkIdType *offsets, vtkIdType recvLength, int type, int srcProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int ScatterVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type, int srcProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int CheckForErrorInternal(int id)
int ReduceVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type, int operation, int destProcessId) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int AllGatherVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
virtual int LogToFile(const char *name)
Log messages to the given file.
~vtkSocketCommunicator() override
static vtkSocketCommunicator * New()
bool HasBufferredMessages()
Returns true if there are any messages in the receive buffer.
int AllGatherVVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType sendLength, vtkIdType *recvLengths, vtkIdType *offsets, int type) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int ReceiveTagged(void *data, int wordSize, int numWords, int tag, const char *logName)
void SetSocket(vtkClientSocket *)
Get/Set the actual socket used for communication.
virtual void SetLogStream(ostream *stream)
Get/Set the output stream to which communications should be logged.
int AllReduceVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type, Operation *operation) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
int AllReduceVoidArray(const void *sendBuffer, void *recvBuffer, vtkIdType length, int type, int operation) override
This class foolishly breaks the conventions of the superclass, so the default implementations of thes...
void BufferCurrentMessage()
This flag is cleared before vtkCommand::WrongTagEvent is fired when ever a message with mismatched ta...
int vtkTypeBool
Definition vtkABI.h:64
int vtkIdType
Definition vtkType.h:315