From 3310098088005682a47e9faf997b606a2f89fe35 Mon Sep 17 00:00:00 2001 From: coco875 <59367621+coco875@users.noreply.github.com> Date: Mon, 29 Jul 2024 00:27:54 +0200 Subject: [PATCH] fix network (#22) * fix network * clean network --------- Co-authored-by: MegaMech --- src/networking/networking.c | 23 ++++++----------------- src/networking/networking.h | 7 ++++--- src/networking/start_game.c | 2 ++ 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/networking/networking.c b/src/networking/networking.c index 626f1ef55..efb4c7fff 100644 --- a/src/networking/networking.c +++ b/src/networking/networking.c @@ -3,7 +3,6 @@ #include #include #include -#include #include "networking.h" #include "main.h" @@ -28,8 +27,7 @@ Network gNetwork = { // Global variables -HANDLE sNetworkThread; -DWORD threadID; +SDL_Thread *sNetworkThread; bool threadStarted = false; int isNetworkingThreadEnabled = true; @@ -78,29 +76,20 @@ void networking_init(char* ip, uint16_t port) { // Ensure no thread is already running if (sNetworkThread != NULL) { - WaitForSingleObject(sNetworkThread, INFINITE); - CloseHandle(sNetworkThread); + SDL_WaitThread(sNetworkThread, NULL); sNetworkThread = NULL; } - - sNetworkThread = CreateThread( - NULL, // default security attributes - 0, // default stack size - networking_loop, // thread function - NULL, // argument to thread function - 0, // default creation flags - &threadID // receive thread identifier - ); + sNetworkThread = SDL_CreateThread(networking_loop, "NetworkingThread", NULL); if (sNetworkThread == NULL) { - printf("CreateThread failed: %d\n", GetLastError()); + printf("SDL_CreateThread failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } //sNetworkThread = std::thread(&GameInteractor::ReceiveFromServer, this); } -DWORD WINAPI networking_loop(LPVOID arg) { +int networking_loop(void* data) { while (isNetworkingThreadEnabled) { while (!gNetwork.isConnected && isNetworkingThreadEnabled) { // && isRemoteInteractorEnabled) { printf("[SpaghettiOnline] Attempting to make connection to server...\n"); @@ -207,7 +196,7 @@ void handleReceivedData(const char *buffer, size_t bufSize) { handleMessagePacket(data); break; case PACKET_LOADED: - handle_start_game(data); + handle_start_game(); // handle_start_game(data); break; case PACKET_PLAYER: replicate_player(data); diff --git a/src/networking/networking.h b/src/networking/networking.h index 20b14db95..b5d538af3 100644 --- a/src/networking/networking.h +++ b/src/networking/networking.h @@ -4,7 +4,6 @@ #include #include #include -#include #define NETWORK_MAX_PLAYERS 8 #define NETWORK_USERNAME_LENGTH 32 @@ -56,8 +55,8 @@ void ConnectToServer(char* ip, uint16_t port, char *username); void networking_init(char* ip, uint16_t port); void networking_update(void); void networking_ready_up(bool); -void networking_cleanup(void); -DWORD WINAPI networking_loop(LPVOID); +void networking_cleanup(SDLNet_SocketSet); +int networking_loop(void*); void handleReceivedData(const char *, size_t); void set_username(const char *username); @@ -77,5 +76,7 @@ void handleJoinPacket(const char *data); void handleLeavePacket(const char *data); void handleMessagePacket(const char *data); +void handle_start_game(void); +void send_str_packet(TCPsocket, uint8_t, const char *); #endif // NETWORKING_H \ No newline at end of file diff --git a/src/networking/start_game.c b/src/networking/start_game.c index 1f18a12c8..3ae20a122 100644 --- a/src/networking/start_game.c +++ b/src/networking/start_game.c @@ -5,6 +5,8 @@ #include "networking.h" #include "code_800029B0.h" #include "menus.h" +#include "audio/external.h" +#include "code_80091750.h" // PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN // PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI