2017-09-19 2 views
1

Je développe une application macOS qui peut communiquer avec l'extension google chrome via native messaging.Message natif reçu, mais la réponse a échoué

J'ai utilisé la documentation officielle de google de here, donc j'ai reçu des données de l'extension avec succès (comme indiqué ci-dessous).

Mais quand j'ai essayé de répondre, j'ai toujours une erreur. Ma réponse est au format JSON et il est:

{ 
"text": 
     "Client Started" 
} 

J'utilise swift pour mon viewController et Objective-c++ pour la messagerie native:

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; 
} 

Erreur:

enter image description here

Avis: J'ai essayé de changer à la fois une réponse et sa longueur, mais l'erreur est identique dans les deux situations.

Répondre

1

Vous devriez sortie de informations longueur de la chaîne à stdout:

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

Maintenant, vous pouvez écrire les données de chaîne à stdout:

std::cout << outMsg.data(); 
+1

Merci. Cela m'a vraiment aidé. –