2016-06-07 1 views
1

protobuf 메시지를 서버 측 (base64 문자열)에서 javascript 객체로 디코딩하려고합니다. protobuf.js 디코딩에 사용합니다. 문서로 protobuf base64 문자열을 js 객체로 디코딩하는 방법

제안 :

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 스키마를 정의하는 텍스트에서로드하는 코드에서 볼 수 없습니다 . 'ProtoBuf.loadProtoFile ("tests/example1.proto", builder);와 같은 줄이 있어야한다.'.proto 정의가 어디에 있는지 알려준다. 그게 빌더가 메시지를 생성하지 못하고 당신이 얻고있는 null 값을 설명 할 것입니다. –

+0

@PhilipPryde 감사합니다. 나는 디스크립터를 잃어 버렸습니다. –

+0

그러면 그게 효과가 있었나요? 그렇다면 대답에 대한 내 의견을 부딪 칠 것입니다 ... –

답변

1

(시험/example1.proto은 파일 이름입니다) 아래

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

또는 프로토 정의를 가져올 라인을 누락하는 경우 이것을하지 않고 프로토 문자열

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

에서로드 빌더가 그 정의를 구축 할 아무것도 없기 때문에 빌더는 정의되지 않았다고 말할 것입니다

관련 문제