Как асинхронно вызывать функцию Lua в C / Objective-C? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу заключить http-запрос Objective-C в Lua, но я не знаю, как асинхронно вызывать передаваемый параметр функции. Когда я использую lua_State внутри функции обратного вызова, это недопустимо.Кто-нибудь может помочь?

/*
 Usage in Lua:

 function successHandler(result)
    print('success: '..result)
 end

 function failureHandler(error)
    print('failure: '..error)
 end

 httpRequest(urlString, successHandler, failureHandler)
*/
static int httpRequestProxy(lua_State *L)
{
    size_t l;

    const char * url_ = luaL_checklstring(L, 1, &l);
    NSString *url = [NSString stringWithUTF8String:url_];

    [HttpManager request:url success:^(NSString * result) {
        NSLog(@">>>>>>>> lua state top: %d", lua_gettop(L)); // return 0

        NSLog(@">>>>>>>> success: %@", result);

        if (lua_isfunction(L, 2))
        {
            lua_pushstring(L, [result cStringUsingEncoding:NSUTF8StringEncoding]);
            lua_call(L, 1, 0);
        }
    } failure:^(NSError * _Nonnull error) {
        NSLog(@">>>>>>>> failure: %@", error.localizedDescription);

        if (lua_isfunction(L, 3))
        {
            lua_pushstring(L, [error.localizedDescription cStringUsingEncoding:NSUTF8StringEncoding]);
            lua_call(L, 1, 0);
        }
    }];

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...