diff --git a/websocket/api/api.script_api b/websocket/api/api.script_api index 39f2f3a..ac51a09 100644 --- a/websocket/api/api.script_api +++ b/websocket/api/api.script_api @@ -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: |- diff --git a/websocket/src/script_util.cpp b/websocket/src/script_util.cpp index 2568f62..66e13c1 100644 --- a/websocket/src/script_util.cpp +++ b/websocket/src/script_util.cpp @@ -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)) diff --git a/websocket/src/script_util.h b/websocket/src/script_util.h index 5d825a0..e26e423 100644 --- a/websocket/src/script_util.h +++ b/websocket/src/script_util.h @@ -2,11 +2,11 @@ #include -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 \ No newline at end of file diff --git a/websocket/src/websocket.cpp b/websocket/src/websocket.cpp index 521c741..a2dd60a 100644 --- a/websocket/src/websocket.cpp +++ b/websocket/src/websocket.cpp @@ -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 diff --git a/websocket/src/websocket.h b/websocket/src/websocket.h index a537163..020a8f9 100644 --- a/websocket/src/websocket.h +++ b/websocket/src/websocket.h @@ -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;