Our js protobuf cannnot decode json format. Ours can only decode binary format AFAIK.
On Tue, Jan 16, 2018 at 9:35 AM <[email protected]> wrote: > my question is do you have a procedure to decode protobuf on client side. > > > On Tuesday, January 16, 2018 at 11:33:08 AM UTC-6, Bo Yang wrote: > >> Sorry, protobuf.js is not maintained by us. Please contact the owner. >> >> On Tue, Jan 16, 2018 at 9:21 AM <[email protected]> wrote: >> > protobuf.js version: 6.8.4 >>> >>> I am using Django-channels in the backed and javascript WebSockets on >>> the front end. I have a set of 10 .proto files which import one or more of >>> these .proto files. I was able to serialize my JSON on the server side, >>> send data over the wire and receive base64 encoded message. I am having >>> difficulty trying to convert this message to JSON. >>> >>> I have encountered following problems. >>> >>> - if I convert my actual data to the uint8array buffer and pass it >>> into decode: illegal buffer >>> - if i use toObject() prints completely wrong object. the structure >>> of obj is correct but the values that go into this template are erratic. >>> >>> ------------------------------ >>> >>> -------protobuf.load("/static/proto/web.proto",function(err,root){ >>> >>> wssm = root.lookupType("web.WebSocketServerMessage"); >>> var obj1 = wssm.toObject(atob(message.data), { >>> enums: String, // enums as string names >>> longs: String, // longs as strings (requires long.js) >>> bytes: String, // bytes as base64 encoded strings >>> defaults: true, // includes default values >>> arrays: true, // populates empty arrays (repeated fields) even if >>> defaults=false >>> objects: true, // populates empty objects (map fields) even if >>> defaults=false >>> oneofs: true // includes virtual oneof fields set to the present >>> field's name >>> }); >>> >>> ------------------------------ >>> >>> ------- >>> Object { type: "REPLY", reply: null, exception: null, data: null } >>> ##COMMENTS: type is wrong, expected to have values in reply and data. >>> >>> >>> it will be helpful if you could point me to a snippet. >>> Note: I am not using node, need help only in js client. >>> >>> my message on client looks like : >>> [image: image] >>> >>> >>> >>> >>> CODE::: >>> >>> i have tried out what you have suggested it dosent work . please look at >>> the program and commented output. >>> >>> `var wssm=null >>> protobuf.load("/static/proto/web.proto",function(err,root){ >>> >>> console.log(err); >>> wssm = root.lookupType("web.WebSocketServerMessage"); >>> >>> socket.onmessage = function (message2){ >>> >>> console.log("BASE64 encoded : ",message2.data); >>> >>> /*00:07:56.460 BASE64 encoded : >>> CAQilwEIBxAIGpABCo0BChkKFy9DRlMvQ0ZFX0VWUy9DbWRDb3VudGVyEgQIAigAGgQIAigAIJeRr+KPLCivyprrnAkwADgBWhcyMDE4LTAxLTE2VDAwOjA3OjU2LjE3NWIXMTk4MC0wMS0xN1QxNzozNzoyOS44NDe4AfOcr+KPLMIBFzIwMTgtMDEtMTZUMDA6MDc6NTcuNjc1 >>> 1 client2.js:294:17*/ >>> >>> console.log("applied atob() : ",atob(message2.data)); >>> >>> / >>> >>> >>> *00:07:56.462 applied atob() : >>> ��"�������������/CFS/CFE_EVS/ErrCounter����(*/ >>> >>> console.log("protobuf.util.base64 : >>> ",protobuf.util.base64.decode(message2.data)); >>> >>> /*TypeError: buffer is undefined[Learn More] protobuf.js:204:17 >>> decode >>> http://cdn.rawgit.com/dcodeIO/protobuf.js/6.8.4/dist/protobuf.js:204:17 >>> Session_Maintainance.prototype.subscribeTelemetry/</socket.onmessage >>> http://127.0.0.1:8000/client2.js:296:57*/ >>> >>> });` >>> >>> ::: >>> >>> >>> >>> # web.proto >>> syntax="proto2"; >>> >>> package web; >>> option java_package = "org.yamcs.protobuf"; >>> >>> import "yamcs.proto"; >>> import "archive.proto"; >>> import "commanding.proto"; >>> import "pvalue.proto"; >>> import "alarms.proto"; >>> import "yamcsManagement.proto"; >>> >>> message WebSocketClientMessage { >>> optional uint32 protocolVersion = 1; >>> optional uint32 sequenceNumber = 2; >>> optional string resource = 3; >>> optional string operation = 4; >>> optional bytes data = 5; >>> } >>> >>> message WebSocketServerMessage { >>> enum MessageType { >>> REPLY = 2; // one-time rpc-style ACK reply >>> EXCEPTION = 3; // one-time rpc-style exception reply >>> DATA = 4; // various subscribed data >>> } >>> >>> message WebSocketReplyData { >>> optional uint32 protocolVersion = 1; >>> optional int32 sequenceNumber = 2; // allow for -1 >>> optional string type = 3; >>> optional string message = 4; >>> optional bytes data = 5; // Structured data >>> } >>> >>> message WebSocketExceptionData { >>> optional uint32 protocolVersion = 1; >>> optional int32 sequenceNumber = 2; // allow for -1 >>> optional string type = 3; >>> optional string message = 4; >>> optional bytes data = 5; // Structured exception data >>> } >>> >>> // Could use protobuf3 Any-type some day. >>> message WebSocketSubscriptionData { >>> optional uint32 sequenceNumber = 1; >>> optional yamcs.ProtoDataType type = 2; >>> optional pvalue.ParameterData parameterData = 3; >>> optional commanding.CommandHistoryEntry command = 4; >>> optional yamcsManagement.ProcessorInfo processorInfo = 5; >>> optional yamcsManagement.ClientInfo clientInfo = 6; >>> optional yamcsManagement.Statistics statistics = 7; >>> optional yamcs.Event event = 8; >>> optional archive.StreamData streamData = 9; >>> optional alarms.AlarmData alarmData = 10; >>> optional yamcs.TimeInfo timeInfo = 11; >>> optional yamcsManagement.LinkEvent linkEvent = 12; >>> optional commanding.CommandQueueInfo commandQueueInfo = 13; >>> optional commanding.CommandQueueEvent commandQueueEvent = 14; >>> optional yamcs.TmPacketData tmPacket = 15; >>> optional ConnectionInfo connectionInfo = 16; >>> >>> optional WebSocketExtensionData extensionData = 100; >>> >>> } >>> >>> optional MessageType type = 1; >>> optional WebSocketReplyData reply = 2; >>> optional WebSocketExceptionData exception = 3; >>> optional WebSocketSubscriptionData data = 4; >>> } >>> >>> // Escape hatch for providing non-core Yamcs data over web socket >>> message WebSocketExtensionData { >>> optional uint32 type = 1; >>> optional bytes data = 2; >>> } >>> >>> // Generic holder for an exception >>> message RestExceptionMessage { >>> optional string type = 1; >>> optional string msg = 2; >>> extensions 100 to 200; >>> } >>> >>> message ParameterSubscriptionRequest { >>> repeated yamcs.NamedObjectId id = 1; >>> //if set to true, an error message will be sent back if any parameter >>> from the list above is invalid >>> // by default is false >>> optional bool abortOnInvalid = 2; >>> >>> // if set to true, send parameter updates when parameters expire. >>> // the parameter will have the same value and timestamp like the >>> previous sent one, but the acquisition status will be set to EXPIRED >>> (instead of ACQUIRED) >>> //by default is false >>> optional bool updateOnExpiration = 3; >>> >>> //if set to true (default), send a first batch of the parameters from >>> cache if available >>> // otherwise just wait for the parameters to be updated >>> optional bool sendFromCache = 4; >>> >>> //Hack to allow the old subscribe with NamedObjectList to work when json >>> is used. >>> // When protobuf is used, the "id" will work since it uses the same >>> field id (1) with the "list" from NamedObjectList >>> // remove this field when we are sure nobody uses the old method >>> repeated yamcs.NamedObjectId list = 10000 [deprecated=true]; >>> } >>> >>> message ParameterSubscriptionResponse { >>> repeated yamcs.NamedObjectId valid = 1; >>> repeated yamcs.NamedObjectId invalid = 2; >>> } >>> >>> //sent via the websocket with information about connected client >>> message ConnectionInfo { >>> optional int32 clientId = 1; >>> optional yamcsManagement.YamcsInstance instance = 2; >>> optional yamcsManagement.ProcessorInfo processor = 3; >>> } >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Protocol Buffers" group. >>> >> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >>> To post to this group, send email to [email protected]. >> >> >>> Visit this group at https://groups.google.com/group/protobuf. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/protobuf. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
