added score server request handling for Emscripten platform
authorHolger Schemel <info@artsoft.org>
Sat, 25 Sep 2021 00:30:10 +0000 (02:30 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 25 Sep 2021 00:30:10 +0000 (02:30 +0200)
src/files.c
src/screens.c

index 6d99afccd0af57da1162fedb1ebe9c443f0be85a..d6c9b5733668fe966c88d957568c9c9516720ad0 100644 (file)
@@ -9162,6 +9162,62 @@ static void HandleResponse_ApiGetScore(struct HttpResponse *response,
   server_scores.updated = TRUE;
 }
 
+#if defined(PLATFORM_EMSCRIPTEN)
+static void Emscripten_ApiGetScore_Loaded(unsigned handle, void *data_raw,
+                                         void *buffer, unsigned int size)
+{
+  struct HttpResponse *response = GetHttpResponseFromBuffer(buffer, size);
+
+  if (response != NULL)
+  {
+    HandleResponse_ApiGetScore(response, data_raw);
+
+    checked_free(response);
+  }
+  else
+  {
+    Error("server response too large to handle (%d bytes)", size);
+  }
+
+  FreeThreadData_ApiGetScore(data_raw);
+}
+
+static void Emscripten_ApiGetScore_Failed(unsigned handle, void *data_raw,
+                                         int code, const char *status)
+{
+  Error("server failed to handle request: %d %s", code, status);
+
+  FreeThreadData_ApiGetScore(data_raw);
+}
+
+static void Emscripten_ApiGetScore_Progress(unsigned handle, void *data_raw,
+                                           int bytes, int size)
+{
+  // nothing to do here
+}
+
+static void Emscripten_ApiGetScore_HttpRequest(struct HttpRequest *request,
+                                              void *data_raw)
+{
+  if (!SetRequest_ApiGetScore(request, data_raw))
+  {
+    FreeThreadData_ApiGetScore(data_raw);
+
+    return;
+  }
+
+  emscripten_async_wget2_data(request->uri,
+                             request->method,
+                             request->body,
+                             data_raw,
+                             TRUE,
+                             Emscripten_ApiGetScore_Loaded,
+                             Emscripten_ApiGetScore_Failed,
+                             Emscripten_ApiGetScore_Progress);
+}
+
+#else
+
 static void ApiGetScore_HttpRequestExt(struct HttpRequest *request,
                                       struct HttpResponse *response,
                                       void *data_raw)
@@ -9196,13 +9252,18 @@ static void ApiGetScore_HttpRequest(struct HttpRequest *request,
 
   FreeThreadData_ApiGetScore(data_raw);
 }
+#endif
 
 static int ApiGetScoreThread(void *data_raw)
 {
   struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
   struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
 
+#if defined(PLATFORM_EMSCRIPTEN)
+  Emscripten_ApiGetScore_HttpRequest(request, data_raw);
+#else
   ApiGetScore_HttpRequest(request, response, data_raw);
+#endif
 
   checked_free(request);
   checked_free(response);
@@ -9492,6 +9553,62 @@ static void HandleResponse_ApiAddScore(struct HttpResponse *response,
   server_scores.uploaded = TRUE;
 }
 
+#if defined(PLATFORM_EMSCRIPTEN)
+static void Emscripten_ApiAddScore_Loaded(unsigned handle, void *data_raw,
+                                         void *buffer, unsigned int size)
+{
+  struct HttpResponse *response = GetHttpResponseFromBuffer(buffer, size);
+
+  if (response != NULL)
+  {
+    HandleResponse_ApiAddScore(response, data_raw);
+
+    checked_free(response);
+  }
+  else
+  {
+    Error("server response too large to handle (%d bytes)", size);
+  }
+
+  FreeThreadData_ApiAddScore(data_raw);
+}
+
+static void Emscripten_ApiAddScore_Failed(unsigned handle, void *data_raw,
+                                         int code, const char *status)
+{
+  Error("server failed to handle request: %d %s", code, status);
+
+  FreeThreadData_ApiAddScore(data_raw);
+}
+
+static void Emscripten_ApiAddScore_Progress(unsigned handle, void *data_raw,
+                                           int bytes, int size)
+{
+  // nothing to do here
+}
+
+static void Emscripten_ApiAddScore_HttpRequest(struct HttpRequest *request,
+                                              void *data_raw)
+{
+  if (!SetRequest_ApiAddScore(request, data_raw))
+  {
+    FreeThreadData_ApiAddScore(data_raw);
+
+    return;
+  }
+
+  emscripten_async_wget2_data(request->uri,
+                             request->method,
+                             request->body,
+                             data_raw,
+                             TRUE,
+                             Emscripten_ApiAddScore_Loaded,
+                             Emscripten_ApiAddScore_Failed,
+                             Emscripten_ApiAddScore_Progress);
+}
+
+#else
+
 static void ApiAddScore_HttpRequestExt(struct HttpRequest *request,
                                       struct HttpResponse *response,
                                       void *data_raw)
@@ -9526,13 +9643,18 @@ static void ApiAddScore_HttpRequest(struct HttpRequest *request,
 
   FreeThreadData_ApiAddScore(data_raw);
 }
+#endif
 
 static int ApiAddScoreThread(void *data_raw)
 {
   struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
   struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
 
+#if defined(PLATFORM_EMSCRIPTEN)
+  Emscripten_ApiAddScore_HttpRequest(request, data_raw);
+#else
   ApiAddScore_HttpRequest(request, response, data_raw);
+#endif
 
   checked_free(request);
   checked_free(response);
index 55aa0c22f855bd6abad91e51fcfd88a8353108d5..641b3a13abce20244b84e4a6aef735221892908c 100644 (file)
@@ -4111,6 +4111,62 @@ static void HandleResponse_ApiRenamePlayer(struct HttpResponse *response,
   // 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)
@@ -4145,13 +4201,18 @@ static void ApiRenamePlayer_HttpRequest(struct HttpRequest *request,
 
   FreeThreadData_ApiRenamePlayer(data_raw);
 }
+#endif
 
 static int ApiRenamePlayerThread(void *data_raw)
 {
   struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
   struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
 
+#if defined(PLATFORM_EMSCRIPTEN)
+  Emscripten_ApiRenamePlayer_HttpRequest(request, data_raw);
+#else
   ApiRenamePlayer_HttpRequest(request, response, data_raw);
+#endif
 
   checked_free(request);
   checked_free(response);