00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00053 #ifndef __vtkSocketCommunicator_h
00054 #define __vtkSocketCommunicator_h
00055
00056 #include "vtkCommunicator.h"
00057
00058 #include "vtkByteSwap.h"
00059
00060 #ifdef VTK_WORDS_BIGENDIAN
00061 # define vtkSwap4 vtkByteSwap::Swap4LE
00062 # define vtkSwap4Range vtkByteSwap::Swap4LERange
00063 # define vtkSwap8 vtkByteSwap::Swap8LE
00064 # define vtkSwap8Range vtkByteSwap::Swap8LERange
00065 #else
00066 # define vtkSwap4 vtkByteSwap::Swap4BE
00067 # define vtkSwap4Range vtkByteSwap::Swap4BERange
00068 # define vtkSwap8 vtkByteSwap::Swap8BE
00069 # define vtkSwap8Range vtkByteSwap::Swap8BERange
00070 #endif
00071
00072 class VTK_PARALLEL_EXPORT vtkSocketCommunicator : public vtkCommunicator
00073 {
00074 public:
00075 static vtkSocketCommunicator *New();
00076 vtkTypeRevisionMacro(vtkSocketCommunicator,vtkCommunicator);
00077 void PrintSelf(ostream& os, vtkIndent indent);
00078
00080 virtual int WaitForConnection(int port);
00081
00083 virtual void CloseConnection();
00084
00086 virtual int ConnectTo( char* hostName, int port);
00087
00089
00090 vtkGetMacro(SwapBytesInReceivedData, int);
00092
00094
00095 vtkGetMacro(IsConnected, int);
00097
00098
00099
00101
00103 int Send(int *data, int length, int remoteProcessId, int tag);
00104 int Send(unsigned long *data, int length, int remoteProcessId, int tag);
00105 int Send(char *data, int length, int remoteProcessId, int tag);
00106 int Send(unsigned char *data, int length, int remoteProcessId, int tag);
00107 int Send(float *data, int length, int remoteProcessId, int tag);
00108 int Send(double *data, int length, int remoteProcessId, int tag);
00109 #ifdef VTK_USE_64BIT_IDS
00110 int Send(vtkIdType *data, int length, int remoteProcessId, int tag);
00112 #endif
00113 int Send(vtkDataObject *data, int remoteId, int tag)
00114 {return this->vtkCommunicator::Send(data,remoteId,tag);}
00115 int Send(vtkDataArray *data, int remoteId, int tag)
00116 {return this->vtkCommunicator::Send(data,remoteId,tag);}
00117
00119
00122 int Receive(int *data, int length, int remoteProcessId, int tag);
00123 int Receive(unsigned long *data, int length, int remoteProcessId, int tag);
00124 int Receive(char *data, int length, int remoteProcessId, int tag);
00125 int Receive(unsigned char *data, int length, int remoteProcessId, int tag);
00126 int Receive(float *data, int length, int remoteProcessId, int tag);
00127 int Receive(double *data, int length, int remoteProcessId, int tag);
00128 #ifdef VTK_USE_64BIT_IDS
00129 int Receive(vtkIdType *data, int length, int remoteProcessId, int tag);
00131 #endif
00132 int Receive(vtkDataObject *data, int remoteId, int tag)
00133 {return this->vtkCommunicator::Receive(data, remoteId, tag);}
00134 int Receive(vtkDataArray *data, int remoteId, int tag)
00135 {return this->vtkCommunicator::Receive(data, remoteId, tag);}
00136
00138
00140 vtkSetClampMacro(PerformHandshake, int, 0, 1);
00141 vtkBooleanMacro(PerformHandshake, int);
00142 vtkGetMacro(PerformHandshake, int);
00144
00147 int ReceiveMessage(char *data, int *length, int maxlength);
00148
00150 int SendMessage(const char *data, int length);
00151
00152 protected:
00153
00154 int Socket;
00155 int IsConnected;
00156 int NumberOfProcesses;
00157 int SwapBytesInReceivedData;
00158 int PerformHandshake;
00159
00160 vtkSocketCommunicator();
00161 ~vtkSocketCommunicator();
00162
00163 int ReceiveMessage(char *data, int size, int length, int tag );
00164
00165 ofstream *TraceFile;
00166
00167 private:
00168 vtkSocketCommunicator(const vtkSocketCommunicator&);
00169 void operator=(const vtkSocketCommunicator&);
00170 };
00171
00172 #endif