diff --git a/WebSocket.lua b/WebSocket.lua index 0ec6d95..cef0301 100644 --- a/WebSocket.lua +++ b/WebSocket.lua @@ -1,7 +1,7 @@ local Base64 = require(script.Base64) local JobId = game:GetService('HttpService'):GenerateGUID(false) -print("jobid is " .. JobId) -local BaseUrl = "https://sock.kcadev.org" +local config = require(script.Parent.Parent:WaitForChild("Configuration")) +local BaseUrl = config["websocket-proxy"] local atob = Base64.atob local btoa = Base64.btoa local messages = {} @@ -19,10 +19,14 @@ local function notEmpty(s) end local ws = function (dict) + local socket = {} local closed = false local onMessage = dict.onMessage or function(msg) print(msg) end + local onError = dict.onError or function(err) + print(err) + end local server = game:GetService('HttpService') local response, status = server:RequestAsync({ ["Url"] = BaseUrl .. "/api/connect/" .. JobId, @@ -41,16 +45,16 @@ local ws = function (dict) ["Headers"] = {["Content-Type"] = "application/json"} }) if not resp.Success then - error("Error Sending Message: " .. resp.StatusCode .. " " .. resp.StatusMessage) + onError({message = resp.StatusMessage, code = resp.StatusCode}) return false else return true end end + local loop = task.spawn(function() - while wait(0.1) do - print("poll") + while wait(.5) do local response = server:RequestAsync({ ["Url"] = BaseUrl .. "/api/poll/"..JobId.."/".. id, ["Method"] = "GET" @@ -61,15 +65,16 @@ local ws = function (dict) if notExists(messages, msg) then table.insert(messages, msg) if notEmpty(msg) then - onMessage(msg) + onMessage(socket, msg) end end else - error("Error Polling Messages: " .. response.StatusCode .. " " .. response.StatusMessage) + onError({message = response.StatusMessage, code = response.StatusCode}) + break end end end) - + local function close() if closed then return end closed = true @@ -79,15 +84,17 @@ local ws = function (dict) }) task.cancel(loop) end - + game:BindToClose(close) - return { + socket = { sendMessage = sendMessage, onMessage = onMessage, close = close } + return socket else - error("Error Connecting to Websocket Server: " .. response.StatusCode .. " " .. response.StatusMessage) + onError({message = response.StatusMessage, code = response.StatusCode}) + return false end end