收到本机消息,但响应失败

时间:2017-09-19 13:17:32

标签: c++ macos google-chrome chrome-native-messaging

我正在开发一个macOS应用程序,它可以通过native messaging与谷歌浏览器扩展程序进行通信。

我使用了来自here的Google官方文档,因此我成功收到了来自扩展程序的数据(如下所示)。

但是当我试图回答时,我总是收到错误。 我的回答是JSON格式,它是:

{
 "text":
        "Client Started"
}

我将swift用于我的viewControllerObjective-c++用于本机消息传递:

ViewController.swift:

let stream = StreamReader()
override func viewDidLoad() {
    super.viewDidLoad()
    stream.getStream()
    stream.writeStream("{\"text\":\"Client Started\"}")
}

StreamReader.m:

- (void)WriteStream:(NSString *)JSONResponse {
    NSString *JSONResponseArray = [NSString stringWithFormat:@"%@", JSONResponse];
    std::string outMsg = [JSONResponseArray UTF8String];
    unsigned int len = outMsg.length();
    std::cout.write(reinterpret_cast<const char *>(&len), 4);
    std::cout << outMsg.data() << std::flush;
}

错误:

enter image description here

注意:我尝试更改响应及其长度,但两种情况下的错误都相同。

1 个答案:

答案 0 :(得分:1)

您应该将字符串的长度信息输出到stdout:

    unsigned int len = outMsg.length();
    std::cout<< char(len & 0xFF)
             << char(((len >> 8) & 0xFF))
             << char(((len >> 16) & 0xFF))
             << char(((len >> 24) & 0xFF));

现在您可以将字符串数据写入stdout。

编辑:使用std::flush立即刷新数据,即将数据从我们的本机消息传递主机发送到目标扩展。我注意到如果我们不这样做,那么这些数据将不会立即发送到目的地。

std::cout << outMsg.data() << std::flush;