Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Parallel/vtkSocketCommunicator.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkSocketCommunicator.h,v $ 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00036 #ifndef __vtkSocketCommunicator_h 00037 #define __vtkSocketCommunicator_h 00038 00039 #include "vtkCommunicator.h" 00040 00041 #include "vtkByteSwap.h" // Needed for vtkSwap macros 00042 00043 #ifdef VTK_WORDS_BIGENDIAN 00044 # define vtkSwap4 vtkByteSwap::Swap4LE 00045 # define vtkSwap4Range vtkByteSwap::Swap4LERange 00046 # define vtkSwap8 vtkByteSwap::Swap8LE 00047 # define vtkSwap8Range vtkByteSwap::Swap8LERange 00048 #else 00049 # define vtkSwap4 vtkByteSwap::Swap4BE 00050 # define vtkSwap4Range vtkByteSwap::Swap4BERange 00051 # define vtkSwap8 vtkByteSwap::Swap8BE 00052 # define vtkSwap8Range vtkByteSwap::Swap8BERange 00053 #endif 00054 00055 class VTK_PARALLEL_EXPORT vtkSocketCommunicator : public vtkCommunicator 00056 { 00057 public: 00058 static vtkSocketCommunicator *New(); 00059 vtkTypeRevisionMacro(vtkSocketCommunicator,vtkCommunicator); 00060 void PrintSelf(ostream& os, vtkIndent indent); 00061 00063 virtual int WaitForConnection(int port); 00064 00066 virtual void CloseConnection(); 00067 00069 virtual int ConnectTo( char* hostName, int port); 00070 00072 00073 vtkGetMacro(SwapBytesInReceivedData, int); 00075 00077 00078 vtkGetMacro(IsConnected, int); 00080 00081 //------------------ Communication -------------------- 00082 00084 00086 int Send(int *data, int length, int remoteProcessId, int tag); 00087 int Send(unsigned long *data, int length, int remoteProcessId, int tag); 00088 int Send(char *data, int length, int remoteProcessId, int tag); 00089 int Send(unsigned char *data, int length, int remoteProcessId, int tag); 00090 int Send(float *data, int length, int remoteProcessId, int tag); 00091 int Send(double *data, int length, int remoteProcessId, int tag); 00092 #ifdef VTK_USE_64BIT_IDS 00093 int Send(vtkIdType *data, int length, int remoteProcessId, int tag); 00095 #endif 00096 int Send(vtkDataObject *data, int remoteId, int tag) 00097 {return this->vtkCommunicator::Send(data,remoteId,tag);} 00098 int Send(vtkDataArray *data, int remoteId, int tag) 00099 {return this->vtkCommunicator::Send(data,remoteId,tag);} 00100 00102 00105 int Receive(int *data, int length, int remoteProcessId, int tag); 00106 int Receive(unsigned long *data, int length, int remoteProcessId, int tag); 00107 int Receive(char *data, int length, int remoteProcessId, int tag); 00108 int Receive(unsigned char *data, int length, int remoteProcessId, int tag); 00109 int Receive(float *data, int length, int remoteProcessId, int tag); 00110 int Receive(double *data, int length, int remoteProcessId, int tag); 00111 #ifdef VTK_USE_64BIT_IDS 00112 int Receive(vtkIdType *data, int length, int remoteProcessId, int tag); 00114 #endif 00115 int Receive(vtkDataObject *data, int remoteId, int tag) 00116 {return this->vtkCommunicator::Receive(data, remoteId, tag);} 00117 int Receive(vtkDataArray *data, int remoteId, int tag) 00118 {return this->vtkCommunicator::Receive(data, remoteId, tag);} 00119 00121 00123 vtkSetClampMacro(PerformHandshake, int, 0, 1); 00124 vtkBooleanMacro(PerformHandshake, int); 00125 vtkGetMacro(PerformHandshake, int); 00127 00128 //BTX 00130 00132 virtual void SetLogStream(ostream* stream); 00133 virtual ostream* GetLogStream(); 00134 //ETX 00136 00138 00142 virtual int LogToFile(const char* name); 00143 virtual int LogToFile(const char* name, int append); 00145 00146 protected: 00147 00148 int Socket; 00149 int IsConnected; 00150 int NumberOfProcesses; 00151 int SwapBytesInReceivedData; 00152 int PerformHandshake; 00153 00154 ofstream* LogFile; 00155 ostream* LogStream; 00156 00157 vtkSocketCommunicator(); 00158 ~vtkSocketCommunicator(); 00159 00160 // Wrappers around send/recv calls to implement loops. Return 1 for 00161 // success, and 0 for failure. 00162 int SendInternal(int socket, void* data, int length); 00163 int ReceiveInternal(int socket, void* data, int length); 00164 int SendTagged(void* data, int wordSize, int numWords, int tag, 00165 const char* logName); 00166 int ReceiveTagged(void* data, int wordSize, int numWords, int tag, 00167 const char* logName); 00168 00169 // Internal utility methods. 00170 void LogTagged(const char* name, void* data, int wordSize, int numWords, 00171 int tag, const char* logName); 00172 int CheckForErrorInternal(int id); 00173 private: 00174 vtkSocketCommunicator(const vtkSocketCommunicator&); // Not implemented. 00175 void operator=(const vtkSocketCommunicator&); // Not implemented. 00176 }; 00177 00178 #endif