00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00040 #ifndef __vtkSocketCommunicator_h
00041 #define __vtkSocketCommunicator_h
00042
00043 #include "vtkCommunicator.h"
00044
00045 #include "vtkByteSwap.h"
00046
00047 #ifdef VTK_WORDS_BIGENDIAN
00048 # define vtkSwap4 vtkByteSwap::Swap4LE
00049 # define vtkSwap4Range vtkByteSwap::Swap4LERange
00050 # define vtkSwap8 vtkByteSwap::Swap8LE
00051 # define vtkSwap8Range vtkByteSwap::Swap8LERange
00052 #else
00053 # define vtkSwap4 vtkByteSwap::Swap4BE
00054 # define vtkSwap4Range vtkByteSwap::Swap4BERange
00055 # define vtkSwap8 vtkByteSwap::Swap8BE
00056 # define vtkSwap8Range vtkByteSwap::Swap8BERange
00057 #endif
00058
00059 class VTK_PARALLEL_EXPORT vtkSocketCommunicator : public vtkCommunicator
00060 {
00061 public:
00062 static vtkSocketCommunicator *New();
00063 vtkTypeRevisionMacro(vtkSocketCommunicator,vtkCommunicator);
00064 void PrintSelf(ostream& os, vtkIndent indent);
00065
00067 virtual int WaitForConnection(int port);
00068
00070 virtual void CloseConnection();
00071
00073 virtual int ConnectTo( char* hostName, int port);
00074
00076
00077 vtkGetMacro(SwapBytesInReceivedData, int);
00079
00081
00082 vtkGetMacro(IsConnected, int);
00084
00085
00086
00088
00090 int Send(int *data, int length, int remoteProcessId, int tag);
00091 int Send(unsigned long *data, int length, int remoteProcessId, int tag);
00092 int Send(char *data, int length, int remoteProcessId, int tag);
00093 int Send(unsigned char *data, int length, int remoteProcessId, int tag);
00094 int Send(float *data, int length, int remoteProcessId, int tag);
00095 int Send(double *data, int length, int remoteProcessId, int tag);
00096 #ifdef VTK_USE_64BIT_IDS
00097 int Send(vtkIdType *data, int length, int remoteProcessId, int tag);
00099 #endif
00100 int Send(vtkDataObject *data, int remoteId, int tag)
00101 {return this->vtkCommunicator::Send(data,remoteId,tag);}
00102 int Send(vtkDataArray *data, int remoteId, int tag)
00103 {return this->vtkCommunicator::Send(data,remoteId,tag);}
00104
00106
00109 int Receive(int *data, int length, int remoteProcessId, int tag);
00110 int Receive(unsigned long *data, int length, int remoteProcessId, int tag);
00111 int Receive(char *data, int length, int remoteProcessId, int tag);
00112 int Receive(unsigned char *data, int length, int remoteProcessId, int tag);
00113 int Receive(float *data, int length, int remoteProcessId, int tag);
00114 int Receive(double *data, int length, int remoteProcessId, int tag);
00115 #ifdef VTK_USE_64BIT_IDS
00116 int Receive(vtkIdType *data, int length, int remoteProcessId, int tag);
00118 #endif
00119 int Receive(vtkDataObject *data, int remoteId, int tag)
00120 {return this->vtkCommunicator::Receive(data, remoteId, tag);}
00121 int Receive(vtkDataArray *data, int remoteId, int tag)
00122 {return this->vtkCommunicator::Receive(data, remoteId, tag);}
00123
00125
00127 vtkSetClampMacro(PerformHandshake, int, 0, 1);
00128 vtkBooleanMacro(PerformHandshake, int);
00129 vtkGetMacro(PerformHandshake, int);
00131
00134 int ReceiveMessage(char *data, int *length, int maxlength);
00135
00137 int SendMessage(const char *data, int length);
00138
00139 protected:
00140
00141 int Socket;
00142 int IsConnected;
00143 int NumberOfProcesses;
00144 int SwapBytesInReceivedData;
00145 int PerformHandshake;
00146
00147 vtkSocketCommunicator();
00148 ~vtkSocketCommunicator();
00149
00150 int ReceiveMessage(char *data, int size, int length, int tag );
00151
00152 ofstream *TraceFile;
00153
00154 private:
00155 vtkSocketCommunicator(const vtkSocketCommunicator&);
00156 void operator=(const vtkSocketCommunicator&);
00157 };
00158
00159 #endif