2016-06-07 4 views
1

Я пытаюсь декодировать сообщение protobuf со стороны сервера (строка base64) в javascript-объект. Используется для декодирования protobuf.js.Как декодировать protobuf base64 string в js object

Как документ предполагает:

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

Это, как я пытаюсь сделать это (данные - 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); 

Я получаю ошибку

расшифровывают/decode64 неопределенной

+0

Я не вижу в этом коде, где вы загружаете файл proto или текст, который определяет ваш protobuf sche миллиампер У вас должна быть такая строка, как 'ProtoBuf.loadProtoFile (« tests/example1.proto », builder),' рассказывая, где находится ваше определение .proto. Это объясняет, что строитель не создает сообщения и нулевые значения, которые вы получаете –

+0

@PhilipPryde благодарит, я потерял дескриптор. –

+0

Это работало для вас тогда? если так, я отвечу на свой комментарий к ответу ... –

ответ

1

Отсутствующие линию, чтобы импортировать определение прото, как показано ниже (где тесты/example1.proto ваше имя файла)

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

или если загрузка из прото строки

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

без этого строитель скажет undefined, потому что нет ничего, чтобы построить его определение с помощью