mirror of
https://github.com/defold/extension-websocket.git
synced 2025-09-27 16:02:18 +02:00
Issue 11: Added support for both binary and text frames
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#include "script_util.h"
|
||||
|
||||
namespace dmWebsocket {
|
||||
namespace dmScript {
|
||||
|
||||
bool luaL_checkbool(lua_State *L, int numArg)
|
||||
bool CheckBool(lua_State *L, int numArg)
|
||||
{
|
||||
bool b = false;
|
||||
if (lua_isboolean(L, numArg))
|
||||
@@ -16,17 +16,17 @@ bool luaL_checkbool(lua_State *L, int numArg)
|
||||
return b;
|
||||
}
|
||||
|
||||
bool luaL_checkboold(lua_State *L, int numArg, int def)
|
||||
bool CheckBoold(lua_State *L, int numArg, int def)
|
||||
{
|
||||
int type = lua_type(L, numArg);
|
||||
if (type != LUA_TNONE && type != LUA_TNIL)
|
||||
{
|
||||
return luaL_checkbool(L, numArg);
|
||||
return CheckBool(L, numArg);
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
lua_Number luaL_checknumberd(lua_State *L, int numArg, lua_Number def)
|
||||
lua_Number CheckNumberd(lua_State *L, int numArg, lua_Number def)
|
||||
{
|
||||
int type = lua_type(L, numArg);
|
||||
if (type != LUA_TNONE && type != LUA_TNIL)
|
||||
@@ -36,7 +36,7 @@ lua_Number luaL_checknumberd(lua_State *L, int numArg, lua_Number def)
|
||||
return def;
|
||||
}
|
||||
|
||||
char* luaL_checkstringd(lua_State *L, int numArg, const char* def)
|
||||
char* CheckStringd(lua_State *L, int numArg, const char* def)
|
||||
{
|
||||
int type = lua_type(L, numArg);
|
||||
if (type != LUA_TNONE && type != LUA_TNIL)
|
||||
@@ -46,7 +46,7 @@ char* luaL_checkstringd(lua_State *L, int numArg, const char* def)
|
||||
return (char*)def;
|
||||
}
|
||||
|
||||
lua_Number luaL_checktable_number(lua_State *L, int numArg, const char* field, lua_Number def)
|
||||
lua_Number CheckTableNumber(lua_State *L, int numArg, const char* field, lua_Number def)
|
||||
{
|
||||
lua_Number result = def;
|
||||
if(lua_istable(L, numArg))
|
||||
@@ -61,7 +61,7 @@ lua_Number luaL_checktable_number(lua_State *L, int numArg, const char* field, l
|
||||
return result;
|
||||
}
|
||||
|
||||
char* luaL_checktable_string(lua_State *L, int numArg, const char* field, char* def)
|
||||
char* CheckTableString(lua_State *L, int numArg, const char* field, char* def)
|
||||
{
|
||||
char* result = def;
|
||||
if(lua_istable(L, numArg))
|
||||
|
@@ -2,11 +2,11 @@
|
||||
|
||||
#include <dmsdk/sdk.h>
|
||||
|
||||
namespace dmWebsocket {
|
||||
bool luaL_checkbool(lua_State *L, int numArg);
|
||||
bool luaL_checkboold(lua_State *L, int numArg, int def);
|
||||
lua_Number luaL_checknumberd(lua_State *L, int numArg, lua_Number def);
|
||||
char* luaL_checkstringd(lua_State *L, int numArg, const char* def);
|
||||
lua_Number luaL_checktable_number(lua_State *L, int numArg, const char* field, lua_Number def);
|
||||
char* luaL_checktable_string(lua_State *L, int numArg, const char* field, char* def);
|
||||
namespace dmScript {
|
||||
bool CheckBool(lua_State *L, int numArg);
|
||||
bool CheckBoold(lua_State *L, int numArg, int def);
|
||||
lua_Number CheckNumberd(lua_State *L, int numArg, lua_Number def);
|
||||
char* CheckStringd(lua_State *L, int numArg, const char* def);
|
||||
lua_Number CheckTableNumber(lua_State *L, int numArg, const char* field, lua_Number def);
|
||||
char* CheckTableString(lua_State *L, int numArg, const char* field, char* def);
|
||||
} // namespace
|
@@ -325,7 +325,7 @@ static int LuaSend(lua_State* L)
|
||||
const char* string = luaL_checklstring(L, 2, &string_length);
|
||||
|
||||
#if defined(HAVE_WSLAY)
|
||||
int write_mode = WSLAY_BINARY_FRAME; // or WSLAY_TEXT_FRAME
|
||||
int write_mode = dmScript::CheckTableNumber(L, 3, "type", WSLAY_BINARY_FRAME);
|
||||
|
||||
struct wslay_event_msg msg;
|
||||
msg.opcode = write_mode;
|
||||
@@ -395,13 +395,23 @@ static void LuaInit(lua_State* L)
|
||||
luaL_register(L, MODULE_NAME, Websocket_module_methods);
|
||||
|
||||
#define SETCONSTANT(_X) \
|
||||
lua_pushnumber(L, (lua_Number) _X); \
|
||||
lua_setfield(L, -2, #_X);
|
||||
lua_pushnumber(L, (lua_Number) _X); \
|
||||
lua_setfield(L, -2, #_X);
|
||||
|
||||
SETCONSTANT(EVENT_CONNECTED);
|
||||
SETCONSTANT(EVENT_DISCONNECTED);
|
||||
SETCONSTANT(EVENT_MESSAGE);
|
||||
SETCONSTANT(EVENT_ERROR);
|
||||
SETCONSTANT(EVENT_CONNECTED);
|
||||
SETCONSTANT(EVENT_DISCONNECTED);
|
||||
SETCONSTANT(EVENT_MESSAGE);
|
||||
SETCONSTANT(EVENT_ERROR);
|
||||
|
||||
#if defined(HAVE_WSLAY)
|
||||
lua_pushnumber(L, (lua_Number) WSLAY_BINARY_FRAME);
|
||||
lua_setfield(L, -2, "DATA_TYPE_BINARY");
|
||||
lua_pushnumber(L, (lua_Number) WSLAY_TEXT_FRAME);
|
||||
lua_setfield(L, -2, "DATA_TYPE_TEXT");
|
||||
#else
|
||||
SETCONSTANT(DATA_TYPE_BINARY);
|
||||
SETCONSTANT(DATA_TYPE_TEXT);
|
||||
#endif
|
||||
|
||||
#undef SETCONSTANT
|
||||
|
||||
|
@@ -66,6 +66,12 @@ namespace dmWebsocket
|
||||
MESSAGE_TYPE_CLOSE = 1,
|
||||
};
|
||||
|
||||
enum DataType
|
||||
{
|
||||
DATA_TYPE_BINARY = 0,
|
||||
DATA_TYPE_TEXT = 1,
|
||||
};
|
||||
|
||||
struct Message
|
||||
{
|
||||
uint32_t m_Length:30;
|
||||
|
Reference in New Issue
Block a user