mirror of https://github.com/jeremysrand/BuGS.git
Add the code to send high scores to the server, although it is being rejected right now due to a md5 hash problem in the request that I don't yet understand.
This commit is contained in:
parent
5e26684fd2
commit
35930c72e2
|
@ -104,6 +104,7 @@ typedef enum tGameNetworkState {
|
||||||
GAME_NETWORK_WAITING_FOR_HELLO,
|
GAME_NETWORK_WAITING_FOR_HELLO,
|
||||||
GAME_NETWORK_REQUEST_SCORES,
|
GAME_NETWORK_REQUEST_SCORES,
|
||||||
GAME_NETWORK_WAITING_FOR_SCORES,
|
GAME_NETWORK_WAITING_FOR_SCORES,
|
||||||
|
GAME_NETWORK_WAITING_FOR_SCORE_ACK,
|
||||||
|
|
||||||
/* This is the "quiescent" state. The hello has been retrieved and scores
|
/* This is the "quiescent" state. The hello has been retrieved and scores
|
||||||
have been downloaded at least once. This is the only state where a
|
have been downloaded at least once. This is the only state where a
|
||||||
|
@ -145,9 +146,10 @@ tScoresResponse highScoreResponse = {
|
||||||
{ { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0'}, { 'A', 'A', 'A' }, 0}
|
{ { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0'}, { 'A', 'A', 'A' }, 0}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Word globalScoreAge = 0;
|
Word globalScoreAge = 0;
|
||||||
|
|
||||||
|
tSetHighScoreRequestWithHash setHighScoreRequest;
|
||||||
|
tStatusResponse setHighScoreResponse;
|
||||||
|
|
||||||
// Extern from assembly code
|
// Extern from assembly code
|
||||||
|
|
||||||
|
@ -156,17 +158,6 @@ extern void waitForVbl(void);
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
|
|
||||||
#if 0
|
|
||||||
Word blah(void)
|
|
||||||
{
|
|
||||||
// This is how to read the 50 or 60 Hz indicator:
|
|
||||||
// 0 is 60 Hz
|
|
||||||
// 1 is 50 Hz
|
|
||||||
return ReadBParam(hrtz50or60);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void initNetwork(void)
|
void initNetwork(void)
|
||||||
{
|
{
|
||||||
networkToolsStarted = FALSE;
|
networkToolsStarted = FALSE;
|
||||||
|
@ -208,6 +199,8 @@ void initNetwork(void)
|
||||||
} else {
|
} else {
|
||||||
gameNetworkState = GAME_NETWORK_UNCONNECTED;
|
gameNetworkState = GAME_NETWORK_UNCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setHighScoreRequest.setHighScoreRequest.is60Hz = !ReadBParam(hrtz50or60);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -405,9 +398,84 @@ void pollNetwork(void)
|
||||||
hasGlobalHighScores = TRUE;
|
hasGlobalHighScores = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLOBAL_SCORE_REFRESH_TIME:
|
case GAME_NETWORK_WAITING_FOR_SCORE_ACK:
|
||||||
|
if (TCPIPReadTCP(ipid, 0, ((uint32_t)(&setHighScoreResponse)) + bytesRead, sizeof(setHighScoreResponse) - bytesRead, &readResponseBuf) != tcperrOK) {
|
||||||
|
TCPIPAbortTCP(ipid);
|
||||||
|
TCPIPLogout(ipid);
|
||||||
|
gameNetworkState = GAME_NETWORK_SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
bytesRead += readResponseBuf.rrBuffCount;
|
||||||
|
if (bytesRead < sizeof(setHighScoreResponse))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (bytesRead > sizeof(setHighScoreResponse)) {
|
||||||
|
TCPIPAbortTCP(ipid);
|
||||||
|
TCPIPLogout(ipid);
|
||||||
|
gameNetworkState = GAME_NETWORK_PROTOCOL_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setHighScoreResponse.responseType != RESPONSE_TYPE_STATUS) ||
|
||||||
|
(!setHighScoreResponse.success)) {
|
||||||
|
TCPIPAbortTCP(ipid);
|
||||||
|
TCPIPLogout(ipid);
|
||||||
|
gameNetworkState = GAME_NETWORK_PROTOCOL_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
globalScoreAge = 0;
|
||||||
|
gameNetworkState = GAME_NETWORK_REQUEST_SCORES;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_NETWORK_SCORES_RETRIEVED:
|
||||||
if (globalScoreAge == 0)
|
if (globalScoreAge == 0)
|
||||||
gameNetworkState = GAME_NETWORK_REQUEST_SCORES;
|
gameNetworkState = GAME_NETWORK_REQUEST_SCORES;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sendHighScore(void)
|
||||||
|
{
|
||||||
|
int timeout = 10*60;
|
||||||
|
|
||||||
|
if (!networkToolsStarted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (gameNetworkState < GAME_NETWORK_WAITING_FOR_TCP)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (gameNetworkState != GAME_NETWORK_SCORES_RETRIEVED) {
|
||||||
|
waitForVbl();
|
||||||
|
pollNetwork();
|
||||||
|
timeout--;
|
||||||
|
if (timeout == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
setHighScoreRequest.setHighScoreRequest.requestType = REQUEST_TYPE_SET_SCORE;
|
||||||
|
setHighScoreRequest.setHighScoreRequest.who[3] = '\0';
|
||||||
|
|
||||||
|
md5Init(&hashWorkBlock);
|
||||||
|
md5Append(&hashWorkBlock, (Pointer)&secrets, sizeof(secrets));
|
||||||
|
md5Append(&hashWorkBlock, (Pointer)&(setHighScoreRequest.setHighScoreRequest), sizeof(setHighScoreRequest.setHighScoreRequest));
|
||||||
|
md5Finish(&hashWorkBlock, &(setHighScoreRequest.md5Digest[0]));
|
||||||
|
|
||||||
|
if (TCPIPWriteTCP(ipid, (Pointer)&setHighScoreRequest, sizeof(setHighScoreRequest), FALSE, FALSE) != tcperrOK) {
|
||||||
|
TCPIPAbortTCP(ipid);
|
||||||
|
TCPIPLogout(ipid);
|
||||||
|
gameNetworkState = GAME_NETWORK_SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
gameNetworkState = GAME_NETWORK_WAITING_FOR_SCORE_ACK;
|
||||||
|
bytesRead = 0;
|
||||||
|
|
||||||
|
timeout = 10*60;
|
||||||
|
while (gameNetworkState != GAME_NETWORK_SCORES_RETRIEVED) {
|
||||||
|
waitForVbl();
|
||||||
|
pollNetwork();
|
||||||
|
timeout--;
|
||||||
|
if (timeout == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -425,8 +425,10 @@ checkHighScore_doneCopy anop
|
||||||
tax
|
tax
|
||||||
lda gameScore,x
|
lda gameScore,x
|
||||||
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_SCORE_OFFSET,y
|
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_SCORE_OFFSET,y
|
||||||
|
sta setHighScoreRequest+6
|
||||||
lda gameScore+2,x
|
lda gameScore+2,x
|
||||||
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_SCORE_OFFSET+2,y
|
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_SCORE_OFFSET+2,y
|
||||||
|
sta setHighScoreRequest+8
|
||||||
|
|
||||||
lda playerNum
|
lda playerNum
|
||||||
cmp #PLAYER_ONE
|
cmp #PLAYER_ONE
|
||||||
|
@ -736,6 +738,7 @@ checkHighScore_isValid anop
|
||||||
cpx #GAME_NUM_TILES_WIDE*18+26
|
cpx #GAME_NUM_TILES_WIDE*18+26
|
||||||
bge checkHighScore_isInvalid
|
bge checkHighScore_isInvalid
|
||||||
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_WHO_OFFSET,y
|
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_WHO_OFFSET,y
|
||||||
|
sta setHighScoreRequest+2,y
|
||||||
iny
|
iny
|
||||||
jsl asciiToTileType
|
jsl asciiToTileType
|
||||||
jsr overwriteGameTile
|
jsr overwriteGameTile
|
||||||
|
@ -767,6 +770,7 @@ checkHighScore_isInvalid anop
|
||||||
|
|
||||||
checkHighScore_doneInitials anop
|
checkHighScore_doneInitials anop
|
||||||
jsl saveSettings
|
jsl saveSettings
|
||||||
|
jsl sendHighScore
|
||||||
jsl updateHighScore
|
jsl updateHighScore
|
||||||
sec
|
sec
|
||||||
rtl
|
rtl
|
||||||
|
|
Loading…
Reference in New Issue