⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				DBGPRINTF("NETWORK ERR: GET OPPONENT NICK----%s", returnInfo[0]);
				m_nErrorType = LINK_ERROR_GETOPNICK;
				break;
			}
			p += 10;
			STRCPY(temp, p);
			OpAveRank = ATOI(temp);

//			temp = STRCHREND(returnInfo[0], ' ');
//			temp++;
//			STRNCPY( OpnickName, temp, 10);
//			if( STRLEN(temp)<10 )
//				OpnickName[STRLEN(temp)]=0;
		}		
		else{
			DBGPRINTF("NETWORK ERR: GET OPPONENT NICK----%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_GETOPNICK;
		}
		break;		
	case LINK_CHALLENGE:
	case LINK_A_CHALLENGE:
		if (STRBEGINS("CHALLENGE=" , returnVal))
		{
			if( !bWopponent )
			{
				DBGPRINTF("NETWORK ERR: CANNOT CHALLENGE WHEN ACCEPT CHALLENGE----%s", returnVal);
				m_nErrorType = LINK_ERROR_CANNOT_CHAL_WHEN_ACCEPT;
			}
		}
		else if (STRBEGINS("ACCEPT_CHALLENGE=" , returnVal))
		{
			if( !bOpponent )
			{
				DBGPRINTF("NETWORK ERR: CANNOT ACCEPT CHALLENGE WHEN CHALLENGE----%s", returnVal);
				m_nErrorType = LINK_ERROR_CANNOT_ACCEPT_WHEN_CHAL;
			}
		}
		else if (STREQ(returnInfo[0] , "WAITING REPLY"))
		{
			statusOfLink = LINK_CHECK;
		}
		else if(STREQ(returnInfo[0] , "CHALLENGE ACCEPTED"))
		{
			if (STRBEGINS("GID=" ,returnVal))
			{
				temp = STRCHREND(returnVal , '=');
				temp++;
				STRNCPY( gameID, temp, 80);
				if( STRLEN(temp)<80 )
					gameID[STRLEN(temp)]=0;

				statusOfLink = LINK_GAME_RUN;

				challengeState = CHALLENGE_ACCEPTED;

				current_turn = 0;
			}
		}
		else if(STREQ(returnInfo[0], "CHALLENGE CANCELLED"))
		{
			statusOfLink = LINK_IDLE;
			challengeState = CHALLENGE_REJECTED;
		}
		else	//others
		{
			DBGPRINTF("NETWORK ERR: CHALLENGE FAILED----%s", returnInfo[0]);
			//m_nErrorType = ;
			statusOfLink = LINK_IDLE;
			challengeState = CHALLENGE_REJECTED;
		}
		break;

	case  LINK_GAME_RUN:
		if ( STRBEGINS("YOUR SCOREBOARD: ", returnInfo[0]))
		{
			if( statusOfOnline == WEB_STATE_KEEPCONNECT )
			{
				statusOfOnline = WEB_STATE_NONE;
			}
			if(STREQ(returnInfo[1] , "WAITING FOR OPPONENT TO PLAY")) 
			{

				if( scoreState == SCORE_SEND )
				{
					STRCPY(nextSEQ, "");
					scoreState = SCORE_WAITRIVAL;
				}

			}
			else if(STREQ(returnInfo[1] , "PLAY NEXT FRAME")||STREQ(returnInfo[1] , "GAME OVER"))
			{
				if( scoreState == SCORE_WAITRIVAL || scoreState == SCORE_SEND )
				{
					current_turn = ((CGame*)m_pEngine->m_pGame)->GetMatch()->GetCurRoundNumber()+1;
					{
						char checkmyscore[21];
						STRNCPY(checkmyscore, returnInfo[0]+17, 21);
						if( checkmyscore[(current_turn -1)*2] == '-' && checkmyscore[(current_turn -1)*2+1] == '-')
						{
							scoreState = SCORE_SEND;
							break;
						}
					}
					STRNCPY(score, returnInfo[0] + 55, 21);

					STRCPY(nextSEQ, "");
					scoreState = SCORE_RECEIVERIVAL;

					if (current_turn != 10)
					{
						if (score[(current_turn - 1)*2] != 'A')
							data[0] = score[(current_turn - 1)*2] - 48;
						else
							data[0] = 10;

						if (score[(current_turn - 1)*2+1] != 'A')
						{
							if( score[(current_turn - 1)*2+1] != '.' )
								data[1] = score[(current_turn - 1)*2+1] - 48;
							else
								data[1] = 0;
						}
						else
							data[1] =10;

						data[2] = -1;
					}
					else
					{
						if (score[(current_turn - 1)*2] != 'A')
							data[0] = score[(current_turn - 1)*2] - 48;
						else
							data[0] = 10;
						
						if (score[(current_turn - 1)*2+1] != 'A')
						{
							if( score[(current_turn - 1)*2+1] != '.' )
								data[1] = score[(current_turn - 1)*2+1] - 48;
							else
								data[1] = 0;
						}
						else
							data[1] =10;

						if (score[(current_turn - 1)*2+2] != 'A')
							data[2] = score[(current_turn - 1)*2+2] - 48;
						else
							data[2] =10;

					}
					processReceiveData();
					bOpScoreValid = true;
				}

			}

		}			
		else if( STRBEGINS("YOUR SCORE: ", returnInfo[0]))
		{
			//(YOUR SCORE: **, YOUR OPPONENT: **)(NICK:****,WIN:0,LOSS:1,DRAW:0,SCORE:0,RANK:2)
			if( statusOfOnline == WEB_STATE_GETGAMERESULT )
			{
				statusOfOnline = WEB_STATE_NONE;
			}
			bgetGameResult = true;
		}
		else if (STRBEGINS("NICK:", returnInfo[0])&& statusOfOnline == WEB_STATE_GETGAMERESULT )
		{
			statusOfOnline = WEB_STATE_NONE;
		}
		else
		{
			if( statusOfOnline == WEB_STATE_KEEPCONNECT )
			{
				statusOfOnline = WEB_STATE_NONE;
				connecterror = true;
			}
			else
			{
				DBGPRINTF("NETWORK ERR: IN GAME ERROR---%s", returnInfo[0]);
				m_nErrorType = LINK_ERROR_INGAME;
			}
		}		 
		break;
	case LINK_CLEAR:
		if(STREQ(returnInfo[0] , "CLEAR")&& statusOfOnline == WEB_STATE_INIT)
		{
			statusOfOnline = WEB_STATE_NONE;
		}
		else{
			DBGPRINTF("NETWORK ERR: CLEAR ERROR---%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_CLEAR;
		}
		break;
	case LINK_GETINFO:
		if( STRSTR(returnInfo[0] , "NICK") )
		{
			char result[128];
			char *p,*q;
			char temp[16];

			STRCPY(result, returnInfo[0]);
			
			//get win/loss/draw
			p =  STRSTR(result, "WIN");
			if( p == NULL )
			{
				//GET RESULT ERROR
				m_nErrorType = 8;
				break;
			}
			p+= 4;
			q = STRSTR(p, ",");
			STRNCPY(temp, p, q-p);
			temp[q-p]=0;
			m_Win = ATOI(temp);

			p = STRSTR(result, "LOSS" );
			if( p == NULL )
			{
				//GET RESULT ERROR
				m_nErrorType = 8;
				break;
			}
			p += 5;
			q = STRSTR(p, ",");
			STRNCPY(temp, p, q-p);
			temp[q-p]=0;
			m_Loss = ATOI(temp);

			p = STRSTR( result, "DRAW" );
			if( p == NULL )
			{
				//GET RESULT ERROR
				m_nErrorType = 8;
				break;
			}
			p += 5;
			q = STRSTR(p, ",");
			STRNCPY(temp, p, q-p);
			temp[q-p]=0;
			m_Draw = ATOI(temp);

			//get rank score
			p = STRSTR(result, "HIGHSCORE");
			if( p == NULL )
			{
				//GET RESULT ERROR
				m_nErrorType = 8;
				break;
			}
			p += 10;
			q = STRSTR(p, ",");
			STRNCPY(temp, p, q-p);
			temp[q-p]=0;
			m_highScore = ATOI(temp);

			//get win rank
			p = STRSTR(result, "WINRANK");
			if( p == NULL )
			{
				//GET RESULT ERROR
				m_nErrorType = 8;
				break;
			}
			p += 8;
			q = STRSTR(p, ",");
			STRNCPY(temp, p, q-p);
			temp[q-p]=0;
			m_winRank = ATOI(temp);

			//get average rank
			p = STRSTR(result, "SCORERANK");
			if( p == NULL )
			{
				//GET RESULT ERROR
				m_nErrorType = 8;
				break;
			}
			p += 10;
			STRCPY(temp, p);
			m_aveRank = ATOI(temp);

			bValidInfo = true;
		}
		else
		{
			DBGPRINTF("NETWORK ERR: GET INFO ERROR---%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_GETINFO;
		}
		break;
		
	case LINK_GETHIGHRANK:
		if( STRSTR(returnInfo[0] , "EMPTY") )
		{
			bHighRankValid = true;
		}
		else if( STRSTR(returnInfo[0] , "=") )
		{
			int i=0;
			char *p,*q;
			char scr[10];
			char result[210];
			
			STRCPY( result, returnInfo[0] );
			p = result;
			q = STRSTR(p,"=");
			while( q )
			{
				STRNCPY(pHighRank[i].name,p,q-p);
				if( q-p < 10 )
					pHighRank[i].name[q-p]=0;
				p = q+1;
				q = STRSTR(p,",");
				if( NULL == q )
				{
					q = result + STRLEN(result);
				}
				STRNCPY(scr,p,q-p);
				if( q-p < 10 )
					scr[q-p]=0;
				pHighRank[i].score = ATOI(scr);

				q = STRSTR(p,"=");
				p = STRSTR(p,",");
				if( p ) p++; 
				i++;
			}
			bHighRankValid = true;
		}
		else
		{
			DBGPRINTF("NETWORK ERR: GET HIGH RANK ERROR---%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_GETHIGHRANK;
		}
		break;

	case LINK_GETAVERANK:
		//(mn1tpgoj=0,1006=0)
		if( STRSTR(returnInfo[0] , "EMPTY") )
		{
			bAveRankValid = true;
		}
		else if( STRSTR(returnInfo[0] , "=") )
		{
			int i=0;
			char *p,*q;
			char scr[10];
			char result[210];
			
			STRCPY( result, returnInfo[0] );
			p = result;
			q = STRSTR(p,"=");
			while( q )
			{
				STRNCPY(pAveRank[i].name,p,q-p);
				if( q-p < 10 )
					pAveRank[i].name[q-p]=0;
				p = q+1;
				q = STRSTR(p,",");
				if( NULL == q )
				{
					q = result + STRLEN(result);
				}
				STRNCPY(scr,p,q-p);
				if( q-p < 10 )
					scr[q-p]=0;
				pAveRank[i].score = ATOI(scr);

				q = STRSTR(p,"=");
				p = STRSTR(p,",");
				if( p ) p++; 
				i++;
			}
			bAveRankValid = true;
		}
		else
		{
			DBGPRINTF("NETWORK ERR: GET AVERAGE RANK ERROR---%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_GETAVERANK;
		}
		break;
	case LINK_GETWINRANK:
		//(mn1tpgoj=0,1006=0)
		if( STRSTR(returnInfo[0] , "EMPTY") )
		{
			bWinRankValid = true;
		}
		else if( STRSTR(returnInfo[0] , "=") ) 
		{
			int i=0;
			char *p,*q;
			char scr[10];
			char result[210];
			
			STRCPY( result, returnInfo[0] );
			p = result;
			q = STRSTR(p,"=");
			while( q )
			{
				STRNCPY(pWinRank[i].name,p,q-p);
				if( q-p < 10 )
					pWinRank[i].name[q-p]=0;
				p = q+1;
				q = STRSTR(p,",");
				if( NULL == q )
				{
					q = result + STRLEN(result);
				}
				STRNCPY(scr,p,q-p);
				if( q-p < 10 )
					scr[q-p]=0;
				pWinRank[i].score = ATOI(scr);

				q = STRSTR(p,"=");
				p = STRSTR(p,",");
				if( p ) p++; 
				i++;
			}
			bWinRankValid = true;
		}
		else
		{
			DBGPRINTF("NETWORK ERR: GET WIN RANK ERROR---%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_GETWINRANK;
		}
		break;
	case LINK_RESET:
		if(STREQ(returnInfo[0] , "USER REMOVED"))
		{
			statusOfOnline = WEB_STATE_NONE;
		}
		else
		{
			DBGPRINTF("NETWORK ERR: RESET ERROR---%s", returnInfo[0]);
			m_nErrorType = LINK_ERROR_RESET;
		}
		break;
	}

	resultSize = 0;//clear the result size
	statusOfWeb = WEB_MURL;
	return 0;
}

void CNetwork::processReceiveData()
{
    m_onlinePlayerPinStatus[0] = 0x03ff;
    m_onlinePlayerPinStatus[1] = 0x03ff;
    m_onlinePlayerPinStatus[2] = 0x03ff;
    for(int i = 0; i<3; i++)
    {
		int num = data[i];
		if(i == 1)
		{
			if(data[2] == -1)
				num = data[1] + data[0];
			else
			{
				if(data[0] == 10)
					num = data[1];
				else
					num = data[1] + data[0];
			}
		}
		else if(i == 2)
		{
			if(data[2] == -1)
				break;
			else
			{
				if(data[0] == 10)
					num = data[1] + data[2];
				else
					num = data[2];
			}
		}
		for(int j = 0; j < num; j++)
			m_onlinePlayerPinStatus[i] >>= 1;
    }
}

void CNetwork::startTick( int outTime)
{
	if (!getUseTick())
	{
		m_nTickTime = GETUPTIMEMS();
		m_bTimeOut = false;
		m_nOutTime = outTime;
		setUseTick();
	}
}

bool CNetwork::checkTick()
{	
   CGame *pGame = (CGame*)m_pEngine->m_pGame;
	if (getUseTick())
	{
		if (pGame->m_frameStartTick - m_nTickTime > m_nOutTime)
		{
			DBGPRINTF("%d" ,m_nOutTime );
			m_bTimeOut = true;
			m_nTickTime = 0;
			m_nOutTime = 0;
			clearUseTick();
		}
		return m_bTimeOut;
	}
	return false;
}
void CNetwork::clearTick()
{
	m_bTimeOut = false;
	m_nTickTime = 0;
	m_nOutTime = 0;
	clearUseTick();
	
}

void CNetwork::makeConnect()
{
   CGame *pGame = (CGame*)m_pEngine->m_pGame;
//	if ((!bonlineerr)||(m_binErrorClear))
	{
		switch(statusOfWeb)
		{
		case WEB_MURL:
			if (GETUPTIMEMS() - connecttime < TIME_LINK_IDLE)
				break;
			connecttime = GETUPTIMEMS();
			makeUrl();
			statusOfWeb = WEB_OPEN;
			
			//break; //do not need this break, we always need to open the url after we make the url

		case WEB_OPEN:
			OpenUrl();
			statusOfWeb = WEB_IDLE;
			startTick( TIME_OUT );
			break;
		case WEB_PARSE:
			parseResult();
			break;	
		case WEB_IDLE:
			if (resultOK)
			{
				if (resultOK)
				{
					statusOfWeb = WEB_PARSE;
					resultOK = false;
				}
				if(m_pEngine->m_pIWebResp)
				{
					IWEBRESP_Release(m_pEngine->m_pIWebResp);
					m_pEngine->m_pIWebResp = NULL;
				}
				clearUseTick();
			}
			else if(checkTick())
			{
				statusOfWeb = WEB_MURL;
				statusOfLink = LINK_CLEAR;
				m_nErrorType = LINK_ERROR_TIMEOUT;

				CALLBACK_Cancel(&m_pEngine->m_Callback);
				if( m_pEngine->m_pIWebResp )
				{
					IWEBRESP_Release(m_pEngine->m_pIWebResp);
					m_pEngine->m_pIWebResp = NULL;
				}
			}

			break;
		}
	}
//	else
//	{
//	}
}

//======================================================================
//======================================================================
int CNetwork::getNickName(char *pNickName)
{
	int ret=0;

	if( bnickName )
	{//get nick name
		STRCPY(pNickName,nickName);
		ret = 1;
	}
	else if( errorcode || m_nErrorType != -1)
	{//error
		if( errorcode == 12 )
		{
			//no user name
			STRCPY(pNickName,"");
			ret = 1;
			m_nErrorType = -1;
			errorcode = 0;
			statusOfOnline = WEB_STATE_NONE;
		}
		else
		{
			ret = -1;
			m_nErrorType = -1;
			errorcode = 0;
			statusOfOnline = WEB_STATE_NONE;
		}
	}
	else
	{//connecting
		if( statusOfOnline != WEB_STATE_GETNICKNAME )
		{//first set
			DBGPRINTF("NETWORK: ======getNickName()======");
			statusOfOnline = WEB_STATE_GETNICKNAME;
			statusOfLink = LINK_GETNAME;
			statusOfWeb = WEB_MURL;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -