Open
Description
Hi folks,
I hope this finds you well. I hope I am blind or misunderstood the bindings version for node.js. I can get a decode example working but not for encoding. Here are the respective decoding and encoding source files. Can anyone open up my eyes please?
Decoding:
const GtfsRealtimeBindings = require('gtfs-realtime-bindings');
const debug = require('debug')('gtfs');
const fs = require("fs");
fs.open('./vehicle_position_another.pb', 'r', function(status, fd) {
if (status) {
debug('status: %s',status.message);
return;
}else{
// fs.readFile takes the file path and the callback
const buffer=fs.readFileSync('./vehicle_position_another.pb', (err, data) => {
// if there's an error, log it and return
if (err) {
debug('error: %s',err)
return
}
})
// Print the string representation of the data
if(buffer){
// decode
var feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(buffer);
if(feed){
debug('feed: %s',feed)
debug('feed.toString(): %s',feed.toString())
let header=feed.header;
if(header){
debug('header: %s',header)
let gtfsRealtimeVersion=header.gtfsRealtimeVersion;
if(gtfsRealtimeVersion){
debug('gtfsRealtimeVersion: %s',gtfsRealtimeVersion)
}
}
feed.entity.forEach(function(entity) {
if (entity.trip_update) {
debug('trip update')
}else if(entity.vehicle){
debug('vehicle position')
debug('entity to string: %s',entity.vehicle.toString())
}else if(entity.alert){
debug('alert')
}else{
debug('entity unknown')
}
});
// Verify the payload if necessary (i.e. when possibly incomplete or invalid)
let errMsg = GtfsRealtimeBindings.transit_realtime.FeedMessage.verify(feed);
if (errMsg){
debug('msg invalid')
throw Error(errMsg);
}else{
debug('msg valid')
}
feed.header.gtfsRealtimeVersion='2.0';
// Verify the payload if necessary (i.e. when possibly incomplete or invalid)
errMsg = GtfsRealtimeBindings.transit_realtime.FeedMessage.verify(feed);
if (errMsg){
debug('msg invalid')
throw Error(errMsg);
}else{
debug('msg valid')
}
const bufEnc = GtfsRealtimeBindings.transit_realtime.FeedMessage.encode(feed);
debug('bufEnc: %s',bufEnc)
debug('bufEnc.toString(): %s',bufEnc.toString())
}else{
debug('feed unavailabe')
}
}else{
debug('buffer unavailable')
}
}
});
Encoding:
const GtfsRealtimeBindings = require('gtfs-realtime-bindings');
const debug = require('debug')('gtfs');
let msgFeedHdr={
gtfs_realtime_version:"2.0"
}
var feedHeader = GtfsRealtimeBindings.transit_realtime.FeedHeader.create(msgFeedHdr); // or use .fromObject if conversion is necessary
debug('feedHeader created')
debug('feedHeader: %s',feedHeader)
var errMsg = GtfsRealtimeBindings.transit_realtime.FeedHeader.verify(feedHeader);
if (errMsg){
debug('feedHeader invalid')
throw Error(errMsg);
}else{
debug('feedHeader valid')
}
let msgFeedMsg={
header:{feedHeader}
}
var feedMessage = GtfsRealtimeBindings.transit_realtime.FeedMessage.create(msgFeedMsg); // or use .fromObject if conversion is necessary
debug('feedMessage created')
debug('feedMessage: %s',feedMessage)
var errMsg = GtfsRealtimeBindings.transit_realtime.FeedMessage.verify(feedMessage);
if (errMsg){
debug('feedMessage invalid')
throw Error(errMsg);
}else{
debug('feedMessage valid')
}
Decoding output:
~/Desktop/sandbox/gtfsRtBindingsDecode$ nodemon index.js
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
gtfs feed: [object Object] +0ms
gtfs feed.toString(): [object Object] +4ms
gtfs header: [object Object] +0ms
gtfs gtfsRealtimeVersion: 1.0 +0ms
gtfs vehicle position +0ms
gtfs entity to string: [object Object] +0ms
gtfs msg valid +1ms
gtfs msg valid +0ms
gtfs bufEnc: [object Object] +2ms
gtfs bufEnc.toString(): [object Object] +1ms
[nodemon] clean exit - waiting for changes before restart
Encoding output:
~/Desktop/sandbox/gtfsRtBindingsEncode$ nodemon index.js
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
gtfs feedHeader created +0ms
gtfs feedHeader: [object Object] +3ms
gtfs feedHeader valid +1ms
gtfs feedMessage created +0ms
gtfs feedMessage: [object Object] +0ms
gtfs feedMessage invalid +0ms
/home/user/Desktop/sandbox/gtfsRtBindingsEncode/index.js:31
throw Error(errMsg);
^
Error: header.gtfsRealtimeVersion: string expected
at Object.<anonymous> (/home/user/Desktop/sandbox/gtfsRtBindingsEncode/index.js:31:11)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
[nodemon] app crashed - waiting for file changes before starting...
Cheers!
Metadata
Metadata
Assignees
Labels
No labels