2016-06-07 5 views
1

Ich versuche, protobuf Nachricht von Server-Seite (Base64 String) zu Javascript-Objekt zu entschlüsseln. Verwenden Sie zum Dekodieren protobuf.js.Wie zu entschlüsseln protobuf base64 Zeichenfolge zu js Objekt

Wie doc vorschlagen:

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

Dies ist, wie ich versuche, es zu tun (Daten - base64 string):

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

ich Fehler bekommen

Decoder/decode64 undefined

+0

zu erstellen Ich kann nicht in dem Code sehen, wo Sie in der Proto-Datei oder Text laden, der Ihr Protobuf-Schema definiert . Sie sollten eine Zeile wie 'ProtoBuf.loadProtoFile (" tests/example1.proto ", builder) haben," wo Sie Ihre .proto-Definition angeben. Das würde erklären, dass der Builder keine Nachrichten erstellt und die Nullwerte, die Sie erhalten, –

+0

@PhilipPryde danke, ich habe den Deskriptor losted. –

+0

Hat das dann für dich funktioniert? Wenn ja, werde ich meinen Kommentar auf eine Antwort stoßen ... –

Antwort

1

fehlt die Linie, wie unten die Proto-Definition zu importieren (wo Tests/example1.proto Name Ihrer Datei ist)

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

oder beim Laden von Proto-String

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

ohne diese die Builder wird unbestimmt sagen, da es nichts gibt, um seine Definition mit