Ответ 1
Чтобы хост с собственными сообщениями отправил данные обратно в Chrome, вы должны сначала отправить четыре байта информации о длине, а затем отправить форматированное сообщение JSON в виде строки / char -array.
Ниже приведены два примера для C и С++, которые делают то же самое несколько разными способами.
Пример C:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]) {
// Define our message
char message[] = "{\"text\": \"This is a response message\"}";
// Collect the length of the message
unsigned int len = strlen(message);
// We need to send the 4 bytes of length information
printf("%c%c%c%c", (char) (len & 0xff),
(char) ((len>>8) & 0xFF),
(char) ((len>>16) & 0xFF),
(char) ((len>>24) & 0xFF));
// Now we can output our message
printf("%s", message);
return 0;
}
Пример С++:
#include <string.h>
int main(int argc, char* argv[]) {
// Define our message
std::string message = "{\"text\": \"This is a response message\"}";
// Collect the length of the message
unsigned int len = message.length();
// We need to send the 4 bytes of length information
std::cout << char(((len>>0) & 0xFF))
<< char(((len>>8) & 0xFF))
<< char(((len>>16) & 0xFF))
<< char(((len>>24) & 0xFF));
// Now we can output our message
std::cout << message;
return 0;
}
(Фактическое сообщение может быть отправлено одновременно с информацией о длине, оно просто разбито для ясности.)
Итак, следуя примеру OP Chrome, вот как вывести сообщение:
port.onMessage.addListener(function(msg) {
console.log("Received" + msg.text);
});
В действительности нет требования использовать "текст" в качестве ключа, возвращаемого из вашего приложения для обмена сообщениями; это может быть что угодно. Строка JSON, переданная слушателю из вашего приложения для обмена сообщениями, преобразуется в объект JavaScript.
Для примера С++ приложения с естественными сообщениями, которое использует вышеупомянутый метод в сочетании с jsoncpp (библиотека С++ JSON), а также анализирует запрос, отправленный в приложение, см. здесь: https://github.com/kylehuff/libwebpg/blob/22d4843f41670d4fd7c4cc7ea3cf833edf8f1baf/webpg.cc#L4501