Merge pull request #12 from defold/issue-11-support-text-frames

Issue 11: Added support for both binary and text frames
This commit is contained in:
Mathias Westerdahl 2020-10-17 12:29:45 +02:00 committed by GitHub
commit 5ee358cbba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 22 deletions

View File

@ -113,6 +113,17 @@
- name: message
type: string
desc: the message to send
- name: options
type: table
desc: options for this particular message. May be `nil`
members:
- name: type
type: number
desc: The data type of the message
- `websocket.DATA_TYPE_BINARY` (default)
- `websocket.DATA_TYPE_TEXT`
examples:
- desc: |-

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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;