0

我正在查看某人的代码(不可联系),他们已经建立了一个与服务器通信并运行一些 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;
}

我看了几个例子无济于事。

4

1 回答 1

3

所有来自 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: ...
    }
  }
}

请查看此处的文档以获取更多信息。您可以发送 ArrayBuffers,甚至还可以发送任意对象。

于 2015-07-31T17:27:25.680 回答