diff --git a/lua/gmod_integration/server/sv__websocket.lua b/lua/gmod_integration/server/sv__websocket.lua index a1925ac..540f76d 100644 --- a/lua/gmod_integration/server/sv__websocket.lua +++ b/lua/gmod_integration/server/sv__websocket.lua @@ -34,6 +34,13 @@ local socket = GWSockets.createWebSocket(getWebSocketURL()) socket:setHeader("id", gmInte.config.id) socket:setHeader("token", gmInte.config.token) +function gmInte.resetWebSocket() + socket:closeNow() + socket = GWSockets.createWebSocket(getWebSocketURL()) + socket:setHeader("id", gmInte.config.id) + socket:setHeader("token", gmInte.config.token) +end + local hasConnected = false function socket:onConnected() hasConnected = true @@ -54,6 +61,7 @@ end function socket:onDisconnected() if (hasConnected) then + hasConnected = false gmInte.log("WebSocket Disconnected", true) else gmInte.logError("WebSocket Connection Failed", true) @@ -64,38 +72,16 @@ function socket:onError(txt) gmInte.logError("WebSocket Error: " .. txt, true) end -function gmInte.websocketWrite(data) - if (!socket:isConnected()) then - socket:open() - end - socket:write(util.TableToJSON(data || {})) -end - timer.Create("gmInte:WebSocket:CheckConnection", 4, 0, function() - -- Check if the API is undergoing an update - if gmInte.isApiUpdating then - if socket:isConnected() then - gmInte.log("API Update detected, closing WebSocket connection.", true) - socket:close() - end - return - end - - if socket:isConnected() then - -- Connection is already open, no need to do anything - -- Optionally, you can log this or handle it differently - else + if (!socket:isConnected()) then + gmInte.resetWebSocket() socket:open() end end) --- Example function to set the API update status --- This could be triggered by some condition or external input -function gmInte.setApiUpdateStatus(isUpdating) - gmInte.isApiUpdating = isUpdating - if isUpdating then - gmInte.log("API Update starting, WebSocket connections will be managed accordingly.", true) - else - gmInte.log("API Update completed, WebSocket connections can resume normal operation.", true) - end -end \ No newline at end of file +hook.Add("InitPostEntity", "gmInte:ServerReady:WebSocket", function() + timer.Simple(1, function() + gmInte.resetWebSocket() + socket:open() + end) +end) \ No newline at end of file diff --git a/lua/gmod_integration/server/sv_settings.lua b/lua/gmod_integration/server/sv_settings.lua index 50307af..0469def 100644 --- a/lua/gmod_integration/server/sv_settings.lua +++ b/lua/gmod_integration/server/sv_settings.lua @@ -15,6 +15,10 @@ function gmInte.saveSetting(setting, value) file.Write("gm_integration/config.json", util.TableToJSON(gmInte.config, true)) gmInte.log("Setting Saved") + if (value == "websocketFQDN" || value == "id" || value == "token") then + gmInte.resetWebSocket() + end + // send to all players the new public config for _, ply in pairs(player.GetAll()) do if (ply:IsValid() && ply:IsPlayer(ply)) then