Я хочу заключить 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;
}