我一直试图从mojo混合应用程序调用一个pdk插件,并且也尝试使用enyo app。在这两种情况下,我的pdk插件显示为,有趣的是在enyo的情况下,我收到插件注册完成后发送的plugin_ready响应。
在web-os网站上,他们提到了pdk插件的问题让它看起来已经不存在了。但我找不到解决方法。
这是我的插件的外观,
PDL_bool powerCall(PDL_JSParameters *params) {
runsine();
char *reply = "Done";
PDL_JSReply(params, reply);
return PDL_TRUE;
}
int main(){
int result = SDL_Init(SDL_INIT_VIDEO);
PDL_Init(0);
PDL_RegisterJSHandler("pawar", powerCall);
PDL_JSRegistrationComplete();
PDL_CallJS("ready", NULL, 0); // this is for enyo
PDL_Quit();
SDL_Quit();
return 0;
}
请建议我如何解决这个问题。我知道这是一项非常简单的任务,并且对此感到很沮丧。
由于 香卡
答案 0 :(得分:2)
在你的插件中,你应该在调用“ready”函数之后,在调用PDL_Quit()和SDL_Quit()之前输入一个事件循环。没有事件循环会导致插件进程立即退出。
以下是基于PDK附带的“简单”应用程序的示例:
int main(){
int result = SDL_Init(SDL_INIT_VIDEO);
PDL_Init(0);
PDL_RegisterJSHandler("pawar", powerCall);
PDL_JSRegistrationComplete();
PDL_CallJS("ready", NULL, 0); // this is for enyo
atexit(SDL_Quit);
atexit(PDL_Quit);
SDL_Event Event;
bool paused = false;
while (1) {
bool gotEvent;
if (paused) {
SDL_WaitEvent(&Event);
gotEvent = true;
}
else {
gotEvent = SDL_PollEvent(&Event);
}
while (gotEvent) {
switch (Event.type) {
case SDL_ACTIVEEVENT:
if (Event.active.state == SDL_APPACTIVE) {
paused = !Event.active.gain;
}
break;
case SDL_QUIT:
// We exit anytime we get a request to quit the app
// all shutdown code is registered via atexit() so this is clean.
exit(0);
break;
// handle any other events interesting to your plugin here
default:
break;
}
gotEvent = SDL_PollEvent(&Event);
}
}
return 0;
}