Add asynchronous model for mruby bindings
This commit is contained in:
parent
a234f2d5b2
commit
737d5add01
|
@ -258,6 +258,19 @@ runMrbFile(mrb_state *mrb, const char *filename)
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static mrb_state * static_mrb;
|
||||||
|
static mrb_state * static_scriptmrb;
|
||||||
|
|
||||||
|
void __attribute__ ((optnone)) main_update_loop() {
|
||||||
|
mrb_load_nstring_cxt(static_mrb, "main_update_loop", 16, NULL);
|
||||||
|
if (static_mrb->exc) {
|
||||||
|
printf("Execution Errored\n");
|
||||||
|
mrb_close(static_scriptmrb);
|
||||||
|
shState->texPool().disable();
|
||||||
|
mrb_close(static_mrb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
runRMXPScripts(mrb_state *mrb, mrbc_context *ctx)
|
runRMXPScripts(mrb_state *mrb, mrbc_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -309,9 +322,6 @@ runRMXPScripts(mrb_state *mrb, mrbc_context *ctx)
|
||||||
|
|
||||||
for (int i = 0; i < scriptCount; ++i)
|
for (int i = 0; i < scriptCount; ++i)
|
||||||
{
|
{
|
||||||
#ifdef __EMSCRIPTEN
|
|
||||||
emscripten_sleep(10);
|
|
||||||
#endif
|
|
||||||
mrb_value script = mrb_ary_entry(scriptArray, i);
|
mrb_value script = mrb_ary_entry(scriptArray, i);
|
||||||
|
|
||||||
mrb_value scriptChksum = mrb_ary_entry(script, 0);
|
mrb_value scriptChksum = mrb_ary_entry(script, 0);
|
||||||
|
@ -368,7 +378,23 @@ runRMXPScripts(mrb_state *mrb, mrbc_context *ctx)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static_mrb = mrb;
|
||||||
|
static_scriptmrb = scriptMrb;
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
/* Use loop for emscripten */
|
||||||
|
mrb_load_nstring_cxt(static_mrb, "main_update_loop", 16, NULL);
|
||||||
|
emscripten_set_main_loop(main_update_loop, 0, 1);
|
||||||
|
return;
|
||||||
|
#else
|
||||||
|
while (true) {
|
||||||
|
main_update_loop();
|
||||||
|
SDL_Delay(20);
|
||||||
|
if (static_mrb->exc)
|
||||||
|
break;
|
||||||
|
}
|
||||||
mrb_close(scriptMrb);
|
mrb_close(scriptMrb);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mrbBindingExecute()
|
static void mrbBindingExecute()
|
||||||
|
@ -400,6 +426,7 @@ static void mrbBindingExecute()
|
||||||
else
|
else
|
||||||
runRMXPScripts(mrb, ctx);
|
runRMXPScripts(mrb, ctx);
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
checkException(mrb);
|
checkException(mrb);
|
||||||
|
|
||||||
shState->rtData().rqTermAck.set();
|
shState->rtData().rqTermAck.set();
|
||||||
|
@ -407,6 +434,7 @@ static void mrbBindingExecute()
|
||||||
|
|
||||||
mrbc_context_free(mrb, ctx);
|
mrbc_context_free(mrb, ctx);
|
||||||
mrb_close(mrb);
|
mrb_close(mrb);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mrbBindingTerminate()
|
static void mrbBindingTerminate()
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
00000000: 5249 5445 3030 3034 5969 0000 0065 4d41 RITE0004Yi...eMA
|
||||||
|
00000010: 545a 3030 3030 4952 4550 0000 0047 3030 TZ0000IREP...G00
|
||||||
|
00000020: 3030 0000 003f 0001 0004 0000 0000 0004 00...?..........
|
||||||
|
00000030: 0080 0006 0100 003d 0080 00a0 0000 004a .......=.......J
|
||||||
|
00000040: 0000 0001 0000 0b48 656c 6c6f 2057 6f72 .......Hello Wor
|
||||||
|
00000050: 6c64 0000 0001 0004 7075 7473 0045 4e44 ld......puts.END
|
||||||
|
00000060: 0000 0000 08 .....
|
Loading…
Reference in New Issue