|
@@ -732,6 +732,54 @@ static int lwebsock_write(lua_State *L)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int lwebsocket_set_timer(lua_State *L, int is_periodic)
|
|
|
|
+{
|
|
|
|
+#ifdef USE_WEBSOCKET
|
|
|
|
+ int num_args = lua_gettop(L);
|
|
|
|
+ struct lua_websock_data *ws;
|
|
|
|
+ lua_Number timediff;
|
|
|
|
+ int type;
|
|
|
|
+ struct timespec ts_now;
|
|
|
|
+ double now;
|
|
|
|
+
|
|
|
|
+ lua_pushlightuserdata(L, (void *)&lua_regkey_connlist);
|
|
|
|
+ lua_gettable(L, LUA_REGISTRYINDEX);
|
|
|
|
+ ws = (struct lua_websock_data *)lua_touserdata(L, -1);
|
|
|
|
+
|
|
|
|
+ if (num_args < 2) {
|
|
|
|
+ return luaL_error(L, "not enough arguments for set_timer/interval() call");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ type = lua_type(L, 1);
|
|
|
|
+ if ((type!=LUA_TSTRING && type!=LUA_TFUNCTION) || (type==LUA_TSTRING && num_args!=2)) {
|
|
|
|
+ return luaL_error(L, "invalid arguments for set_timer/interval() call");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!lua_isnumber(L, 2) || ((timediff = lua_tonumber(L, 2))<0)) {
|
|
|
|
+ return luaL_error(L, "invalid timer interval");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ clock_gettime(CLOCK_MONOTONIC, &ts_now);
|
|
|
|
+ now = (double)ts_now.tv_sec + ((double)ts_now.tv_nsec * 1.0E6);
|
|
|
|
+
|
|
|
|
+ /* TODO: next timer call: now + timediff */
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* mg.set_timeout for websockets */
|
|
|
|
+static int lwebsocket_set_timeout(lua_State *L)
|
|
|
|
+{
|
|
|
|
+ return lwebsocket_set_timer(L, 0);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* mg.set_interval for websockets */
|
|
|
|
+static int lwebsocket_set_interval(lua_State *L)
|
|
|
|
+{
|
|
|
|
+ return lwebsocket_set_timer(L, 1);
|
|
|
|
+}
|
|
|
|
+
|
|
enum {
|
|
enum {
|
|
LUA_ENV_TYPE_LUA_SERVER_PAGE = 0,
|
|
LUA_ENV_TYPE_LUA_SERVER_PAGE = 0,
|
|
LUA_ENV_TYPE_PLAIN_LUA_PAGE = 1,
|
|
LUA_ENV_TYPE_PLAIN_LUA_PAGE = 1,
|
|
@@ -849,8 +897,9 @@ static void prepare_lua_environment(struct mg_context * ctx, struct mg_connectio
|
|
}
|
|
}
|
|
|
|
|
|
if (lua_env_type==LUA_ENV_TYPE_LUA_WEBSOCKET) {
|
|
if (lua_env_type==LUA_ENV_TYPE_LUA_WEBSOCKET) {
|
|
- // reg_function(L, "write", lwebsock_write, (lua_websock_data*)(conn->lua_websocket_state));
|
|
|
|
reg_function(L, "write", lwebsock_write);
|
|
reg_function(L, "write", lwebsock_write);
|
|
|
|
+ reg_function(L, "set_timeout", lwebsocket_set_timeout);
|
|
|
|
+ reg_function(L, "set_interval", lwebsocket_set_interval);
|
|
/* reg_conn_function(L, "send_file", lsp_send_file, conn); */
|
|
/* reg_conn_function(L, "send_file", lsp_send_file, conn); */
|
|
}
|
|
}
|
|
|
|
|