X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=5459194ff9469db1cd3d7737258ca3b42ee2a420;hb=9e18c7b845bf154f0b1a4603ad907aa20c3b3e90;hp=1c4faf2da5e2a7411b103313492ee9af3ba76406;hpb=df4d152e1d4bd75c59ba9ce469a7b308ec718905;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 1c4faf2d..5459194f 100644 --- a/src/files.c +++ b/src/files.c @@ -9068,11 +9068,40 @@ char *getPasswordJSON(char *password) return password_json; } +struct ApiGetScoreThreadData +{ + int level_nr; + char *score_cache_filename; +}; + +static void *CreateThreadData_ApiGetScore(int nr) +{ + struct ApiGetScoreThreadData *data = + checked_malloc(sizeof(struct ApiGetScoreThreadData)); + char *score_cache_filename = getScoreCacheFilename(nr); + + data->level_nr = nr; + data->score_cache_filename = getStringCopy(score_cache_filename); + + return data; +} + +static void FreeThreadData_ApiGetScore(void *data_raw) +{ + struct ApiGetScoreThreadData *data = data_raw; + + checked_free(data->score_cache_filename); + checked_free(data); +} + static void ApiGetScoreExt(struct HttpRequest *request, struct HttpResponse *response, - int level_nr, - char *score_cache_filename) + void *data_raw) { + struct ApiGetScoreThreadData *data = data_raw; + int level_nr = data->level_nr; + char *score_cache_filename = data->score_cache_filename; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; @@ -9142,45 +9171,25 @@ static void ApiGetScoreExt(struct HttpRequest *request, server_scores.updated = TRUE; } -static void ApiGetScore(int level_nr, char *score_cache_filename) +static int ApiGetScoreThread(void *data_raw) { struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); ApiGetScoreExt(request, response, - level_nr, score_cache_filename); + data_raw); + + FreeThreadData_ApiGetScore(data_raw); checked_free(request); checked_free(response); -} - -struct ApiGetScoreThreadData -{ - int level_nr; - char *score_cache_filename; -}; - -static int ApiGetScoreThread(void *data_raw) -{ - struct ApiGetScoreThreadData *data = data_raw; - - ApiGetScore(data->level_nr, - data->score_cache_filename); - - checked_free(data->score_cache_filename); - checked_free(data); return 0; } static void ApiGetScoreAsThread(int nr) { - struct ApiGetScoreThreadData *data = - checked_malloc(sizeof(struct ApiGetScoreThreadData)); - char *score_cache_filename = getScoreCacheFilename(nr); - - data->level_nr = nr; - data->score_cache_filename = getStringCopy(score_cache_filename); + struct ApiGetScoreThreadData *data = CreateThreadData_ApiGetScore(nr); ExecuteAsThread(ApiGetScoreThread, "ApiGetScore", data, @@ -9327,12 +9336,46 @@ static char *get_file_base64(char *filename) return buffer_encoded; } +struct ApiAddScoreThreadData +{ + int level_nr; + char *score_tape_filename; + struct ScoreEntry score_entry; +}; + +static void *CreateThreadData_ApiAddScore(int nr, char *score_tape_filename) +{ + struct ApiAddScoreThreadData *data = + checked_malloc(sizeof(struct ApiAddScoreThreadData)); + struct ScoreEntry *score_entry = &scores.entry[scores.last_added]; + + if (score_tape_filename == NULL) + score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); + + data->level_nr = nr; + data->score_entry = *score_entry; + data->score_tape_filename = getStringCopy(score_tape_filename); + + return data; +} + +static void FreeThreadData_ApiAddScore(void *data_raw) +{ + struct ApiAddScoreThreadData *data = data_raw; + + checked_free(data->score_tape_filename); + checked_free(data); +} + static void ApiAddScoreExt(struct HttpRequest *request, struct HttpResponse *response, - int level_nr, - char *score_tape_filename, - struct ScoreEntry *score_entry) + void *data_raw) { + struct ApiAddScoreThreadData *data = data_raw; + int level_nr = data->level_nr; + char *score_tape_filename = data->score_tape_filename; + struct ScoreEntry *score_entry = &data->score_entry; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; @@ -9437,36 +9480,18 @@ static void ApiAddScoreExt(struct HttpRequest *request, server_scores.uploaded = TRUE; } -static void ApiAddScore(int level_nr, char *score_tape_filename, - struct ScoreEntry *score_entry) +static int ApiAddScoreThread(void *data_raw) { struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); ApiAddScoreExt(request, response, - level_nr, score_tape_filename, score_entry); + data_raw); + + FreeThreadData_ApiAddScore(data_raw); checked_free(request); checked_free(response); -} - -struct ApiAddScoreThreadData -{ - int level_nr; - char *score_tape_filename; - struct ScoreEntry score_entry; -}; - -static int ApiAddScoreThread(void *data_raw) -{ - struct ApiAddScoreThreadData *data = data_raw; - - ApiAddScore(data->level_nr, - data->score_tape_filename, - &data->score_entry); - - checked_free(data->score_tape_filename); - checked_free(data); return 0; } @@ -9474,15 +9499,7 @@ static int ApiAddScoreThread(void *data_raw) static void ApiAddScoreAsThread(int nr, char *score_tape_filename) { struct ApiAddScoreThreadData *data = - checked_malloc(sizeof(struct ApiAddScoreThreadData)); - struct ScoreEntry *score_entry = &scores.entry[scores.last_added]; - - if (score_tape_filename == NULL) - score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); - - data->level_nr = nr; - data->score_entry = *score_entry; - data->score_tape_filename = getStringCopy(score_tape_filename); + CreateThreadData_ApiAddScore(nr, score_tape_filename); ExecuteAsThread(ApiAddScoreThread, "ApiAddScore", data,