Add Http()

This commit is contained in:
Rob Loach 2018-05-04 22:09:51 -04:00
parent 65cb2cfb09
commit 4333b732d6
No known key found for this signature in database
GPG Key ID: 627C60834A74A21A
5 changed files with 79 additions and 0 deletions

View File

@ -154,6 +154,11 @@ ifeq ($(HAVE_CHAISCRIPT),)
FLAGS += -DCHAISCRIPT_NO_THREADS -DCHAISCRIPT_NO_THREADS_WARNING -DCHAISCRIPT_NO_DYNLOAD
endif
# ChaiScript Extras Http
ifeq ($(HAVE_CHAISCRIPT),)
FLAGS += -I$(CORE_DIR)/vendor/ChaiScript_Extras_Http/include
endif
# SDL
ifeq ($(platform), win)
SOURCES_C += $(wildcard ./vendor/sdl-libretro/src/*.c ./vendor/sdl-libretro/src/audio/*.c ./vendor/sdl-libretro/src/cdrom/dummy/*.c ./vendor/sdl-libretro/src/cdrom/*.c ./vendor/sdl-libretro/src/cpuinfo/*.c ./vendor/sdl-libretro/src/events/*.c ./vendor/sdl-libretro/src/file/*.c ./vendor/sdl-libretro/src/stdlib/*.c ./vendor/sdl-libretro/src/thread/*.c ./vendor/sdl-libretro/src/timer/*.c ./vendor/sdl-libretro/src/video/*.c ./vendor/sdl-libretro/src/joystick/*.c ./vendor/sdl-libretro/src/video/libretro/*.c ./vendor/sdl-libretro/src/joystick/libretro/*.c ./vendor/sdl-libretro/src/timer/libretro/*.c ./vendor/sdl-libretro/src/audio/libretro/*.c ./vendor/sdl-libretro/src/thread/win32/SDL_sysmutex.c ./vendor/sdl-libretro/src/thread/win32/SDL_syssem.c ./vendor/sdl-libretro/src/thread/win32/SDL_systhread.c ./vendor/sdl-libretro/src/thread/generic/SDL_syscond.c ./vendor/sdl-libretro/src/loadso/dummy/*.c)

59
src/docs/Http.h Normal file
View File

@ -0,0 +1,59 @@
#ifndef SRC_CHAILOVEDOCS_HTTP_H_
#define SRC_CHAILOVEDOCS_HTTP_H_
/**
* Allows downloading of files over HTTP (no https).
*
* @code
* var request = Http("http://example.com/index.html")
* while (request.process() == "pending") {
* print("Please Wait...")
* }
* if (request.getStatus() == "failed") {
* print("Failed: " + request.getReasonPhrase())
* }
* global response = request.getResponseString()
* print(response)
* @endcode
*/
class Http {
public:
/**
* Create a Http() object, to request the given URL.
*/
Http(const std::string& url);
/**
* Retrieve the status code.
*/
int getStatusCode();
~Http();
std::string process();
/**
* Retrieve the status code.
*/
std::string getStatus();
/**
* Retrieve the content type.
*/
std::string getContentType();
/**
* Reason why the request failed.
*/
std::string getReasonPhrase();
/**
* Retrieve a string representation of the requested data.
*/
std::string getResponseString();
/**
* Retrieve the size of the response data.
*/
int getResponseSize();
}
#endif

View File

@ -5,6 +5,8 @@
#ifdef __HAVE_CHAISCRIPT__
#include "chaiscript/extras/math.hpp"
using namespace chaiscript;
#define HTTP_IMPLEMENTATION
#include "chaiscript/extras/http.hpp"
#endif
using ::ChaiLove;
@ -79,6 +81,9 @@ script::script(const std::string& file) {
chaiscript::bootstrap::standard_library::list_type<std::list<chaiscript::Boxed_Value> >("List", *listModule);
chai.add(listModule);
auto httplib = chaiscript::extras::http::bootstrap();
chai.add(httplib);
// Add the "love" namespace.
chai.register_namespace([](chaiscript::Namespace& love) {
ChaiLove* app = ChaiLove::getInstance();

9
test/unittests/http.chai Normal file
View File

@ -0,0 +1,9 @@
var request = Http("http://example.com/index.html")
while (request.process() == "pending") {
print("Please Wait...")
}
if (request.getStatus() == "failed") {
print("Failed: " + request.getReasonPhrase())
}
global response = request.getResponseString()
assert_greater(response.find("Example Domain"), 10, "Http()")

View File

@ -15,6 +15,7 @@ def load() {
love.filesystem.load("data")
love.filesystem.load("filesystem")
love.filesystem.load("font")
love.filesystem.load("http")
love.filesystem.load("graphics")
love.filesystem.load("image")
love.filesystem.load("list")