00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "TCPHandler.h"
00011
00012 #include <stdio.h>
00013 #include <iostream.h>
00014 #include <iomanip.h>
00015
00016
00017 TCPHandler::TCPHandler(NetSenderBase &theSender, NetReceiverBase &theReceiver)
00018 :TCPEndpoint(16384,16384)
00019 {
00020 sender = &theSender;
00021 receiver = &theReceiver;
00022 sender->setHandler(this);
00023 sizeOfDataToRead = 0;
00024 sendingDone = true;
00025
00026 sender->getPackage(131072*2);
00027 receiver->getPackage(8192);
00028
00029 }
00030
00031 void TCPHandler::setTransmitters(NetSenderBase& theSender, NetReceiverBase& theReceiver)
00032 {
00033 sender = &theSender;
00034 receiver = &theReceiver;
00035 sender->setHandler(this);
00036 }
00037
00038 void TCPHandler::onReceive(void* someData, int size)
00039 {
00040
00041
00042
00043
00044
00045
00046
00047 while(size > 0)
00048 {
00049
00050
00051
00052 if (sizeOfDataToRead == 0)
00053 {
00054
00055
00056 memcpy(&sizeOfDataToRead,someData,sizeof(int));
00057
00058
00059
00060 ASSERT(size>3);
00061
00062
00063 (char*)someData+=sizeof(int);
00064 size-=sizeof(int);
00065
00066
00067 if (sizeOfDataToRead > 0)
00068 {
00069 receiveBuffer=receiver->getPackage(sizeOfDataToRead);
00070 }
00071
00072
00073 }
00074 else
00075 {
00076
00077 if (sizeOfDataToRead > 0 && size != 0)
00078 {
00079 int bytesToRead = sizeOfDataToRead;
00080 if (bytesToRead > size) bytesToRead = size;
00081
00082
00083
00084
00085 memcpy(receiveBuffer,someData,bytesToRead);
00086
00087 sizeOfDataToRead -= bytesToRead;
00088 (char*)receiveBuffer += bytesToRead;
00089
00090 size -= bytesToRead;
00091 (char*)someData += bytesToRead;
00092
00093 }
00094
00095 if (sizeOfDataToRead == 0)
00096 {
00097
00098 receiver->onReceive();
00099 }
00100 }
00101 }
00102 }
00103
00104 void TCPHandler::onConnect(void)
00105 {
00106 cout << "TCPHandler::Connection established \n" << flush;
00107 sizeOfDataToRead = 0;
00108 sendingDone = true;
00109 sender->sendDone();
00110 }
00111
00112 void TCPHandler::onClose(int reason)
00113 {
00114 cout << "TCPHandler::Connection closed \n" << flush;
00115
00116 }
00117
00118 void TCPHandler::onSendingDone(void)
00119 {
00120 sendingDone=true;
00121 sender->sendDone();
00122 }
00123
00124 void TCPHandler::sendPackage(int senderNumber, void* someData,int size)
00125 {
00126
00127 sendingDone=false;
00128 if(status==connected)
00129 {
00130 send(someData,size);
00131 }
00132 }
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173