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

📄 network.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:

		OnlineUpdate();
	}

	return ret;
}

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

	if( STRCMP(pNickName,"") )
	{
		if( statusOfOnline != WEB_STATE_SETNICKNAME )
		{
			//first set
			DBGPRINTF("NETWORK: ======setNickName()======");
			STRCPY(nickName, pNickName);
			statusOfOnline = WEB_STATE_SETNICKNAME;
			statusOfLink = LINK_SETNAME;
			statusOfWeb = WEB_MURL;
		}

		OnlineUpdate();
	}
	if( errorcode || m_nErrorType != -1)
	{
		if( errorcode == 4 )
		{
			//nick name already took
			STRCPY(nickName,"");
			m_nErrorType = -1;
			ret = -2;
			errorcode = 0;
			statusOfOnline = WEB_STATE_NONE;
		}
		else
		{
			ret = -1;
			m_nErrorType = -1;
			errorcode = 0;
			statusOfOnline = WEB_STATE_NONE;
		}
	}
	else if( bnickName )
		ret = 1;

	return ret;
}

//======================================================================
int CNetwork::getRivalName(char *rivalname, int *highscore, int *winrank, int *averank)
{
	int ret=0;

	if( STRCMP(OpnickName,"") )
	{
		STRCPY( rivalname, OpnickName );
		if( highscore )
			*highscore = OpHighscore;
		if( winrank )
			*winrank = OpWinRank;
		if( averank )
			*averank = OpAveRank;
		ret = 1;
		return ret;
	}

	if( statusOfOnline != WEB_STATE_GETRIVAL )
	{
		DBGPRINTF("NETWORK: ======getRivalName()======");
		statusOfOnline = WEB_STATE_GETRIVAL;
		statusOfLink = LINK_LOGIN;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		ret = -1;
		m_nErrorType = -1;
		errorcode = 0;
		statusOfOnline = WEB_STATE_NONE;
	}
	else if( STRCMP(OpnickName,"") )
	{
		STRCPY( rivalname, OpnickName );
		if( highscore )
			*highscore = OpHighscore;
		if( winrank )
			*winrank = OpWinRank;
		if( averank )
			*averank = OpAveRank;
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::wantChallenge(bool chal, int *state)
{
	int ret=0;

	if( statusOfOnline != WEB_STATE_WANTCHALLENGE )
	{
		DBGPRINTF("NETWORK: ======wantChallenge()======");
		statusOfOnline = WEB_STATE_WANTCHALLENGE;
		bChallenge = chal;
		if( chal == false )
		{
			STRCPY(OpnickName, "");
		}
		challengeState = CHALLENGE_WAIT;

		if (bWopponent)
			statusOfLink = LINK_CHALLENGE;
		else if (bOpponent)
			statusOfLink = LINK_A_CHALLENGE;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate(); 

	//receive
	if( errorcode || m_nErrorType != -1 )
	{
		ret = -1;
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
	}
	else if( challengeState != CHALLENGE_WAIT )
	{
		*state = challengeState;
		if( challengeState == CHALLENGE_REJECTED )
			statusOfOnline = WEB_STATE_NONE;

		ret = 1;
	}

	return ret;

}

//======================================================================
int CNetwork::sendMyScore(int *myscore)//return 0: connecting; -1: error; 1: send succeed
{
	int ret=0;

	if( statusOfOnline != WEB_STATE_SENDSCORE )
	{
		DBGPRINTF("NETWORK: ======sendMyScore()======");
		statusOfOnline = WEB_STATE_SENDSCORE;
		statusOfLink = LINK_GAME_RUN;
		statusOfWeb = WEB_MURL;
		scoreState = SCORE_SEND;
		bOpScoreValid = false;
		bgetGameResult = false;

		STRCPY(nextSEQ,"");
		for( int i=0;i<3;i++ )
		{
			if( i==2 && myscore[i] == -1 )
				continue;

			if( myscore[i] == 10 )
			{
				STRCAT(nextSEQ,"A");
				int turn = ((CGame*)m_pEngine->m_pGame)->GetMatch()->GetCurRoundNumber()+1;

				if( i == 0 && turn != 10)
				{
					i++;
					STRCAT(nextSEQ,".");
				}
			}
			else
				SPRINTF(nextSEQ,"%s%d",nextSEQ,myscore[i]);
		}
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1 )
	{
		if( m_nErrorType == LINK_ERROR_TIMEOUT || m_nErrorType == LINK_ERROR_LOSTOP )
			ret = m_nErrorType;
		else
			ret = -1;
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		scoreState = SCORE_NONE;
	}
	else if( scoreState != SCORE_SEND )
	{
		scoreState = SCORE_NONE;
		statusOfOnline = WEB_STATE_NONE;
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::receiveOpPinMode(int *OpPinMode)//return 0: connecting; -1: error; 1: receive succedd
{
	int ret=0;

	if( bOpScoreValid )
	{
		OpPinMode[0] = m_onlinePlayerPinStatus[0];
		OpPinMode[1] = m_onlinePlayerPinStatus[1];
		OpPinMode[2] = m_onlinePlayerPinStatus[2];
		scoreState = SCORE_NONE;
		ret = 1;
		return ret;
	}

	if( statusOfOnline != WEB_STATE_RECEIVESCORE )
	{
		DBGPRINTF("NETWORK: ======receiveOpPinMode()======");
		statusOfOnline = WEB_STATE_RECEIVESCORE;
		statusOfLink = LINK_GAME_RUN;
		scoreState = SCORE_WAITRIVAL;
		STRCPY(nextSEQ,"");
		bOpScoreValid = false;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		if( m_nErrorType == LINK_ERROR_TIMEOUT || m_nErrorType == LINK_ERROR_LOSTOP )
			ret = m_nErrorType;
		else
			ret = -1;
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		scoreState = SCORE_NONE;
	}
	else if( bOpScoreValid )
	{
		OpPinMode[0] = m_onlinePlayerPinStatus[0];
		OpPinMode[1] = m_onlinePlayerPinStatus[1];
		OpPinMode[2] = m_onlinePlayerPinStatus[2];
		scoreState = SCORE_NONE;
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::getGameResult()
{
	int ret=0;

	if( statusOfOnline != WEB_STATE_GETGAMERESULT )
	{
		DBGPRINTF("NETWORK: ======getGameResult()======");
		statusOfOnline = WEB_STATE_GETGAMERESULT;
		statusOfLink = LINK_GAME_RUN;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		ret = -1;
		errorcode = 0;
		m_nErrorType = -1; 
		statusOfOnline = WEB_STATE_NONE;
	}
	else if( statusOfOnline != WEB_STATE_GETGAMERESULT )
	{
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::getUserInfo(int *win, int *loss, int *draw, int *highscore, int *winrank, int *averank)
{
	int ret=0;

	if( bValidInfo )
	{
		*win = m_Win;
		*loss = m_Loss;
		*draw = m_Draw;
		*highscore = m_highScore;
		*winrank = m_winRank;
		if( averank )
			*averank = m_aveRank;
		ret = 1;
		return ret;
	}

	if( statusOfOnline != WEB_STATE_GETINFO )
	{
		DBGPRINTF("NETWORK: ======getUserInfo()======");
		statusOfOnline = WEB_STATE_GETINFO;
		statusOfLink = LINK_GETINFO;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = -1;
	}
	else if( bValidInfo )
	{
		*win = m_Win;
		*loss = m_Loss;
		*draw = m_Draw;
		*highscore = m_highScore;
		*winrank = m_winRank;
		if( averank )
			*averank = m_aveRank;
		ret = 1;
	}
	return ret;
}


//======================================================================
//UID=XXX&LOGIN=1
int CNetwork::Login()
{
	int ret = 0;

	if( statusOfOnline != WEB_STATE_LOGIN )
	{
		DBGPRINTF("NETWORK: ======Login()======");
		statusOfOnline = WEB_STATE_LOGIN;
		statusOfLink = LINK_LOGIN;
		blogin = false;
		bOpponent = false;
		bWopponent = false;
		STRCPY(OpnickName,"");
		bValidInfo = false;
		bOpScoreValid = false;
		bgetGameResult = false;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = -1;
	}
	else if( blogin )
	{
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::getRank(RANK_DATA *pData)
{
	int ret=0;
	if(bHighRankValid)
	{
		MEMCPY(pData,pHighRank,sizeof(RANK_DATA)*MAX_RANK_NUM);
		ret = 1;
		return ret;
	}

	if( statusOfOnline != WEB_STATE_GETHIGHRANK )
	{
		DBGPRINTF("NETWORK: ======getAveRank()======");
		statusOfOnline = WEB_STATE_GETHIGHRANK;
		statusOfLink = LINK_GETHIGHRANK;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = -1;
	}
	else if( bHighRankValid )
	{
		MEMCPY(pData,pHighRank,sizeof(RANK_DATA)*MAX_RANK_NUM);
		statusOfOnline = WEB_STATE_NONE;
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::getAveRank(RANK_DATA *pData)
{
	int ret=0;
	if(bAveRankValid)
	{
		MEMCPY(pData,pAveRank,sizeof(RANK_DATA)*MAX_RANK_NUM);
		ret = 1;
		return ret;
	}

	if( statusOfOnline != WEB_STATE_GETAVERANK )
	{
		DBGPRINTF("NETWORK: ======getAveRank()======");
		statusOfOnline = WEB_STATE_GETAVERANK;
		statusOfLink = LINK_GETAVERANK;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = -1;
	}
	else if( bAveRankValid )
	{
		MEMCPY(pData,pAveRank,sizeof(RANK_DATA)*MAX_RANK_NUM);
		statusOfOnline = WEB_STATE_NONE;
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::getWinRank(RANK_DATA *pData)
{
	int ret=0;
	if(bWinRankValid)
	{
		MEMCPY(pData,pWinRank,sizeof(RANK_DATA)*MAX_RANK_NUM);
		ret = 1;
		return ret;
	}

	if( statusOfOnline != WEB_STATE_GETWINRANK )
	{
		DBGPRINTF("NETWORK: ======getWinRank()======");
		statusOfOnline = WEB_STATE_GETWINRANK;
		statusOfLink = LINK_GETWINRANK;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = -1;
	}
	else if( bWinRankValid )
	{
		MEMCPY(pData,pWinRank,sizeof(RANK_DATA)*MAX_RANK_NUM);
		statusOfOnline = WEB_STATE_NONE;
		ret = 1;
	}

	return ret;
}


//======================================================================
int CNetwork::keepConnect()
{
	int ret=0;

	if( statusOfOnline != WEB_STATE_KEEPCONNECT)
	{
		DBGPRINTF("NETWORK: ======keepConnect()======");
		connecterror = false;
		statusOfOnline = WEB_STATE_KEEPCONNECT;
		statusOfLink = LINK_GAME_RUN;
		STRCPY(nextSEQ,"");
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( statusOfOnline != WEB_STATE_KEEPCONNECT )
	{
		if( m_nErrorType == LINK_ERROR_TIMEOUT || m_nErrorType == LINK_ERROR_LOSTOP )
			ret = m_nErrorType;
		else if( connecterror )
			ret = -1;
		else
			ret = 1;
		m_nErrorType = -1;
	}

	return ret;
}

//======================================================================
void CNetwork::stopConnect()
{
	DBGPRINTF("NETWORK: ======stopConnect()======");
	CALLBACK_Cancel(&m_pEngine->m_Callback);
	if( m_pEngine->m_pIWebResp )
	{
		IWEBRESP_Release(m_pEngine->m_pIWebResp);
		m_pEngine->m_pIWebResp = NULL;
	}
	STRCPY(OpnickName,"");
	resultSize = 0;//clear the result size
	resultOK = false;
}

//======================================================================
int CNetwork::InitConnect()
{
	int ret=0;

	if( statusOfOnline != WEB_STATE_INIT )
	{
		DBGPRINTF("NETWORK: ======InitConnect()======");
		statusOfOnline = WEB_STATE_INIT;
		statusOfLink = LINK_CLEAR;
		statusOfWeb = WEB_MURL;
	}
	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = 1;
	}
	else if( statusOfOnline != WEB_STATE_INIT )
	{
		ret = 1;
	}

	return ret;
}

//======================================================================
int CNetwork::resetProfile()
{
	int ret=0;

	if( statusOfOnline != WEB_STATE_RESETPROFILE )
	{
		DBGPRINTF("NETWORK: ======resetProfile()======");
		statusOfOnline = WEB_STATE_RESETPROFILE;
		statusOfLink = LINK_RESET;
		statusOfWeb = WEB_MURL;
	}

	OnlineUpdate();

	if( errorcode || m_nErrorType != -1)
	{
		errorcode = 0;
		m_nErrorType = -1;
		statusOfOnline = WEB_STATE_NONE;
		ret = -1;
	}
	else if( statusOfOnline != WEB_STATE_RESETPROFILE )
	{
		ret = 1;
		bnickName = false;
	}

	return ret;
}

//======================================================================
void CNetwork::OnlineUpdate()
{
	if (!buserID)
	{
		//generate a user for test
		generateUser();
	}

	switch(statusOfOnline)
	{
	case WEB_STATE_NONE:
		break;
	default:
		makeConnect();
		break;
	}
}

//Qiu Li end

⌨️ 快捷键说明

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