Click here to Skip to main content
15,914,074 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: Converting HANDLE to FILE* Pin
prasad_som30-Jan-07 18:07
prasad_som30-Jan-07 18:07 
Questionzip format using md5 rather than crc32? Pin
Seungbeom Roh30-Jan-07 14:30
Seungbeom Roh30-Jan-07 14:30 
AnswerRe: zip format using md5 rather than crc32? Pin
Christian Graus30-Jan-07 16:19
protectorChristian Graus30-Jan-07 16:19 
GeneralRe: zip format using md5 rather than crc32? Pin
Seungbeom Roh30-Jan-07 16:22
Seungbeom Roh30-Jan-07 16:22 
GeneralRe: zip format using md5 rather than crc32? Pin
Hamid_RT31-Jan-07 19:58
Hamid_RT31-Jan-07 19:58 
QuestionOne last IOCP question :) Pin
Polity4h30-Jan-07 11:51
Polity4h30-Jan-07 11:51 
AnswerRe: One last IOCP question :) Pin
Mark Salsbery30-Jan-07 12:21
Mark Salsbery30-Jan-07 12:21 
GeneralRe: One last IOCP question :) Pin
Polity4h30-Jan-07 12:55
Polity4h30-Jan-07 12:55 
i stripped the functions in the main code so its easier to read. this is what happends. i got a list of virtual sessions, every virtual session can be used once at a time (logical) as soon as a virtual session is released, at will be reset to another host and a post the the IOCP will be made with the task set to Begin. I've checked and counted. it one virtual session, the enum will be set to Begin and a post will be made, then he calls the member function RetrieveServerInfo which sets the buffers associated with the virtual session only, set the enum to RequestSend which sends the data. this happends one time, then it goes to after send and then the request send. till now all those steps have been held 1 time per session. After that he goes to afterrecieve. this step he repeates for a few time, even if the session is released. it might be that i use the same session AND OVERLAPPED structure for the new server query.

				while (pThis->m_bKeepAlive){ <br />
					BOOL bIORet = GetQueuedCompletionStatus ( // Get a completed IO request<br />
						   pThis->m_hIOCompiltionPort,<br />
						   &dwIoSize,<br />
						   reinterpret_cast<LPDWORD>(pThis),<br />
						   &ptrOverlapped, INFINITE);<br />
					ptrOverlappedPlus = reinterpret_cast<_OVERLAPPEDVirtualSession*>(ptrOverlapped);<br />
					ptrSession = ptrOverlappedPlus->pClientContext;<br />
<br />
					if (!bIORet){<br />
						__REPORT("Winsock error code: %i\n", GetLastError());<br />
						Gameye::Library::Thread::CMPThread::Sleep(0);<br />
					}<br />
					else{<br />
						CAbstractServerClass* ptrGameClass = (*pThis->m_ptrGameManager)[ptrSession->getNDServer()->GameID];<br />
						if (ptrGameClass == NULL){<br />
							__REPORT("Game is unknown, probably removed");<br />
						}<br />
						else{<br />
							objToolset.Session = ptrSession;<br />
							switch(ptrSession->getTask()){<br />
								case Begin: //Starts the procedure<br />
									pThis->m_objAddGameToolset.Session = ptrSession;<br />
									ptrGameClass->RequestServerInfo(ptrSession->getNDServer(), &pThis->m_objAddGameToolset);<br />
									break;<br />
								case RequestSend: //Request to send a packet<br />
									dwIoSize = 0;<br />
									iTemp = 0;<br />
									ptrSession->setStatus(AfterSend); <br />
									if (WSASendTo(ptrSession->getSocket(), <br />
										ptrSession->getWSABuffer(),<br />
										1,<br />
										&dwIoSize,<br />
										0,reinterpret_cast<sockaddr*>(ptrSession->getAddress()),<br />
										sizeof(sockaddr_in),<br />
										ptrSession->getOverlapped(), NULL) == -1)<br />
									{<br />
										int iErrorCode = WSAGetLastError();<br />
										if (iErrorCode == ERROR_IO_PENDING){<br />
											break;<br />
										}<br />
										else{<br />
											__REPORT("Recieving failed because: %i", WSAGetLastError());<br />
											pThis->ReleaseSession(ptrSession);<br />
										}<br />
									}<br />
								case AfterSend: //Call sending event<br />
									if (dwIoSize <= 1)<br />
										break;<br />
<br />
									ptrSession->incSendBytes(dwIoSize);<br />
									if (ptrGameClass->RetrieveServerInfo(ptrSession->getNDServer(), &objToolset) < 0){<br />
										__REPORT("%s->RetrieveServerInfo() failed", ptrGameClass->Gamename());<br />
										pThis->ReleaseSession(ptrSession);<br />
									}<br />
									break;<br />
								case RequestRecieve: //Request to recieve a packet<br />
									dwIoSize = 0;<br />
									iTemp = 0;<br />
									ptrSession->setStatus(AfterRecieve);<br />
									if (WSARecvFrom(ptrSession->getSocket(), <br />
										ptrSession->getWSABuffer(),<br />
										1,<br />
										&dwIoSize,<br />
										&iTemp,reinterpret_cast<sockaddr*>(ptrSession->getAddress()),<br />
										&iSockAddrSize,<br />
										ptrSession->getOverlapped(), NULL) == -1)<br />
									{<br />
										int iErrorCode = WSAGetLastError();<br />
										if (iErrorCode == ERROR_IO_PENDING){ <br />
											break;<br />
										}<br />
										else{<br />
											__REPORT("Recieving failed because: %i", WSAGetLastError());<br />
											pThis->ReleaseSession(ptrSession); <br />
										}<br />
									}<br />
								case AfterRecieve: //Call receiving event<br />
									if (dwIoSize == 1)<br />
										break;<br />
									ptrSession->incRecvBytes(dwIoSize);<br />
									if ((iTemp = ptrGameClass->UnpackServerInfo(ptrSession->getNDServer(), &objToolset)) == 0){//Session is finished!<br />
										pThis->FinishGame(ptrSession->getNDServer());<br />
									}<br />
									else if (iTemp > 0){ //coming more data<br />
										break;<br />
									}<br />
									else if (iTemp < 0){<br />
										__REPORT("%s->UnpackServerInfo() failed", ptrGameClass->Gamename());<br />
									}<br />
									pThis->ReleaseSession(ptrSession);<br />
									break;<br />
								default:<br />
									break; //Who knows?<br />
							}<br />
						}<br />
					}

GeneralRe: One last IOCP question :) Pin
Mark Salsbery30-Jan-07 13:42
Mark Salsbery30-Jan-07 13:42 
GeneralRe: One last IOCP question :) Pin
Polity4h30-Jan-07 14:04
Polity4h30-Jan-07 14:04 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery30-Jan-07 14:39
Mark Salsbery30-Jan-07 14:39 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery30-Jan-07 14:48
Mark Salsbery30-Jan-07 14:48 
GeneralRe: One last IOCP question :) Pin
Polity4h1-Feb-07 9:30
Polity4h1-Feb-07 9:30 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery1-Feb-07 10:19
Mark Salsbery1-Feb-07 10:19 
GeneralRe: One last IOCP question :) Pin
Polity4h1-Feb-07 11:08
Polity4h1-Feb-07 11:08 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery1-Feb-07 11:12
Mark Salsbery1-Feb-07 11:12 
GeneralRe: One last IOCP question :) Pin
Polity4h1-Feb-07 11:31
Polity4h1-Feb-07 11:31 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery1-Feb-07 11:53
Mark Salsbery1-Feb-07 11:53 
GeneralRe: One last IOCP question :) Pin
Polity4h1-Feb-07 11:54
Polity4h1-Feb-07 11:54 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery1-Feb-07 11:58
Mark Salsbery1-Feb-07 11:58 
GeneralRe: One last IOCP question :) Pin
Polity4h1-Feb-07 12:05
Polity4h1-Feb-07 12:05 
GeneralRe: One last IOCP question :) Pin
Mark Salsbery1-Feb-07 12:12
Mark Salsbery1-Feb-07 12:12 
Questiondisappearing check boxes Pin
maladuk30-Jan-07 11:13
maladuk30-Jan-07 11:13 
AnswerRe: disappearing check boxes Pin
James R. Twine30-Jan-07 11:23
James R. Twine30-Jan-07 11:23 
GeneralRe: disappearing check boxes Pin
maladuk30-Jan-07 23:31
maladuk30-Jan-07 23:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.