X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=641b3a13abce20244b84e4a6aef735221892908c;hb=bcb1d6118c2d3484e1881a78fd859562745aa553;hp=46632bc45b0c39fd4bc0ccd791edde19261b9e74;hpb=6972be3456882f83dd05da98ce73beef3d7324fb;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 46632bc4..641b3a13 100644 --- a/src/screens.c +++ b/src/screens.c @@ -4068,11 +4068,13 @@ static void FreeThreadData_ApiRenamePlayer(void *data_raw) checked_free(data); } -static void ApiRenamePlayerExt(struct HttpRequest *request, - struct HttpResponse *response, - char *player_name_raw, - char *player_uuid_raw) +static boolean SetRequest_ApiRenamePlayer(struct HttpRequest *request, + void *data_raw) { + struct ApiRenamePlayerThreadData *data = data_raw; + char *player_name_raw = data->player_name; + char *player_uuid_raw = data->player_uuid; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; @@ -4100,6 +4102,78 @@ static void ApiRenamePlayerExt(struct HttpRequest *request, ConvertHttpRequestBodyToServerEncoding(request); + return TRUE; +} + +static void HandleResponse_ApiRenamePlayer(struct HttpResponse *response, + void *data_raw) +{ + // nothing to do here +} + +#if defined(PLATFORM_EMSCRIPTEN) +static void Emscripten_ApiRenamePlayer_Loaded(unsigned handle, void *data_raw, + void *buffer, unsigned int size) +{ + struct HttpResponse *response = GetHttpResponseFromBuffer(buffer, size); + + if (response != NULL) + { + HandleResponse_ApiRenamePlayer(response, data_raw); + + checked_free(response); + } + else + { + Error("server response too large to handle (%d bytes)", size); + } + + FreeThreadData_ApiRenamePlayer(data_raw); +} + +static void Emscripten_ApiRenamePlayer_Failed(unsigned handle, void *data_raw, + int code, const char *status) +{ + Error("server failed to handle request: %d %s", code, status); + + FreeThreadData_ApiRenamePlayer(data_raw); +} + +static void Emscripten_ApiRenamePlayer_Progress(unsigned handle, void *data_raw, + int bytes, int size) +{ + // nothing to do here +} + +static void Emscripten_ApiRenamePlayer_HttpRequest(struct HttpRequest *request, + void *data_raw) +{ + if (!SetRequest_ApiRenamePlayer(request, data_raw)) + { + FreeThreadData_ApiRenamePlayer(data_raw); + + return; + } + + emscripten_async_wget2_data(request->uri, + request->method, + request->body, + data_raw, + TRUE, + Emscripten_ApiRenamePlayer_Loaded, + Emscripten_ApiRenamePlayer_Failed, + Emscripten_ApiRenamePlayer_Progress); +} + +#else + +static void ApiRenamePlayer_HttpRequestExt(struct HttpRequest *request, + struct HttpResponse *response, + void *data_raw) +{ + if (!SetRequest_ApiRenamePlayer(request, data_raw)) + return; + if (!DoHttpRequest(request, response)) { Error("HTTP request failed: %s", GetHttpError()); @@ -4115,26 +4189,33 @@ static void ApiRenamePlayerExt(struct HttpRequest *request, return; } + + HandleResponse_ApiRenamePlayer(response, data_raw); } -static void ApiRenamePlayer(char *player_name, char *player_uuid) +static void ApiRenamePlayer_HttpRequest(struct HttpRequest *request, + struct HttpResponse *response, + void *data_raw) { - struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); - struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); - - ApiRenamePlayerExt(request, response, player_name, player_uuid); + ApiRenamePlayer_HttpRequestExt(request, response, data_raw); - checked_free(request); - checked_free(response); + FreeThreadData_ApiRenamePlayer(data_raw); } +#endif static int ApiRenamePlayerThread(void *data_raw) { - struct ApiRenamePlayerThreadData *data = data_raw; + struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); + struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); - ApiRenamePlayer(data->player_name, data->player_uuid); +#if defined(PLATFORM_EMSCRIPTEN) + Emscripten_ApiRenamePlayer_HttpRequest(request, data_raw); +#else + ApiRenamePlayer_HttpRequest(request, response, data_raw); +#endif - FreeThreadData_ApiRenamePlayer(data_raw); + checked_free(request); + checked_free(response); return 0; }