00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00046 #ifndef __vtkSocketCommunicator_h
00047 #define __vtkSocketCommunicator_h
00048
00049 #ifdef _WIN32
00050 #include <winsock2.h>
00051 #else
00052 #include <sys/types.h>
00053 #include <sys/socket.h>
00054 #include <netinet/in.h>
00055 #include <arpa/inet.h>
00056 #include <netdb.h>
00057 #include <unistd.h>
00058 #endif
00059
00060 #include "vtkObject.h"
00061 #include "vtkMultiProcessController.h"
00062
00063
00064 class VTK_EXPORT vtkSocketCommunicator : public vtkMultiProcessController
00065 {
00066 public:
00067 static vtkSocketCommunicator *New();
00068 vtkTypeMacro(vtkSocketCommunicator,vtkMultiProcessController);
00069 void PrintSelf(ostream& os, vtkIndent indent);
00070
00072 virtual void Initialize(int vtkNotUsed(argc), char *arcv[]);
00073
00077 void SingleMethodExecute() {};
00078
00082 void MultipleMethodExecute() {};
00083
00085 virtual void SetNumberOfProcesses(int num);
00086
00088 virtual int WaitForConnection(int port, int timeout, int processId);
00089
00091 virtual void CloseConnection(int processId);
00092
00094 virtual int ConnectTo( char* hostName, int port, int processId );
00095
00096
00097
00100 int Send(int *data, int length, int remoteProcessId, int tag);
00101 int Send(unsigned long *data, int length, int remoteProcessId, int tag);
00102 int Send(char *data, int length, int remoteProcessId, int tag);
00103 int Send(float *data, int length, int remoteProcessId, int tag);
00104 int Send(vtkDataObject *data, int remoteId, int tag)
00105 {return this->vtkMultiProcessController::Send(data,remoteId,tag);}
00106
00110 int Receive(int *data, int length, int remoteProcessId, int tag);
00111 int Receive(unsigned long *data, int length, int remoteProcessId, int tag);
00112 int Receive(char *data, int length, int remoteProcessId, int tag);
00113 int Receive(float *data, int length, int remoteProcessId, int tag);
00114 int Receive(vtkDataObject *data, int remoteId, int tag)
00115 {return this->vtkMultiProcessController::Receive(data, remoteId, tag);}
00116
00117 protected:
00118
00119 int* Sockets;
00120 int* IsConnected;
00121
00122 vtkSocketCommunicator();
00123 ~vtkSocketCommunicator();
00124 vtkSocketCommunicator(const vtkSocketCommunicator&) {};
00125 void operator=(const vtkSocketCommunicator&) {};
00126
00127
00128 int Initialized;
00129
00130 };
00131
00132
00133 #endif
00134
00135