我正在查看某人的代码(不可联系),他们已经设置了一个与服务器通信并运行一些 C++ 代码的 websocket 客户端。这是针对新的 Chrome PPAPI。我可以将变量从客户端传递到服务器,但我不确定如何将它们中继到事物的 C++ 端以改变代码中发生的事情?
因此,如果客户端传递 1,C++ 代码会做一件事,如果传递 2,它会做另一件事。我只是看不出它是怎么做到的。
似乎启动 C++ 代码运行的 JavaScript 是:
function onStartTest(e)
{
console.log('Start Test');
var hostname = document.getElementById('hostname').value;
var message = 'start:'+hostname;
common.logMessage(message);
common.naclModule.postMessage(message);
e.preventDefault();
return false;
}
我看了几个例子都无济于事。
最佳答案
所有来自 JavaScript 的异步消息都在 HandleMessage 函数中处理,该函数在您的 pp::Instance 中定义:
class MyInstance : public pp::Instance {
...
virtual void HandleMessage(const pp::Var& message) {
...
}
};
在您的示例中,您发送的是一个字符串值。要提取它,您可以使用 pp::Var::AsString 方法:
virtual void HandleMessage(const pp::Var& message) {
if (message.is_string()) {
std::string str_message = message.AsString();
...
}
}
如果你只想传递数字,你也可以这样做:
virtual void HandleMessage(const pp::Var& message) {
if (message.is_int()) {
int32_t int_message = message.AsInt();
switch (int_message) {
case 1: ...
case 2: ...
}
}
}
看看 documentation在这里了解更多信息。您可以发送 ArrayBuffers,甚至是任意对象。
关于javascript - 如何在 PPAPI 中将变量从 JavaScript 传递到 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678729/