00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "Receiver.h"
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 Receiver::Receiver(int iPort)
00026 {
00027 m_iPort=iPort;
00028 }
00029
00030
00031
00032
00033
00034
00035
00036 Receiver::~Receiver()
00037 {
00038 showFrags(m_pmcfvecNew,false);
00039 showFrags(m_pmcfvecOrdered,false);
00040 }
00041
00042
00043
00044
00045
00046
00047 void Receiver::run(void)
00048 {
00049 RNPRESULT rnprTmp;
00050 RNPacket rnpRecv;
00051 RNSocket rnsListener;
00052
00053
00054 if(rnpRecv.initMessageCallBack(this,StaticMessageHandler) == RNP_OK)
00055 {
00056 printf("MessageHandler inited.\n");
00057 }
00058 else
00059 {
00060 return;
00061 }
00062
00063
00064 if (!rnsListener.create())
00065 {
00066 printf("Could not create Socket to listen.\n");
00067 return;
00068 }
00069
00070
00071 if (!rnsListener.bind(NULL,m_iPort))
00072 {
00073 printf("Could not bind Socket to listen.\n");
00074
00075 return;
00076 }
00077
00078
00079 if (!rnsListener.listen())
00080 {
00081 printf("Could not listen, Socket Error.\n");
00082 return;
00083 }
00084
00085 printf("Listening...");
00086
00087
00088 do
00089 {
00090 rnprTmp=rnpRecv.socketAccept(&rnsListener);
00091
00092 if (kbhit())
00093 {
00094 printf("\nUser aborted.\n");
00095 getch();
00096 return;
00097 }
00098
00099 Sleep(100);
00100 printf(".");
00101 } while (rnprTmp == RNP_SOCKET_NOT_CONNECTED);
00102
00103 printf("\n");
00104
00105
00106 if (rnprTmp != RNP_OK)
00107 {
00108 printf("Error occured.\n");
00109 return;
00110 }
00111
00112
00113 printf("Connection established.\n");
00114
00115
00116 do
00117 {
00118 rnprTmp=rnpRecv.recvMessage();
00119
00120 if (kbhit())
00121 {
00122 printf("User aborted.\n");
00123 getch();
00124 return;
00125 }
00126 } while (rnprTmp != RNP_SOCKET_NOT_CONNECTED);
00127
00128 printf("Connection closed.\n");
00129
00130
00131 if(rnpRecv.socketClose() == RNP_OK)
00132 {
00133 printf("Socket closed.\n");
00134 }
00135 else
00136 {
00137 printf("Error occured while closing Socket.\n");
00138 }
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148 int Receiver::findPacketNr(FragVec &pmcfvecSrc, DWORD dwPacketNr)
00149 {
00150 int iCount;
00151
00152 for (iCount=0; iCount<pmcfvecSrc.size();iCount++)
00153 {
00154
00155 if (pmcfvecSrc[iCount]->m_dwPacketNr==dwPacketNr)
00156 {
00157
00158 return iCount;
00159 }
00160 }
00161
00162
00163 return -1;
00164 }
00165
00166
00167
00168
00169
00170
00171
00172 void Receiver::showFrags(FragVec &pmcfvecSrc, bool bShow)
00173 {
00174 MessageCharFragment* pmcfTmp;
00175 char pcBuffer[c_dwSizeCharFragment+1];
00176 int iCount=0;
00177
00178 while (pmcfvecSrc.size()>0)
00179 {
00180 pmcfTmp=*(pmcfvecSrc.begin());
00181
00182 if (pmcfTmp != NULL)
00183 {
00184 if (bShow==true)
00185 {
00186 strncpy(pcBuffer,pmcfTmp->m_cBuffer,c_dwSizeCharFragment);
00187 pcBuffer[c_dwSizeCharFragment]=0;
00188 printf("%s",pcBuffer);
00189 iCount++;
00190 }
00191
00192 delete pmcfTmp;
00193 }
00194
00195 pmcfvecSrc.erase(pmcfvecSrc.begin());
00196 }
00197
00198 if (iCount>0)
00199 {
00200 printf("\n%i Fragments showed.\n",iCount);
00201 }
00202 }
00203
00204
00205
00206
00207
00208
00209
00210 RNPRESULT Receiver::StaticMessageHandler( void* pvoidUserContext,
00211 void* pvoidPacket,
00212 WORD wSize)
00213 {
00214 Receiver* pThisObject = (Receiver*) pvoidUserContext;
00215
00216 return pThisObject->MessageHandler(pvoidPacket,wSize);
00217 }
00218
00219
00220
00221
00222
00223
00224
00225
00226 RNPRESULT Receiver::MessageHandler(void* pvoidPacket, WORD wSize)
00227 {
00228 MessageGeneric* pmsgTmp= (MessageGeneric*)pvoidPacket;
00229
00230 switch (pmsgTmp->m_Type)
00231 {
00232 case MSGID_CHARFRAGMENT:
00233 {
00234 MessageCharFragment* pmsgcfTmp= (MessageCharFragment*)pmsgTmp;
00235 m_pmcfvecNew.push_back(pmsgcfTmp);
00236
00237 int iPos;
00238 DWORD dwFind=c_dwFirstCharFragment;
00239
00240 do
00241 {
00242 if (m_pmcfvecOrdered.size()>0)
00243 {
00244 dwFind=(*(m_pmcfvecOrdered.end()-1))->m_dwNextPacketNr;
00245 }
00246
00247 iPos=findPacketNr(m_pmcfvecNew,dwFind);
00248
00249 if (iPos!=-1)
00250 {
00251 m_pmcfvecOrdered.push_back(m_pmcfvecNew[iPos]);
00252 m_pmcfvecNew.erase(m_pmcfvecNew.begin()+iPos);
00253 }
00254
00255 } while (iPos!=-1);
00256
00257 if ((*(m_pmcfvecOrdered.end()-1))->m_dwNextPacketNr==c_dwLastCharFragment)
00258 {
00259 showFrags(m_pmcfvecOrdered);
00260 }
00261 }
00262 return RNP_BUFFER_IN_USE;
00263 break;
00264
00265 default:
00266 return RNP_BUFFER_RETURNED;
00267 }
00268
00269 return RNP_BUFFER_RETURNED;
00270 }
00271
00272
00273
00274