00001
00002
00003
00004
00005
00006
00007 #ifndef _TCPEndpoint_H_
00008 #define _TCPEndpoint_H_
00009
00010 #include "IPEndpoint.h"
00011 #include <TCPEndpointMsg.h>
00012
00013
00014
00015
00016
00017 class TCPEndpoint : public IPEndpoint
00018 {
00019 public:
00020 enum statusID
00021 {
00022 closed,
00023 connecting,
00024 connected,
00025 listening,
00026 sending,
00027 receiving,
00028 closing
00029 };
00030
00031 TCPEndpoint(int sendBufferSize = 8192, int receiveBufferSize = 8192);
00032 TCPEndpoint(char* address,int port);
00033 ~TCPEndpoint();
00034
00035 int listen(int port);
00036 int connect(char* address, int port);
00037 int send(void* Data,int size);
00038
00039
00040 int close();
00041
00042 virtual void onConnect(void);
00043 virtual void onReceive(void* Data,int size);
00044 virtual void onClose(int reason);
00045 virtual void onSendingDone(void);
00046
00047 const char* getErrorString(TCPEndpointError error);
00048
00049 virtual void listenCont(antEnvMsg* msg);
00050 virtual void sendCont(antEnvMsg* msg);
00051 virtual void receiveCont(antEnvMsg* msg);
00052 virtual void closeCont(antEnvMsg* msg);
00053 virtual void connectCont(antEnvMsg* msg);
00054
00055 statusID getStatus(void) {return(status);};
00056
00057
00058
00059 protected:
00060 IPAddress address;
00061 Port port;
00062 statusID status;
00063 void startReceiving();
00064 bool wasListening;
00065 int sizeOfDataToSend;
00066 void* sendDataBuffer;
00067
00068 private:
00069 void sendSendMessage(int size);
00070
00071 };
00072
00073
00074
00075
00076
00077
00078 class TestServer : public TCPEndpoint
00079 {
00080
00081 public:
00082
00083 TestServer():TCPEndpoint(){};
00084 virtual void onConnect(void)
00085 {
00086 char* hello = "I am an AIBO ERS-210 (Wau Wau). Who are you \n";
00087 this->send(hello,strlen(hello)+1);
00088 }
00089
00090 virtual void onReceive(void* data, int size)
00091 {
00092 char antwort[255];
00093 char* data1 = (char*) data;
00094 data1[size] = 0;
00095 sprintf(antwort,"Hi %s \n",(char*) data1);
00096
00097 if (data1[0]=='q')
00098 {
00099 close();
00100 }
00101 else
00102 {
00103 this->send(antwort,strlen(antwort));
00104 }
00105
00106 }
00107
00108
00109
00110 };
00111
00112
00113 #endif
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145