170 lines
4.1 KiB
C++
170 lines
4.1 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "binding_helpers.h"
|
|
#include "http_curl/http_curl.h"
|
|
#include "script_squirrel/legacy/squirrel_binding.h"
|
|
#include "script/script_variant.h"
|
|
|
|
using namespace GS;
|
|
using namespace GS::Script;
|
|
|
|
|
|
#if __PLATFORM_EMSCRIPTEN__
|
|
|
|
//------------------------------------------------------------------------------
|
|
SQInteger HttpPost(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger HttpUpdate(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_RETURN
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
#else
|
|
|
|
//------------------------------------------------------------------------------
|
|
class SquirrelHTTP : public HTTP::Curl
|
|
{
|
|
HSQUIRRELVM vm;
|
|
|
|
public:
|
|
|
|
void OnRequestComplete(int ticket_id, const Array <char> &data)
|
|
{
|
|
SquirrelVM *sq_vm = GetVMObject(vm);
|
|
|
|
if (sq_vm->SetupFunctionCall("OnHttpRequestComplete"))
|
|
{
|
|
sq_vm->PushArgument(ticket_id);
|
|
|
|
if (data.GetSize() > 0)
|
|
{
|
|
String str(data.c_ptr(), data.GetCount());
|
|
sq_vm->PushArgument(str.c_str());
|
|
}
|
|
else
|
|
sq_vm->PushNullArgument();
|
|
|
|
sq_vm->DoFunctionCall();
|
|
}
|
|
}
|
|
void OnRequestError(int ticket_id)
|
|
{
|
|
SquirrelVM *sq_vm = GetVMObject(vm);
|
|
|
|
if (sq_vm->SetupFunctionCall("OnHttpRequestError"))
|
|
{
|
|
sq_vm->PushArgument(ticket_id);
|
|
sq_vm->DoFunctionCall();
|
|
}
|
|
}
|
|
|
|
SquirrelHTTP(HSQUIRRELVM v) : vm(v) {}
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
|
SQInteger HttpPost(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETSTRING(url)
|
|
__SQ_GETSTRING(post)
|
|
SquirrelVM *sq_vm = GetVMObject(vm);
|
|
int id = sq_vm->http->Post(url, post);
|
|
__SQ_GETEND
|
|
__SQ_RETURNINT(id)
|
|
}
|
|
SQInteger HttpUpdate(HSQUIRRELVM vm)
|
|
{
|
|
SquirrelVM *sq_vm = GetVMObject(vm);
|
|
sq_vm->http->Update();
|
|
__SQ_RETURN
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
//#include <iostream.h>
|
|
#include <winsock.h>
|
|
SQInteger GetIp(HSQUIRRELVM vm)
|
|
{
|
|
String ip_adress;
|
|
|
|
char ac[80];
|
|
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
|
|
__SQ_RETURNSTRING("");
|
|
}
|
|
struct hostent *phe = gethostbyname(ac);
|
|
if (phe == 0) {
|
|
__SQ_RETURNSTRING("");
|
|
}
|
|
|
|
for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
|
|
struct in_addr addr;
|
|
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
|
|
ip_adress += String(inet_ntoa(addr)) + String(" ");
|
|
}
|
|
|
|
__SQ_RETURNSTRING(ip_adress.c_str())
|
|
}
|
|
//*********************************************************
|
|
|
|
#endif
|
|
|
|
void RegisterHTTPBinding(HSQUIRRELVM vm)
|
|
{
|
|
#if __PLATFORM_EMSCRIPTEN__ == 0
|
|
SquirrelVM *sq_vm = GetVMObject(vm);
|
|
sq_vm->http = new SquirrelHTTP(vm);
|
|
#endif
|
|
|
|
/*#
|
|
Topic: HTTP
|
|
Desc: Send HTTP POST request to a remote URL and receive remote response asynchronously.
|
|
#*/
|
|
|
|
/*#
|
|
Section: HTTP helper
|
|
Desc: HTTP helper functions.
|
|
#*/
|
|
/*#
|
|
Func: HttpUpdate
|
|
Proto: void:
|
|
Desc: Update the HTTP subsystem. You must call this function to receive queued events.
|
|
See: HttpPost
|
|
#*/
|
|
sq_register(vm, HttpUpdate, "HttpUpdate", _SC("."));
|
|
/*#
|
|
Func: HttpPost
|
|
Proto: int:String url, String post
|
|
Desc: POST an HTTP request to a remote URL and returns the request identifier.<br>This function returns immediately, the request result will be sent to the global HTTP script callbacks.
|
|
Example:
|
|
// POST a request with two parameters to a remote server.
|
|
local id = HttpPost("http://www.someurl.com", "param_a=1&param_b=2")
|
|
print("HTTP request posted, id: " + id)
|
|
|
|
// The two global HTTP request callbacks.
|
|
function OnHttpRequestComplete(ticket_id, data)
|
|
{
|
|
print("HTTP request " + ticket_id + " complete.")
|
|
print("Data received: " + data)
|
|
}
|
|
function OnHttpRequestError(ticket_id)
|
|
{
|
|
print("HTTP request " + ticket_id + " errored.")
|
|
}
|
|
#*/
|
|
sq_register(vm, HttpPost, "HttpPost", _SC(".ss"));
|
|
|
|
|
|
/*#
|
|
Func: GetIp
|
|
Proto: string:void
|
|
Desc: Get local ip.
|
|
#*/
|
|
sq_register(vm, GetIp, "GetIp", _SC("."));
|
|
}
|