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
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 TCPHandler::TCPHandler(NetSenderBase &theSender, NetReceiverBase &theReceiver)
00032 :TCPEndpoint(16384,16384)
00033 {
00034 sender = &theSender;
00035 receiver = &theReceiver;
00036 sender->setHandler(this);
00037 sizeOfDataToRead = 0;
00038 sendingDone = true;
00039
00040 sender->getPackage(131072*2);
00041 receiver->getPackage(8192);
00042
00043 }
00044
00045 void TCPHandler::setTransmitters(NetSenderBase& theSender, NetReceiverBase& theReceiver)
00046 {
00047 sender = &theSender;
00048 receiver = &theReceiver;
00049 sender->setHandler(this);
00050 }
00051
00052 void TCPHandler::onReceive(void* someData, int size)
00053 {
00054
00055
00056
00057
00058
00059
00060
00061 while(size > 0)
00062 {
00063
00064
00065
00066 if (sizeOfDataToRead == 0)
00067 {
00068
00069
00070 memcpy(&sizeOfDataToRead,someData,sizeof(int));
00071
00072
00073
00074 ASSERT(size>3);
00075
00076
00077 (char*)someData+=sizeof(int);
00078 size-=sizeof(int);
00079
00080
00081 if (sizeOfDataToRead > 0)
00082 {
00083 receiveBuffer=receiver->getPackage(sizeOfDataToRead);
00084 }
00085
00086
00087 }
00088 else
00089 {
00090
00091 if (sizeOfDataToRead > 0 && size != 0)
00092 {
00093 int bytesToRead = sizeOfDataToRead;
00094 if (bytesToRead > size) bytesToRead = size;
00095
00096
00097
00098
00099 memcpy(receiveBuffer,someData,bytesToRead);
00100
00101 sizeOfDataToRead -= bytesToRead;
00102 (char*)receiveBuffer += bytesToRead;
00103
00104 size -= bytesToRead;
00105 (char*)someData += bytesToRead;
00106
00107 }
00108
00109 if (sizeOfDataToRead == 0)
00110 {
00111
00112 receiver->onReceive();
00113 }
00114 }
00115 }
00116 }
00117
00118 void TCPHandler::onConnect(void)
00119 {
00120 cout << "TCPHandler::Connection established \n" << flush;
00121 sizeOfDataToRead = 0;
00122 sendingDone = true;
00123 sender->sendDone();
00124 }
00125
00126 void TCPHandler::onClose(int reason)
00127 {
00128 cout << "TCPHandler::Connection closed \n" << flush;
00129
00130 }
00131
00132 void TCPHandler::onSendingDone(void)
00133 {
00134 sendingDone=true;
00135 sender->sendDone();
00136 }
00137
00138 void TCPHandler::sendPackage(int senderNumber, void* someData,int size)
00139 {
00140
00141 sendingDone=false;
00142 if(status==connected)
00143 {
00144 send(someData,size);
00145 }
00146 }
00147