📄 network.cpp
字号:
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 + -