2016-06-07 1 views
1

J'essaie de décoder le protobuf du côté serveur (chaîne base64) en objet javascript. Utiliser pour le décodage protobuf.js.Comment décoder la chaîne protobuf base64 en objet js

Comme doc suggèrent:

var builder = ProtoBuf.newBuilder({ convertFieldsToCamelCase: true }); 
var YourMessage = builder.build("YourMessage"); 
var buffer = ...; // E.g. a buffer received on a WebSocket 
var myMessage = YourMessage.decode(buffer); 
... 
var b64str = ...; // E.g. a string fetched via AJAX 
var myMessage = YourMessage.decode64(b64str); 

Voilà comment j'essaie de le faire (données - chaîne base64)

var proto = dcodeIO.ProtoBuf; 
var buffer = dcodeIO.ByteBuffer; 
var b = buffer.wrap(data,"binary"); 
var builder = proto.newBuilder({ convertFieldsToCamelCase: true }); 
builder.define("Events"); 
var message = builder.build("Events"); 
var result = message.decode(b); //also try to decode base64 string - message.decode64(data); 

J'obtiens l'erreur

decode/decode64 non définie

+0

Je ne peux pas voir dans ce code où vous chargez dans le fichier proto ou le texte qui définit votre schéma protobuf . Vous devriez avoir une ligne comme 'ProtoBuf.loadProtoFile (" tests/example1.proto ", builder);' dire où se trouve votre définition .proto. Cela expliquerait le constructeur ne construisant pas les messages et les valeurs nulles que vous obtenez –

+0

@PhilipPryde merci, j'ai perdu le descripteur. –

+0

Cela a-t-il fonctionné pour vous alors? si oui, je vais cogner mon commentaire à une réponse ... –

Répondre

1

manquant la ligne d'importer la définition de proto comme ci-dessous (où les tests/example1.proto est votre nom de fichier)

ProtoBuf.loadProtoFile("tests/example1.proto", builder);

ou si le chargement de la chaîne proto

ProtoBuf.loadProto(...protoString..., "example1.proto");

sans cela le le constructeur dira indéfini parce qu'il n'y a rien pour construire sa définition avec