diff --git a/plugin/http/Error.lua b/plugin/http/Error.lua index 43d6782b..271a8ab7 100644 --- a/plugin/http/Error.lua +++ b/plugin/http/Error.lua @@ -11,10 +11,10 @@ Error.Kind = { "Make sure the server is running -- use 'rojo serve' to run it!", }, Timeout = { - message = "Request timed out.", + message = "HTTP request timed out.", }, Unknown = { - message = "Unknown error: {{message}}", + message = "Unknown HTTP error: {{message}}", }, } @@ -45,7 +45,7 @@ end --[[ This method shouldn't have to exist. Ugh. ]] -function Error.fromErrorString(message) +function Error.fromRobloxErrorString(message) local lower = message:lower() if lower:find("^http requests are not enabled") then diff --git a/plugin/http/init.lua b/plugin/http/init.lua index 3cd016bf..395bcc7e 100644 --- a/plugin/http/init.lua +++ b/plugin/http/init.lua @@ -13,19 +13,20 @@ local Http = {} Http.Error = HttpError Http.Response = HttpResponse -function Http.get(url) +local function performRequest(requestParams) local requestId = lastRequestId + 1 lastRequestId = requestId - Log.trace("GET(%d) %s", requestId, url) + Log.trace("%s(%d) %s", requestParams.Method, requestId, requestParams.Url) + + if requestParams.Body ~= nil then + Log.trace(requestParams.Body) + end return Promise.new(function(resolve, reject) coroutine.wrap(function() local success, response = pcall(function() - return HttpService:RequestAsync({ - Url = url, - Method = "GET", - }) + return HttpService:RequestAsync(requestParams) end) if success then @@ -33,37 +34,25 @@ function Http.get(url) resolve(HttpResponse.fromRobloxResponse(response)) else Log.trace("Request %d failure: %s", requestId, response) - reject(HttpError.fromErrorString(response)) + reject(HttpError.fromRobloxErrorString(response)) end end)() end) end +function Http.get(url) + return performRequest({ + Url = url, + Method = "GET", + }) +end + function Http.post(url, body) - local requestId = lastRequestId + 1 - lastRequestId = requestId - - Log.trace("POST(%d) %s\n%s", requestId, url, body) - - return Promise.new(function(resolve, reject) - coroutine.wrap(function() - local success, response = pcall(function() - return HttpService:RequestAsync({ - Url = url, - Method = "POST", - Body = body, - }) - end) - - if success then - Log.trace("Request %d success: status code %s", requestId, response.StatusCode) - resolve(HttpResponse.fromRobloxResponse(response)) - else - Log.trace("Request %d failure: %s", requestId, response) - reject(HttpError.fromErrorString(response)) - end - end)() - end) + return performRequest({ + Url = url, + Method = "POST", + Body = body, + }) end function Http.jsonEncode(object) diff --git a/plugin/src/Session.lua b/plugin/src/Session.lua index 50d47cd0..a9b30005 100644 --- a/plugin/src/Session.lua +++ b/plugin/src/Session.lua @@ -9,30 +9,30 @@ local Session = {} Session.__index = Session function Session.new(config) - local remoteUrl = ("http://%s:%s"):format(config.address, config.port) - local api = ApiContext.new(remoteUrl) + local baseUrl = ("http://%s:%s"):format(config.address, config.port) + local apiContext = ApiContext.new(baseUrl) local self = { onError = config.onError, disconnected = false, reconciler = Reconciler.new(), - api = api, + apiContext = apiContext, } - api:connect() + apiContext:connect() :andThen(function() if self.disconnected then return end - return api:read({api.rootInstanceId}) + return apiContext:read({apiContext.rootInstanceId}) end) :andThen(function(response) if self.disconnected then return end - self.reconciler:reconcile(response.instances, api.rootInstanceId, game) + self.reconciler:reconcile(response.instances, apiContext.rootInstanceId, game) return self:__processMessages() end) :catch(function(message) @@ -48,7 +48,7 @@ function Session:__processMessages() return Promise.resolve() end - return self.api:retrieveMessages() + return self.apiContext:retrieveMessages() :andThen(function(messages) local promise = Promise.resolve(nil) @@ -84,7 +84,7 @@ function Session:__onMessage(message) table.insert(requestedIds, id) end - return self.api:read(requestedIds) + return self.apiContext:read(requestedIds) :andThen(function(response) return self.reconciler:applyUpdate(requestedIds, response.instances) end)