Взгляните на некоторые примеры в SDK в каталоге examples / demo: earth, voronoi, flock, pi_generator и life используют ppapi_simple.
Вот как это работает:
При использовании ppapi_simple все события (например, события ввода, сообщения из JavaScript) добавляются в очередь событий. Следующий код взят из пример из жизни (хотя некоторые из них модифицированы и не тестировались):
PSEventSetFilter(PSE_ALL);
while (true) {
PSEvent* ps_event;
/* Process all waiting events without blocking */
while ((ps_event = PSEventTryAcquire()) != NULL) {
earth.HandleEvent(ps_event);
PSEventRelease(ps_event);
}
...
}
Затем HandleEvent определяет, что это за событие, и обрабатывает его в зависимости от приложения:
void ProcessEvent(PSEvent* ps_event) {
...
if (ps_event->type == PSE_INSTANCE_HANDLEINPUT) {
...
} else if (ps_event->type == PSE_INSTANCE_HANDLEMESSAGE) {
// ps_event->as_var is a PP_Var with the value sent from JavaScript.
// See docs for it here: https://developers.google.com/native-client/dev/pepperc/struct_p_p___var
if (ps_event->as_var->type == PP_VARTYPE_STRING) {
const char* message;
uint32_t len;
message = PSInterfaceVar()->VarToUtf8(ps_event->as_var, &len);
// Do something with the message. Note that it is NOT null-terminated.
}
}
Чтобы отправлять сообщения обратно в JavaScript, используйте функцию PostMessage в интерфейсе обмена сообщениями:
PP_Var message;
message = PSInterfaceVar()->VarFromUtf8("Hello, World!", 13);
// Send a string message to JavaScript
PSInterfaceMessaging()->PostMessage(PSGetInstanceId(), message);
// Release the string resource
PSInterfaceVar()->Release(message);
Вы также можете отправлять и получать другие типы JavaScript: целые числа, числа с плавающей запятой, массивы, буферы массивов и словари. См. Также PPB_VarArray, PPB_VarArrayBuffer и PPB_VarDictionary интерфейсов.
person
binji
schedule
05.12.2013