From 2fdfaac92ed0433d98e7590f618d54f1e3c48861 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 18 Feb 2015 17:03:03 -0800 Subject: [PATCH 1/8] Added route_guide server example implementation --- src/node/examples/route_guide.proto | 120 +++++++++++++++ src/node/examples/route_guide_server.js | 186 ++++++++++++++++++++++++ 2 files changed, 306 insertions(+) create mode 100644 src/node/examples/route_guide.proto create mode 100644 src/node/examples/route_guide_server.js diff --git a/src/node/examples/route_guide.proto b/src/node/examples/route_guide.proto new file mode 100644 index 00000000000..b648a058918 --- /dev/null +++ b/src/node/examples/route_guide.proto @@ -0,0 +1,120 @@ +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +option java_package = "ex.grpc"; + +package examples; + +// Interface exported by the server. +service RouteGuide { + // A simple RPC. + // + // Obtains the feature at a given position. + rpc GetFeature(Point) returns (Feature) {} + + // A server-to-client streaming RPC. + // + // Obtains the Features available within the given Rectangle. Results are + // streamed rather than returned at once (e.g. in a response message with a + // repeated field), as the rectangle may cover a large area and contain a + // huge number of features. + rpc ListFeatures(Rectangle) returns (stream Feature) {} + + // A client-to-server streaming RPC. + // + // Accepts a stream of Points on a route being traversed, returning a + // RouteSummary when traversal is completed. + rpc RecordRoute(stream Point) returns (RouteSummary) {} + + // A Bidirectional streaming RPC. + // + // Accepts a stream of RouteNotes sent while a route is being traversed, + // while receiving other RouteNotes (e.g. from other users). + rpc RouteChat(stream RouteNote) returns (stream RouteNote) {} +} + +// Points are represented as latitude-longitude pairs in the E7 representation +// (degrees multiplied by 10**7 and rounded to the nearest integer). +// Latitudes should be in the range +/- 90 degrees and longitude should be in +// the range +/- 180 degrees (inclusive). +message Point { + optional int32 latitude = 1; + optional int32 longitude = 2; +} + +// A latitude-longitude rectangle, represented as two diagonally opposite +// points "lo" and "hi". +message Rectangle { + // One corner of the rectangle. + optional Point lo = 1; + + // The other corner of the rectangle. + optional Point hi = 2; +} + +// A feature names something at a given point. +// +// If a feature could not be named, the name is empty. +message Feature { + // The name of the feature. + optional string name = 1; + + // The point where the feature is detected. + optional Point location = 2; +} + +// A RouteNote is a message sent while at a given point. +message RouteNote { + // The location from which the message is sent. + optional Point location = 1; + + // The message to be sent. + optional string message = 2; +} + +// A RouteSummary is received in response to a RecordRoute rpc. +// +// It contains the number of individual points received, the number of +// detected features, and the total distance covered as the cumulative sum of +// the distance between each point. +message RouteSummary { + // The number of points received. + optional int32 point_count = 1; + + // The number of known features passed while traversing the route. + optional int32 feature_count = 2; + + // The distance covered in metres. + optional int32 distance = 3; + + // The duration of the traversal in seconds. + optional int32 elapsed_time = 4; +} \ No newline at end of file diff --git a/src/node/examples/route_guide_server.js b/src/node/examples/route_guide_server.js new file mode 100644 index 00000000000..3df90e91738 --- /dev/null +++ b/src/node/examples/route_guide_server.js @@ -0,0 +1,186 @@ +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +var _ = require('underscore'); +var grpc = require('..'); +var examples = grpc.load(__dirname + '/route_guide.proto').examples; + +var Server = grpc.buildServer([examples.RouteGuide.service]); + +var COORD_FACTOR = 1e7; + +var feature_list = []; + +function randomWord(length) { + var alphabet = 'abcdefghijklmnopqrstuvwxyz'; + var word = ''; + for (var i = 0; i < length; i++) { + word += alphabet[_.random(0, alphabet.length - 1)]; + } + return word; +} + +function checkFeature(point) { + var feature; + for (var i = 0; i < feature_list.length; i++) { + feature = feature_list[i]; + if (feature.point.latitude === point.latitude && + feature.point.longitude === point.longitude) { + return feature; + } + } + var name; + if (_.random(0,1) === 0) { + name = ''; + } else { + name = randomWord(5); + } + feature = { + name: name, + location: point + }; + feature_list.push(feature); + return feature; +} + +function getFeature(call, callback) { + callback(null, checkFeature(call.request)); +} + +function listFeatures(call) { + var lo = call.request.lo; + var hi = call.request.hi; + var left = _.min(lo.longitude, hi.longitude); + var right = _.max(lo.longitude, hi.longitude); + var top = _.max(lo.latitude, hi.latitude); + var bottom = _.max(lo.latitude, hi.latitude); + _.each(feature_list, function(feature) { + if (feature.location.longitude >= left && + feature.location.longitude <= right && + feature.location.latitude >= bottom && + feature.location.latitude <= top) { + call.write(feature); + } + }); + call.end(); +} + +/** + * Calculate the distance between two points using the "haversine" formula. + * This code was taken from http://www.movable-type.co.uk/scripts/latlong.html. + * @param start The starting point + * @param end The end point + * @return The distance between the points in meters + */ +function getDistance(start, end) { + var lat1 = start.latitude / COORD_FACTOR; + var lat2 = end.latitude / COORD_FACTOR; + var lon1 = start.longitude / COORD_FACTOR; + var lon2 = end.longitude / COORD_FACTOR; + var R = 6371000; // metres + var φ1 = lat1.toRadians(); + var φ2 = lat2.toRadians(); + var Δφ = (lat2-lat1).toRadians(); + var Δλ = (lon2-lon1).toRadians(); + + var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) + + Math.cos(φ1) * Math.cos(φ2) * + Math.sin(Δλ/2) * Math.sin(Δλ/2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + + return R * c; +} + +function recordRoute(call, callback) { + var point_count = 0; + var feature_count = 0; + var distance = 0; + var previous = null; + var start_time = process.hrtime(); + call.on('data', function(point) { + point_count += 1; + if (checkFeature(point) !== '') { + feature_count += 1; + } + if (previous != null) { + distance += getDistance(previous, point); + } + previous = point; + }); + call.on('end', function() { + callback(null, { + point_count: point_count, + feature_count: feature_count, + distance: distance|0, + elapsed_time: process.hrtime(start_time)[0] + }); + }); +} + +var route_notes = {}; + +function pointKey(point) { + return point.latitude + ' ' + point.longitude; +} + +function routeChat(call, callback) { + call.on('data', function(note) { + var key = pointKey(note.location); + if (route_notes.hasOwnProperty(key)) { + _.each(route_notes[key], function(note) { + call.write(note); + }); + } else { + route_notes[key] = []; + } + route_notes[key].push(note); + }); + call.on('end', function() { + call.end(); + }); +} + +function getServer() { + return new Server({ + 'examples.RouteGuide' : { + getFeature: getFeature, + listFeatures: listFeatures, + recordRoute: recordRoute, + routeChat: routeChat + } + }); +} + +if (require.main === module) { + var routeServer = getServer(); + routeServer.bind('0.0.0.0:0'); + routeServer.listen(); +} + +exports.getServer = getServer; From 1d369e5f80361c45a262e5febf169ea8d32af977 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 19 Feb 2015 10:28:41 -0800 Subject: [PATCH 2/8] Added comments and fixed some minor bugs --- src/node/examples/route_guide.proto | 2 +- src/node/examples/route_guide_server.js | 77 ++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/src/node/examples/route_guide.proto b/src/node/examples/route_guide.proto index b648a058918..4c7be175e4c 100644 --- a/src/node/examples/route_guide.proto +++ b/src/node/examples/route_guide.proto @@ -117,4 +117,4 @@ message RouteSummary { // The duration of the traversal in seconds. optional int32 elapsed_time = 4; -} \ No newline at end of file +} diff --git a/src/node/examples/route_guide_server.js b/src/node/examples/route_guide_server.js index 3df90e91738..b21190d62e4 100644 --- a/src/node/examples/route_guide_server.js +++ b/src/node/examples/route_guide_server.js @@ -35,19 +35,42 @@ var Server = grpc.buildServer([examples.RouteGuide.service]); var COORD_FACTOR = 1e7; +/** + * For simplicity, a point is a record type that looks like + * {latitude: number, longitude: number}, and a feature is a record type that + * looks like {name: string, location: point}. feature objects with name==='' are + * points with no feature. + */ + +/** + * List of feature objects at points that have been requested so far. + */ var feature_list = []; +/** + * Return a random "word" (alphabetic character sequence) of the given length. + * @param {number} length The length of the word to create + * @return {string} An alphabetic string with the given length. + */ function randomWord(length) { var alphabet = 'abcdefghijklmnopqrstuvwxyz'; var word = ''; for (var i = 0; i < length; i++) { + // Add a random character from the alphabet to the word word += alphabet[_.random(0, alphabet.length - 1)]; } return word; } +/** + * Get a feature object at the given point, or creates one if it does not exist. + * @param {point} point The point to check + * @return {feature} The feature object at the point. Note that an empty name + * indicates no feature + */ function checkFeature(point) { var feature; + // Check if there is already a feature object for the given point for (var i = 0; i < feature_list.length; i++) { feature = feature_list[i]; if (feature.point.latitude === point.latitude && @@ -55,6 +78,7 @@ function checkFeature(point) { return feature; } } + // If not, create a new one with 50% chance of indicating "no feature present" var name; if (_.random(0,1) === 0) { name = ''; @@ -65,14 +89,27 @@ function checkFeature(point) { name: name, location: point }; + // Add the feature object to the list and return it feature_list.push(feature); return feature; } +/** + * getFeature request handler. Gets a request with a point, and responds with a + * feature object indicating whether there is a feature at that point. + * @param {EventEmitter} call Call object for the handler to process + * @param {function(Error, feature)} callback Response callback + */ function getFeature(call, callback) { callback(null, checkFeature(call.request)); } +/** + * listFeatures request handler. Gets a request with two points, and responds + * with a stream of all features in the bounding box defined by those points. + * @param {Writable} call Writable stream for responses with an additional + * request property for the request value. + */ function listFeatures(call) { var lo = call.request.lo; var hi = call.request.hi; @@ -80,7 +117,11 @@ function listFeatures(call) { var right = _.max(lo.longitude, hi.longitude); var top = _.max(lo.latitude, hi.latitude); var bottom = _.max(lo.latitude, hi.latitude); + // For each feature, check if it is in the given bounding box _.each(feature_list, function(feature) { + if (feature.name === '') { + return; + } if (feature.location.longitude >= left && feature.location.longitude <= right && feature.location.latitude >= bottom && @@ -117,17 +158,28 @@ function getDistance(start, end) { return R * c; } +/** + * recordRoute handler. Gets a stream of points, and responds with statistics + * about the "trip": number of points, number of known features visited, total + * distance traveled, and total time spent. + * @param {Readable} call The request point stream. + * @param {function(Error, routeSummary)} callback The callback to pass the + * response to + */ function recordRoute(call, callback) { var point_count = 0; var feature_count = 0; var distance = 0; var previous = null; + // Start a timer var start_time = process.hrtime(); call.on('data', function(point) { point_count += 1; - if (checkFeature(point) !== '') { + if (checkFeature(point).name !== '') { feature_count += 1; } + /* For each point after the first, add the incremental distance from the + * previous point to the total distance value */ if (previous != null) { distance += getDistance(previous, point); } @@ -137,7 +189,9 @@ function recordRoute(call, callback) { callback(null, { point_count: point_count, feature_count: feature_count, + // Cast the distance to an integer distance: distance|0, + // End the timer elapsed_time: process.hrtime(start_time)[0] }); }); @@ -145,13 +199,25 @@ function recordRoute(call, callback) { var route_notes = {}; +/** + * Turn the point into a dictionary key. + * @param {point} point The point to use + * @return {string} The key for an object + */ function pointKey(point) { return point.latitude + ' ' + point.longitude; } -function routeChat(call, callback) { +/** + * routeChat handler. Receives a stream of message/location pairs, and responds + * with a stream of all previous messages at each of those locations. + * @param {Duplex} call The stream for incoming and outgoing messages + */ +function routeChat(call) { call.on('data', function(note) { var key = pointKey(note.location); + /* For each note sent, respond with all previous notes that correspond to + * the same point */ if (route_notes.hasOwnProperty(key)) { _.each(route_notes[key], function(note) { call.write(note); @@ -159,6 +225,7 @@ function routeChat(call, callback) { } else { route_notes[key] = []; } + // Then add the new note to the list route_notes[key].push(note); }); call.on('end', function() { @@ -166,6 +233,11 @@ function routeChat(call, callback) { }); } +/** + * Get a new server with the handler functions in this file bound to the methods + * it serves. + * @return {Server} The new server object + */ function getServer() { return new Server({ 'examples.RouteGuide' : { @@ -178,6 +250,7 @@ function getServer() { } if (require.main === module) { + // If this is run as a script, start a server on an unused port var routeServer = getServer(); routeServer.bind('0.0.0.0:0'); routeServer.listen(); From b6c2f52169c8d1745c0fe873f6aa4a5e764eea43 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 19 Feb 2015 15:40:26 -0800 Subject: [PATCH 3/8] Switched to using pre-defined list of features --- src/node/examples/route_guide_db.json | 1 + src/node/examples/route_guide_server.js | 32 ++++++------------------- 2 files changed, 8 insertions(+), 25 deletions(-) create mode 100644 src/node/examples/route_guide_db.json diff --git a/src/node/examples/route_guide_db.json b/src/node/examples/route_guide_db.json new file mode 100644 index 00000000000..57f749382a4 --- /dev/null +++ b/src/node/examples/route_guide_db.json @@ -0,0 +1 @@ +[{"location":{"latitude":-898084041,"longitude":-956335530},"name":"Antarctica"},{"location":{"latitude":-146631624,"longitude":-958383511},"name":""},{"location":{"latitude":804112575,"longitude":-442594532},"name":"Greenland"},{"location":{"latitude":-49416972,"longitude":-350954955},"name":"Brazil"},{"location":{"latitude":89468665,"longitude":242327820},"name":"Buram, Sudan"},{"location":{"latitude":-649624710,"longitude":746289111},"name":""},{"location":{"latitude":-505487958,"longitude":-838328104},"name":""},{"location":{"latitude":848121953,"longitude":-298247781},"name":""},{"location":{"latitude":524094837,"longitude":-795584572},"name":"Baffin Region, NU, Canada"},{"location":{"latitude":56485291,"longitude":-187715698},"name":""},{"location":{"latitude":-470089856,"longitude":1789140056},"name":""},{"location":{"latitude":-577486081,"longitude":-1733155598},"name":""},{"location":{"latitude":577741664,"longitude":-873781618},"name":"Keewatin Region, NU, Canada"},{"location":{"latitude":306507262,"longitude":219338963},"name":"Al Wahat, Libya"},{"location":{"latitude":-446911497,"longitude":1679295563},"name":"154 Milford Sound Highway, Fiordland National Park 9679, New Zealand"},{"location":{"latitude":733881426,"longitude":737563031},"name":"Russia, 629705"},{"location":{"latitude":-688087271,"longitude":-262799641},"name":""},{"location":{"latitude":-99379946,"longitude":1774186549},"name":""},{"location":{"latitude":-65992383,"longitude":1099806539},"name":"Indonesia"},{"location":{"latitude":220938950,"longitude":968560584},"name":"41, Republic of the Union of Myanmar"},{"location":{"latitude":-594140442,"longitude":1504883782},"name":""},{"location":{"latitude":-707179151,"longitude":-896729854},"name":""},{"location":{"latitude":-787916310,"longitude":-889044879},"name":""},{"location":{"latitude":-119497900,"longitude":1114024289},"name":""},{"location":{"latitude":-648254087,"longitude":362768502},"name":""},{"location":{"latitude":-402418031,"longitude":117993618},"name":""},{"location":{"latitude":130550282,"longitude":-1032012014},"name":""},{"location":{"latitude":734388781,"longitude":-452362128},"name":""},{"location":{"latitude":-533182420,"longitude":1155727285},"name":""},{"location":{"latitude":741870560,"longitude":585594215},"name":""},{"location":{"latitude":-722890458,"longitude":-812696271},"name":""},{"location":{"latitude":-589756031,"longitude":-640124308},"name":""},{"location":{"latitude":190966959,"longitude":1496287526},"name":""},{"location":{"latitude":-836654415,"longitude":-1662752612},"name":""},{"location":{"latitude":-731583802,"longitude":-574895638},"name":""},{"location":{"latitude":-666407402,"longitude":-1535334105},"name":""},{"location":{"latitude":-790147961,"longitude":-1328725946},"name":""},{"location":{"latitude":858845788,"longitude":-864446073},"name":""},{"location":{"latitude":477627565,"longitude":336161401},"name":""},{"location":{"latitude":878499845,"longitude":-1366230271},"name":""},{"location":{"latitude":161644757,"longitude":1232275165},"name":""},{"location":{"latitude":654854594,"longitude":567182834},"name":""},{"location":{"latitude":572943963,"longitude":1261462818},"name":""},{"location":{"latitude":-679708566,"longitude":244550718},"name":""},{"location":{"latitude":-381192803,"longitude":1745293826},"name":""},{"location":{"latitude":137171282,"longitude":293455452},"name":""},{"location":{"latitude":667714793,"longitude":-26493598},"name":""},{"location":{"latitude":201258356,"longitude":1083312913},"name":""},{"location":{"latitude":-687799996,"longitude":-966880051},"name":""},{"location":{"latitude":-437056011,"longitude":1700457053},"name":""},{"location":{"latitude":-187508133,"longitude":511728352},"name":""},{"location":{"latitude":-512677292,"longitude":-911360176},"name":""},{"location":{"latitude":-208144386,"longitude":449727920},"name":""},{"location":{"latitude":-269716310,"longitude":-1370371395},"name":""},{"location":{"latitude":796592091,"longitude":-122849658},"name":""},{"location":{"latitude":134492646,"longitude":-894681833},"name":""},{"location":{"latitude":894694483,"longitude":-1229015411},"name":""},{"location":{"latitude":567905024,"longitude":-332346260},"name":""},{"location":{"latitude":838345452,"longitude":745395722},"name":""},{"location":{"latitude":108813570,"longitude":1517086626},"name":""},{"location":{"latitude":-273284408,"longitude":1637597498},"name":""},{"location":{"latitude":-221336059,"longitude":-3716325},"name":""},{"location":{"latitude":231027483,"longitude":1469916710},"name":""},{"location":{"latitude":223499746,"longitude":-805682376},"name":"Diego García, Rodas, Cuba"},{"location":{"latitude":-257443435,"longitude":1566640501},"name":""},{"location":{"latitude":402291696,"longitude":-1298402965},"name":""},{"location":{"latitude":-398778441,"longitude":552807095},"name":""},{"location":{"latitude":152404713,"longitude":-1465239382},"name":""},{"location":{"latitude":-582856140,"longitude":-1629641450},"name":""},{"location":{"latitude":-473967125,"longitude":-1652968152},"name":""},{"location":{"latitude":-174439271,"longitude":1422960643},"name":"Strathmore QLD 4871, Australia"},{"location":{"latitude":253782635,"longitude":1030164726},"name":"011 Xiang Dao, Songming Xian, Kunming Shi, Yunnan Sheng, China"},{"location":{"latitude":-621365989,"longitude":-1115532139},"name":""},{"location":{"latitude":862664618,"longitude":1416457351},"name":""},{"location":{"latitude":-383388727,"longitude":-785952718},"name":""},{"location":{"latitude":125664168,"longitude":-291998446},"name":""},{"location":{"latitude":656343840,"longitude":439439764},"name":""},{"location":{"latitude":-655738461,"longitude":-544212722},"name":""},{"location":{"latitude":623251752,"longitude":1488435750},"name":""},{"location":{"latitude":436237502,"longitude":-626387911},"name":""},{"location":{"latitude":515395937,"longitude":-16624701},"name":"Hatchet Hill, Swindon, Swindon SN4 0DP, UK"},{"location":{"latitude":755285640,"longitude":572210361},"name":""},{"location":{"latitude":-52275136,"longitude":-644800186},"name":"Coari - AM, 69460-000, Brazil"},{"location":{"latitude":-402181536,"longitude":1006662754},"name":""},{"location":{"latitude":138914296,"longitude":368173660},"name":""},{"location":{"latitude":-645551826,"longitude":-519728595},"name":""},{"location":{"latitude":548423365,"longitude":-981205907},"name":""},{"location":{"latitude":749998314,"longitude":195688905},"name":""},{"location":{"latitude":861483051,"longitude":990210887},"name":""},{"location":{"latitude":286877612,"longitude":-1112752249},"name":""},{"location":{"latitude":633715864,"longitude":1766634742},"name":""},{"location":{"latitude":625250411,"longitude":-1430210949},"name":""},{"location":{"latitude":146536486,"longitude":-1562487612},"name":""},{"location":{"latitude":-846541096,"longitude":-860062860},"name":""},{"location":{"latitude":-243481285,"longitude":515382553},"name":""},{"location":{"latitude":-851258156,"longitude":373511818},"name":""},{"location":{"latitude":-366270851,"longitude":-52214308},"name":""},{"location":{"latitude":-842736612,"longitude":277021516},"name":""},{"location":{"latitude":753713504,"longitude":490552554},"name":""},{"location":{"latitude":-211675256,"longitude":-1172151400},"name":""}] diff --git a/src/node/examples/route_guide_server.js b/src/node/examples/route_guide_server.js index b21190d62e4..a3fb079215d 100644 --- a/src/node/examples/route_guide_server.js +++ b/src/node/examples/route_guide_server.js @@ -27,6 +27,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +var fs = require('fs'); var _ = require('underscore'); var grpc = require('..'); var examples = grpc.load(__dirname + '/route_guide.proto').examples; @@ -47,21 +48,6 @@ var COORD_FACTOR = 1e7; */ var feature_list = []; -/** - * Return a random "word" (alphabetic character sequence) of the given length. - * @param {number} length The length of the word to create - * @return {string} An alphabetic string with the given length. - */ -function randomWord(length) { - var alphabet = 'abcdefghijklmnopqrstuvwxyz'; - var word = ''; - for (var i = 0; i < length; i++) { - // Add a random character from the alphabet to the word - word += alphabet[_.random(0, alphabet.length - 1)]; - } - return word; -} - /** * Get a feature object at the given point, or creates one if it does not exist. * @param {point} point The point to check @@ -78,19 +64,11 @@ function checkFeature(point) { return feature; } } - // If not, create a new one with 50% chance of indicating "no feature present" - var name; - if (_.random(0,1) === 0) { - name = ''; - } else { - name = randomWord(5); - } + var name = ''; feature = { name: name, location: point }; - // Add the feature object to the list and return it - feature_list.push(feature); return feature; } @@ -253,7 +231,11 @@ if (require.main === module) { // If this is run as a script, start a server on an unused port var routeServer = getServer(); routeServer.bind('0.0.0.0:0'); - routeServer.listen(); + fs.readFile(__dirname + '/route_guide_db.json', function(err, data) { + if (err) throw err; + feature_list = JSON.parse(data); + routeServer.listen(); + }); } exports.getServer = getServer; From 33e09898a54987eee289b466f50062445f789f1f Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 19 Feb 2015 16:06:50 -0800 Subject: [PATCH 4/8] Switched to a smaller area of features --- src/node/examples/route_guide_db.json | 2 +- src/node/examples/route_guide_server.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/node/examples/route_guide_db.json b/src/node/examples/route_guide_db.json index 57f749382a4..75c38c6c77d 100644 --- a/src/node/examples/route_guide_db.json +++ b/src/node/examples/route_guide_db.json @@ -1 +1 @@ -[{"location":{"latitude":-898084041,"longitude":-956335530},"name":"Antarctica"},{"location":{"latitude":-146631624,"longitude":-958383511},"name":""},{"location":{"latitude":804112575,"longitude":-442594532},"name":"Greenland"},{"location":{"latitude":-49416972,"longitude":-350954955},"name":"Brazil"},{"location":{"latitude":89468665,"longitude":242327820},"name":"Buram, Sudan"},{"location":{"latitude":-649624710,"longitude":746289111},"name":""},{"location":{"latitude":-505487958,"longitude":-838328104},"name":""},{"location":{"latitude":848121953,"longitude":-298247781},"name":""},{"location":{"latitude":524094837,"longitude":-795584572},"name":"Baffin Region, NU, Canada"},{"location":{"latitude":56485291,"longitude":-187715698},"name":""},{"location":{"latitude":-470089856,"longitude":1789140056},"name":""},{"location":{"latitude":-577486081,"longitude":-1733155598},"name":""},{"location":{"latitude":577741664,"longitude":-873781618},"name":"Keewatin Region, NU, Canada"},{"location":{"latitude":306507262,"longitude":219338963},"name":"Al Wahat, Libya"},{"location":{"latitude":-446911497,"longitude":1679295563},"name":"154 Milford Sound Highway, Fiordland National Park 9679, New Zealand"},{"location":{"latitude":733881426,"longitude":737563031},"name":"Russia, 629705"},{"location":{"latitude":-688087271,"longitude":-262799641},"name":""},{"location":{"latitude":-99379946,"longitude":1774186549},"name":""},{"location":{"latitude":-65992383,"longitude":1099806539},"name":"Indonesia"},{"location":{"latitude":220938950,"longitude":968560584},"name":"41, Republic of the Union of Myanmar"},{"location":{"latitude":-594140442,"longitude":1504883782},"name":""},{"location":{"latitude":-707179151,"longitude":-896729854},"name":""},{"location":{"latitude":-787916310,"longitude":-889044879},"name":""},{"location":{"latitude":-119497900,"longitude":1114024289},"name":""},{"location":{"latitude":-648254087,"longitude":362768502},"name":""},{"location":{"latitude":-402418031,"longitude":117993618},"name":""},{"location":{"latitude":130550282,"longitude":-1032012014},"name":""},{"location":{"latitude":734388781,"longitude":-452362128},"name":""},{"location":{"latitude":-533182420,"longitude":1155727285},"name":""},{"location":{"latitude":741870560,"longitude":585594215},"name":""},{"location":{"latitude":-722890458,"longitude":-812696271},"name":""},{"location":{"latitude":-589756031,"longitude":-640124308},"name":""},{"location":{"latitude":190966959,"longitude":1496287526},"name":""},{"location":{"latitude":-836654415,"longitude":-1662752612},"name":""},{"location":{"latitude":-731583802,"longitude":-574895638},"name":""},{"location":{"latitude":-666407402,"longitude":-1535334105},"name":""},{"location":{"latitude":-790147961,"longitude":-1328725946},"name":""},{"location":{"latitude":858845788,"longitude":-864446073},"name":""},{"location":{"latitude":477627565,"longitude":336161401},"name":""},{"location":{"latitude":878499845,"longitude":-1366230271},"name":""},{"location":{"latitude":161644757,"longitude":1232275165},"name":""},{"location":{"latitude":654854594,"longitude":567182834},"name":""},{"location":{"latitude":572943963,"longitude":1261462818},"name":""},{"location":{"latitude":-679708566,"longitude":244550718},"name":""},{"location":{"latitude":-381192803,"longitude":1745293826},"name":""},{"location":{"latitude":137171282,"longitude":293455452},"name":""},{"location":{"latitude":667714793,"longitude":-26493598},"name":""},{"location":{"latitude":201258356,"longitude":1083312913},"name":""},{"location":{"latitude":-687799996,"longitude":-966880051},"name":""},{"location":{"latitude":-437056011,"longitude":1700457053},"name":""},{"location":{"latitude":-187508133,"longitude":511728352},"name":""},{"location":{"latitude":-512677292,"longitude":-911360176},"name":""},{"location":{"latitude":-208144386,"longitude":449727920},"name":""},{"location":{"latitude":-269716310,"longitude":-1370371395},"name":""},{"location":{"latitude":796592091,"longitude":-122849658},"name":""},{"location":{"latitude":134492646,"longitude":-894681833},"name":""},{"location":{"latitude":894694483,"longitude":-1229015411},"name":""},{"location":{"latitude":567905024,"longitude":-332346260},"name":""},{"location":{"latitude":838345452,"longitude":745395722},"name":""},{"location":{"latitude":108813570,"longitude":1517086626},"name":""},{"location":{"latitude":-273284408,"longitude":1637597498},"name":""},{"location":{"latitude":-221336059,"longitude":-3716325},"name":""},{"location":{"latitude":231027483,"longitude":1469916710},"name":""},{"location":{"latitude":223499746,"longitude":-805682376},"name":"Diego García, Rodas, Cuba"},{"location":{"latitude":-257443435,"longitude":1566640501},"name":""},{"location":{"latitude":402291696,"longitude":-1298402965},"name":""},{"location":{"latitude":-398778441,"longitude":552807095},"name":""},{"location":{"latitude":152404713,"longitude":-1465239382},"name":""},{"location":{"latitude":-582856140,"longitude":-1629641450},"name":""},{"location":{"latitude":-473967125,"longitude":-1652968152},"name":""},{"location":{"latitude":-174439271,"longitude":1422960643},"name":"Strathmore QLD 4871, Australia"},{"location":{"latitude":253782635,"longitude":1030164726},"name":"011 Xiang Dao, Songming Xian, Kunming Shi, Yunnan Sheng, China"},{"location":{"latitude":-621365989,"longitude":-1115532139},"name":""},{"location":{"latitude":862664618,"longitude":1416457351},"name":""},{"location":{"latitude":-383388727,"longitude":-785952718},"name":""},{"location":{"latitude":125664168,"longitude":-291998446},"name":""},{"location":{"latitude":656343840,"longitude":439439764},"name":""},{"location":{"latitude":-655738461,"longitude":-544212722},"name":""},{"location":{"latitude":623251752,"longitude":1488435750},"name":""},{"location":{"latitude":436237502,"longitude":-626387911},"name":""},{"location":{"latitude":515395937,"longitude":-16624701},"name":"Hatchet Hill, Swindon, Swindon SN4 0DP, UK"},{"location":{"latitude":755285640,"longitude":572210361},"name":""},{"location":{"latitude":-52275136,"longitude":-644800186},"name":"Coari - AM, 69460-000, Brazil"},{"location":{"latitude":-402181536,"longitude":1006662754},"name":""},{"location":{"latitude":138914296,"longitude":368173660},"name":""},{"location":{"latitude":-645551826,"longitude":-519728595},"name":""},{"location":{"latitude":548423365,"longitude":-981205907},"name":""},{"location":{"latitude":749998314,"longitude":195688905},"name":""},{"location":{"latitude":861483051,"longitude":990210887},"name":""},{"location":{"latitude":286877612,"longitude":-1112752249},"name":""},{"location":{"latitude":633715864,"longitude":1766634742},"name":""},{"location":{"latitude":625250411,"longitude":-1430210949},"name":""},{"location":{"latitude":146536486,"longitude":-1562487612},"name":""},{"location":{"latitude":-846541096,"longitude":-860062860},"name":""},{"location":{"latitude":-243481285,"longitude":515382553},"name":""},{"location":{"latitude":-851258156,"longitude":373511818},"name":""},{"location":{"latitude":-366270851,"longitude":-52214308},"name":""},{"location":{"latitude":-842736612,"longitude":277021516},"name":""},{"location":{"latitude":753713504,"longitude":490552554},"name":""},{"location":{"latitude":-211675256,"longitude":-1172151400},"name":""}] +[{"location":{"latitude":407838351,"longitude":-746143763},"name":"Patriots Path, Mendham, NJ 07945, USA"},{"location":{"latitude":408122808,"longitude":-743999179},"name":"101 New Jersey 10, Whippany, NJ 07981, USA"},{"location":{"latitude":413628156,"longitude":-749015468},"name":"U.S. 6, Shohola, PA 18458, USA"},{"location":{"latitude":419999544,"longitude":-740371136},"name":"5 Conners Road, Kingston, NY 12401, USA"},{"location":{"latitude":414008389,"longitude":-743951297},"name":"Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"},{"location":{"latitude":419611318,"longitude":-746524769},"name":"287 Flugertown Road, Livingston Manor, NY 12758, USA"},{"location":{"latitude":406109563,"longitude":-742186778},"name":"4001 Tremley Point Road, Linden, NJ 07036, USA"},{"location":{"latitude":416802456,"longitude":-742370183},"name":"352 South Mountain Road, Wallkill, NY 12589, USA"},{"location":{"latitude":412950425,"longitude":-741077389},"name":"Bailey Turn Road, Harriman, NY 10926, USA"},{"location":{"latitude":412144655,"longitude":-743949739},"name":"193-199 Wawayanda Road, Hewitt, NJ 07421, USA"},{"location":{"latitude":415736605,"longitude":-742847522},"name":"406-496 Ward Avenue, Pine Bush, NY 12566, USA"},{"location":{"latitude":413843930,"longitude":-740501726},"name":"162 Merrill Road, Highland Mills, NY 10930, USA"},{"location":{"latitude":410873075,"longitude":-744459023},"name":"Clinton Road, West Milford, NJ 07480, USA"},{"location":{"latitude":412346009,"longitude":-744026814},"name":"16 Old Brook Lane, Warwick, NY 10990, USA"},{"location":{"latitude":402948455,"longitude":-747903913},"name":"3 Drake Lane, Pennington, NJ 08534, USA"},{"location":{"latitude":406337092,"longitude":-740122226},"name":"6324 8th Avenue, Brooklyn, NY 11220, USA"},{"location":{"latitude":406421967,"longitude":-747727624},"name":"1 Merck Access Road, Whitehouse Station, NJ 08889, USA"},{"location":{"latitude":416318082,"longitude":-749677716},"name":"78-98 Schalck Road, Narrowsburg, NY 12764, USA"},{"location":{"latitude":415301720,"longitude":-748416257},"name":"282 Lakeview Drive Road, Highland Lake, NY 12743, USA"},{"location":{"latitude":402647019,"longitude":-747071791},"name":"330 Evelyn Avenue, Hamilton Township, NJ 08619, USA"},{"location":{"latitude":412567807,"longitude":-741058078},"name":"New York State Reference Route 987E, Southfields, NY 10975, USA"},{"location":{"latitude":416855156,"longitude":-744420597},"name":"103-271 Tempaloni Road, Ellenville, NY 12428, USA"},{"location":{"latitude":404663628,"longitude":-744820157},"name":"1300 Airport Road, North Brunswick Township, NJ 08902, USA"},{"location":{"latitude":407113723,"longitude":-749746483},"name":""},{"location":{"latitude":402133926,"longitude":-743613249},"name":""},{"location":{"latitude":400273442,"longitude":-741220915},"name":""},{"location":{"latitude":411236786,"longitude":-744070769},"name":""},{"location":{"latitude":411633782,"longitude":-746784970},"name":"211-225 Plains Road, Augusta, NJ 07822, USA"},{"location":{"latitude":415830701,"longitude":-742952812},"name":""},{"location":{"latitude":413447164,"longitude":-748712898},"name":"165 Pedersen Ridge Road, Milford, PA 18337, USA"},{"location":{"latitude":405047245,"longitude":-749800722},"name":"100-122 Locktown Road, Frenchtown, NJ 08825, USA"},{"location":{"latitude":418858923,"longitude":-746156790},"name":""},{"location":{"latitude":417951888,"longitude":-748484944},"name":"650-652 Willi Hill Road, Swan Lake, NY 12783, USA"},{"location":{"latitude":407033786,"longitude":-743977337},"name":"26 East 3rd Street, New Providence, NJ 07974, USA"},{"location":{"latitude":417548014,"longitude":-740075041},"name":""},{"location":{"latitude":410395868,"longitude":-744972325},"name":""},{"location":{"latitude":404615353,"longitude":-745129803},"name":""},{"location":{"latitude":406589790,"longitude":-743560121},"name":"611 Lawrence Avenue, Westfield, NJ 07090, USA"},{"location":{"latitude":414653148,"longitude":-740477477},"name":"18 Lannis Avenue, New Windsor, NY 12553, USA"},{"location":{"latitude":405957808,"longitude":-743255336},"name":"82-104 Amherst Avenue, Colonia, NJ 07067, USA"},{"location":{"latitude":411733589,"longitude":-741648093},"name":"170 Seven Lakes Drive, Sloatsburg, NY 10974, USA"},{"location":{"latitude":412676291,"longitude":-742606606},"name":"1270 Lakes Road, Monroe, NY 10950, USA"},{"location":{"latitude":409224445,"longitude":-748286738},"name":"509-535 Alphano Road, Great Meadows, NJ 07838, USA"},{"location":{"latitude":406523420,"longitude":-742135517},"name":"652 Garden Street, Elizabeth, NJ 07202, USA"},{"location":{"latitude":401827388,"longitude":-740294537},"name":"349 Sea Spray Court, Neptune City, NJ 07753, USA"},{"location":{"latitude":410564152,"longitude":-743685054},"name":"13-17 Stanley Street, West Milford, NJ 07480, USA"},{"location":{"latitude":408472324,"longitude":-740726046},"name":"47 Industrial Avenue, Teterboro, NJ 07608, USA"},{"location":{"latitude":412452168,"longitude":-740214052},"name":"5 White Oak Lane, Stony Point, NY 10980, USA"},{"location":{"latitude":409146138,"longitude":-746188906},"name":"Berkshire Valley Management Area Trail, Jefferson, NJ, USA"},{"location":{"latitude":404701380,"longitude":-744781745},"name":"1007 Jersey Avenue, New Brunswick, NJ 08901, USA"},{"location":{"latitude":409642566,"longitude":-746017679},"name":"6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA"},{"location":{"latitude":408031728,"longitude":-748645385},"name":"1358-1474 New Jersey 57, Port Murray, NJ 07865, USA"},{"location":{"latitude":413700272,"longitude":-742135189},"name":"367 Prospect Road, Chester, NY 10918, USA"},{"location":{"latitude":404310607,"longitude":-740282632},"name":"10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA"},{"location":{"latitude":409319800,"longitude":-746201391},"name":"11 Ward Street, Mount Arlington, NJ 07856, USA"},{"location":{"latitude":406685311,"longitude":-742108603},"name":"300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA"},{"location":{"latitude":419018117,"longitude":-749142781},"name":"43 Dreher Road, Roscoe, NY 12776, USA"},{"location":{"latitude":412856162,"longitude":-745148837},"name":"Swan Street, Pine Island, NY 10969, USA"},{"location":{"latitude":416560744,"longitude":-746721964},"name":"66 Pleasantview Avenue, Monticello, NY 12701, USA"},{"location":{"latitude":405314270,"longitude":-749836354},"name":""},{"location":{"latitude":414219548,"longitude":-743327440},"name":""},{"location":{"latitude":415534177,"longitude":-742900616},"name":"565 Winding Hills Road, Montgomery, NY 12549, USA"},{"location":{"latitude":406898530,"longitude":-749127080},"name":"231 Rocky Run Road, Glen Gardner, NJ 08826, USA"},{"location":{"latitude":407586880,"longitude":-741670168},"name":"100 Mount Pleasant Avenue, Newark, NJ 07104, USA"},{"location":{"latitude":400106455,"longitude":-742870190},"name":"517-521 Huntington Drive, Manchester Township, NJ 08759, USA"},{"location":{"latitude":400066188,"longitude":-746793294},"name":""},{"location":{"latitude":418803880,"longitude":-744102673},"name":"40 Mountain Road, Napanoch, NY 12458, USA"},{"location":{"latitude":414204288,"longitude":-747895140},"name":""},{"location":{"latitude":414777405,"longitude":-740615601},"name":""},{"location":{"latitude":415464475,"longitude":-747175374},"name":"48 North Road, Forestburgh, NY 12777, USA"},{"location":{"latitude":404062378,"longitude":-746376177},"name":""},{"location":{"latitude":405688272,"longitude":-749285130},"name":""},{"location":{"latitude":400342070,"longitude":-748788996},"name":""},{"location":{"latitude":401809022,"longitude":-744157964},"name":""},{"location":{"latitude":404226644,"longitude":-740517141},"name":"9 Thompson Avenue, Leonardo, NJ 07737, USA"},{"location":{"latitude":410322033,"longitude":-747871659},"name":""},{"location":{"latitude":407100674,"longitude":-747742727},"name":""},{"location":{"latitude":418811433,"longitude":-741718005},"name":"213 Bush Road, Stone Ridge, NY 12484, USA"},{"location":{"latitude":415034302,"longitude":-743850945},"name":""},{"location":{"latitude":411349992,"longitude":-743694161},"name":""},{"location":{"latitude":404839914,"longitude":-744759616},"name":"1-17 Bergen Court, New Brunswick, NJ 08901, USA"},{"location":{"latitude":414638017,"longitude":-745957854},"name":"35 Oakland Valley Road, Cuddebackville, NY 12729, USA"},{"location":{"latitude":412127800,"longitude":-740173578},"name":""},{"location":{"latitude":401263460,"longitude":-747964303},"name":""},{"location":{"latitude":412843391,"longitude":-749086026},"name":""},{"location":{"latitude":418512773,"longitude":-743067823},"name":""},{"location":{"latitude":404318328,"longitude":-740835638},"name":"42-102 Main Street, Belford, NJ 07718, USA"},{"location":{"latitude":419020746,"longitude":-741172328},"name":""},{"location":{"latitude":404080723,"longitude":-746119569},"name":""},{"location":{"latitude":401012643,"longitude":-744035134},"name":""},{"location":{"latitude":404306372,"longitude":-741079661},"name":""},{"location":{"latitude":403966326,"longitude":-748519297},"name":""},{"location":{"latitude":405002031,"longitude":-748407866},"name":""},{"location":{"latitude":409532885,"longitude":-742200683},"name":""},{"location":{"latitude":416851321,"longitude":-742674555},"name":""},{"location":{"latitude":406411633,"longitude":-741722051},"name":"3387 Richmond Terrace, Staten Island, NY 10303, USA"},{"location":{"latitude":413069058,"longitude":-744597778},"name":"261 Van Sickle Road, Goshen, NY 10924, USA"},{"location":{"latitude":418465462,"longitude":-746859398},"name":""},{"location":{"latitude":411733222,"longitude":-744228360},"name":""},{"location":{"latitude":410248224,"longitude":-747127767},"name":"3 Hasta Way, Newton, NJ 07860, USA"}] diff --git a/src/node/examples/route_guide_server.js b/src/node/examples/route_guide_server.js index a3fb079215d..5b7eda7c069 100644 --- a/src/node/examples/route_guide_server.js +++ b/src/node/examples/route_guide_server.js @@ -39,8 +39,8 @@ var COORD_FACTOR = 1e7; /** * For simplicity, a point is a record type that looks like * {latitude: number, longitude: number}, and a feature is a record type that - * looks like {name: string, location: point}. feature objects with name==='' are - * points with no feature. + * looks like {name: string, location: point}. feature objects with name==='' + * are points with no feature. */ /** From d7e8765aaa1cd0aaacff401e5003ed91a1f5b9ee Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 19 Feb 2015 18:19:10 -0800 Subject: [PATCH 5/8] Added client and fixed some server bugs --- src/node/examples/route_guide_client.js | 190 ++++++++++++++++++++++++ src/node/examples/route_guide_server.js | 27 ++-- src/node/package.json | 5 +- 3 files changed, 208 insertions(+), 14 deletions(-) create mode 100644 src/node/examples/route_guide_client.js diff --git a/src/node/examples/route_guide_client.js b/src/node/examples/route_guide_client.js new file mode 100644 index 00000000000..549c9b78069 --- /dev/null +++ b/src/node/examples/route_guide_client.js @@ -0,0 +1,190 @@ +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +var async = require('async'); +var fs = require('fs'); +var _ = require('underscore'); +var grpc = require('..'); +var examples = grpc.load(__dirname + '/route_guide.proto').examples; +var client = new examples.RouteGuide('localhost:50051'); + +var COORD_FACTOR = 1e7; + +function runGetFeature(callback) { + var next = _.after(2, callback); + function featureCallback(error, feature) { + if (error) { + callback(error); + } + if (feature.name === '') { + console.log('Found no feature at ' + + feature.location.latitude/COORD_FACTOR + ', ' + + feature.location.longitude/COORD_FACTOR); + } else { + console.log('Found feature called "' + feature.name + '" at ' + + feature.location.latitude/COORD_FACTOR + ', ' + + feature.location.longitude/COORD_FACTOR); + } + next(); + } + var point1 = { + latitude: 409146138, + longitude: -746188906 + }; + var point2 = { + latitude: 0, + longitude: 0 + }; + client.getFeature(point1, featureCallback); + client.getFeature(point2, featureCallback); +} + +function runListFeatures(callback) { + var rectangle = { + lo: { + latitude: 400000000, + longitude: -750000000 + }, + hi: { + latitude: 420000000, + longitude: -730000000 + } + }; + console.log('Looking for features between 40, -75 and 42, -73'); + var call = client.listFeatures(rectangle); + call.on('data', function(feature) { + console.log('Found feature called "' + feature.name + '" at ' + + feature.location.latitude/COORD_FACTOR + ', ' + + feature.location.longitude/COORD_FACTOR); + }); + call.on('end', callback); +} + +function runRecordRoute(callback) { + fs.readFile(__dirname + '/route_guide_db.json', function(err, data) { + if (err) callback(err); + var feature_list = JSON.parse(data); + + var num_points = 10; + var call = client.recordRoute(function(error, stats) { + if (error) { + callback(error); + } + console.log('Finished trip with', stats.point_count, 'points'); + console.log('Passed', stats.feature_count, 'features'); + console.log('Travelled', stats.distance, 'meters'); + console.log('It took', stats.elapsed_time, 'seconds'); + callback(); + }); + function pointSender(lat, lng) { + return function(callback) { + console.log('Visiting point ' + lat/COORD_FACTOR + ', ' + + lng/COORD_FACTOR); + call.write({ + latitude: lat, + longitude: lng + }); + _.delay(callback, _.random(500, 1500)); + }; + } + var point_senders = []; + for (var i = 0; i < num_points; i++) { + var rand_point = feature_list[_.random(0, feature_list.length - 1)]; + point_senders[i] = pointSender(rand_point.location.latitude, + rand_point.location.longitude); + } + async.series(point_senders, function() { + call.end(); + }); + }); +} + +function runRouteChat(callback) { + var call = client.routeChat(); + call.on('data', function(note) { + console.log('Got message "' + note.message + '" at ' + + note.location.latitude + ', ' + note.location.longitude); + }); + + call.on('end', callback); + + var notes = [{ + location: { + latitude: 0, + longitude: 0 + }, + message: 'First message' + }, { + location: { + latitude: 0, + longitude: 1 + }, + message: 'Second message' + }, { + location: { + latitude: 1, + longitude: 0 + }, + message: 'Third message' + }, { + location: { + latitude: 0, + longitude: 0 + }, + message: 'Fourth message' + }]; + for (var i = 0; i < notes.length; i++) { + var note = notes[i]; + console.log('Sending message "' + note.message + '" at ' + + note.location.latitude + ', ' + note.location.longitude); + call.write(note); + } + call.end(); +} + +function main() { + async.series([ + runGetFeature, + runListFeatures, + runRecordRoute, + runRouteChat + ]); +} + +if (require.main === module) { + main(); +} + +exports.runGetFeature = runGetFeature; + +exports.runListFeatures = runListFeatures; + +exports.runRecordRoute = runRecordRoute; + +exports.runRouteChat = runRouteChat; diff --git a/src/node/examples/route_guide_server.js b/src/node/examples/route_guide_server.js index 5b7eda7c069..89d8d27cfba 100644 --- a/src/node/examples/route_guide_server.js +++ b/src/node/examples/route_guide_server.js @@ -59,8 +59,8 @@ function checkFeature(point) { // Check if there is already a feature object for the given point for (var i = 0; i < feature_list.length; i++) { feature = feature_list[i]; - if (feature.point.latitude === point.latitude && - feature.point.longitude === point.longitude) { + if (feature.location.latitude === point.latitude && + feature.location.longitude === point.longitude) { return feature; } } @@ -91,10 +91,10 @@ function getFeature(call, callback) { function listFeatures(call) { var lo = call.request.lo; var hi = call.request.hi; - var left = _.min(lo.longitude, hi.longitude); - var right = _.max(lo.longitude, hi.longitude); - var top = _.max(lo.latitude, hi.latitude); - var bottom = _.max(lo.latitude, hi.latitude); + var left = _.min([lo.longitude, hi.longitude]); + var right = _.max([lo.longitude, hi.longitude]); + var top = _.max([lo.latitude, hi.latitude]); + var bottom = _.min([lo.latitude, hi.latitude]); // For each feature, check if it is in the given bounding box _.each(feature_list, function(feature) { if (feature.name === '') { @@ -118,15 +118,18 @@ function listFeatures(call) { * @return The distance between the points in meters */ function getDistance(start, end) { + function toRadians(num) { + return num * Math.PI / 180; + } var lat1 = start.latitude / COORD_FACTOR; var lat2 = end.latitude / COORD_FACTOR; var lon1 = start.longitude / COORD_FACTOR; var lon2 = end.longitude / COORD_FACTOR; var R = 6371000; // metres - var φ1 = lat1.toRadians(); - var φ2 = lat2.toRadians(); - var Δφ = (lat2-lat1).toRadians(); - var Δλ = (lon2-lon1).toRadians(); + var φ1 = toRadians(lat1); + var φ2 = toRadians(lat2); + var Δφ = toRadians(lat2-lat1); + var Δλ = toRadians(lon2-lon1); var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) + Math.cos(φ1) * Math.cos(φ2) * @@ -204,7 +207,7 @@ function routeChat(call) { route_notes[key] = []; } // Then add the new note to the list - route_notes[key].push(note); + route_notes[key].push(JSON.parse(JSON.stringify(note))); }); call.on('end', function() { call.end(); @@ -230,7 +233,7 @@ function getServer() { if (require.main === module) { // If this is run as a script, start a server on an unused port var routeServer = getServer(); - routeServer.bind('0.0.0.0:0'); + routeServer.bind('0.0.0.0:50051'); fs.readFile(__dirname + '/route_guide_db.json', function(err, data) { if (err) throw err; feature_list = JSON.parse(data); diff --git a/src/node/package.json b/src/node/package.json index bbd89be77d7..898281a915a 100644 --- a/src/node/package.json +++ b/src/node/package.json @@ -15,9 +15,10 @@ "underscore.string": "^3.0.0" }, "devDependencies": { - "mocha": "~1.21.0", + "async": "^0.9.0", + "googleauth": "google/google-auth-library-nodejs", "minimist": "^1.1.0", - "googleauth": "google/google-auth-library-nodejs" + "mocha": "~1.21.0" }, "files": [ "README.md", From 410ddaa421e550772630c05b21bc7b2c694be1bd Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 20 Feb 2015 10:44:37 -0800 Subject: [PATCH 6/8] Formatted db file --- src/node/examples/route_guide_db.json | 602 +++++++++++++++++++++++++- 1 file changed, 601 insertions(+), 1 deletion(-) diff --git a/src/node/examples/route_guide_db.json b/src/node/examples/route_guide_db.json index 75c38c6c77d..9d6a980ab7d 100644 --- a/src/node/examples/route_guide_db.json +++ b/src/node/examples/route_guide_db.json @@ -1 +1,601 @@ -[{"location":{"latitude":407838351,"longitude":-746143763},"name":"Patriots Path, Mendham, NJ 07945, USA"},{"location":{"latitude":408122808,"longitude":-743999179},"name":"101 New Jersey 10, Whippany, NJ 07981, USA"},{"location":{"latitude":413628156,"longitude":-749015468},"name":"U.S. 6, Shohola, PA 18458, USA"},{"location":{"latitude":419999544,"longitude":-740371136},"name":"5 Conners Road, Kingston, NY 12401, USA"},{"location":{"latitude":414008389,"longitude":-743951297},"name":"Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"},{"location":{"latitude":419611318,"longitude":-746524769},"name":"287 Flugertown Road, Livingston Manor, NY 12758, USA"},{"location":{"latitude":406109563,"longitude":-742186778},"name":"4001 Tremley Point Road, Linden, NJ 07036, USA"},{"location":{"latitude":416802456,"longitude":-742370183},"name":"352 South Mountain Road, Wallkill, NY 12589, USA"},{"location":{"latitude":412950425,"longitude":-741077389},"name":"Bailey Turn Road, Harriman, NY 10926, USA"},{"location":{"latitude":412144655,"longitude":-743949739},"name":"193-199 Wawayanda Road, Hewitt, NJ 07421, USA"},{"location":{"latitude":415736605,"longitude":-742847522},"name":"406-496 Ward Avenue, Pine Bush, NY 12566, USA"},{"location":{"latitude":413843930,"longitude":-740501726},"name":"162 Merrill Road, Highland Mills, NY 10930, USA"},{"location":{"latitude":410873075,"longitude":-744459023},"name":"Clinton Road, West Milford, NJ 07480, USA"},{"location":{"latitude":412346009,"longitude":-744026814},"name":"16 Old Brook Lane, Warwick, NY 10990, USA"},{"location":{"latitude":402948455,"longitude":-747903913},"name":"3 Drake Lane, Pennington, NJ 08534, USA"},{"location":{"latitude":406337092,"longitude":-740122226},"name":"6324 8th Avenue, Brooklyn, NY 11220, USA"},{"location":{"latitude":406421967,"longitude":-747727624},"name":"1 Merck Access Road, Whitehouse Station, NJ 08889, USA"},{"location":{"latitude":416318082,"longitude":-749677716},"name":"78-98 Schalck Road, Narrowsburg, NY 12764, USA"},{"location":{"latitude":415301720,"longitude":-748416257},"name":"282 Lakeview Drive Road, Highland Lake, NY 12743, USA"},{"location":{"latitude":402647019,"longitude":-747071791},"name":"330 Evelyn Avenue, Hamilton Township, NJ 08619, USA"},{"location":{"latitude":412567807,"longitude":-741058078},"name":"New York State Reference Route 987E, Southfields, NY 10975, USA"},{"location":{"latitude":416855156,"longitude":-744420597},"name":"103-271 Tempaloni Road, Ellenville, NY 12428, USA"},{"location":{"latitude":404663628,"longitude":-744820157},"name":"1300 Airport Road, North Brunswick Township, NJ 08902, USA"},{"location":{"latitude":407113723,"longitude":-749746483},"name":""},{"location":{"latitude":402133926,"longitude":-743613249},"name":""},{"location":{"latitude":400273442,"longitude":-741220915},"name":""},{"location":{"latitude":411236786,"longitude":-744070769},"name":""},{"location":{"latitude":411633782,"longitude":-746784970},"name":"211-225 Plains Road, Augusta, NJ 07822, USA"},{"location":{"latitude":415830701,"longitude":-742952812},"name":""},{"location":{"latitude":413447164,"longitude":-748712898},"name":"165 Pedersen Ridge Road, Milford, PA 18337, USA"},{"location":{"latitude":405047245,"longitude":-749800722},"name":"100-122 Locktown Road, Frenchtown, NJ 08825, USA"},{"location":{"latitude":418858923,"longitude":-746156790},"name":""},{"location":{"latitude":417951888,"longitude":-748484944},"name":"650-652 Willi Hill Road, Swan Lake, NY 12783, USA"},{"location":{"latitude":407033786,"longitude":-743977337},"name":"26 East 3rd Street, New Providence, NJ 07974, USA"},{"location":{"latitude":417548014,"longitude":-740075041},"name":""},{"location":{"latitude":410395868,"longitude":-744972325},"name":""},{"location":{"latitude":404615353,"longitude":-745129803},"name":""},{"location":{"latitude":406589790,"longitude":-743560121},"name":"611 Lawrence Avenue, Westfield, NJ 07090, USA"},{"location":{"latitude":414653148,"longitude":-740477477},"name":"18 Lannis Avenue, New Windsor, NY 12553, USA"},{"location":{"latitude":405957808,"longitude":-743255336},"name":"82-104 Amherst Avenue, Colonia, NJ 07067, USA"},{"location":{"latitude":411733589,"longitude":-741648093},"name":"170 Seven Lakes Drive, Sloatsburg, NY 10974, USA"},{"location":{"latitude":412676291,"longitude":-742606606},"name":"1270 Lakes Road, Monroe, NY 10950, USA"},{"location":{"latitude":409224445,"longitude":-748286738},"name":"509-535 Alphano Road, Great Meadows, NJ 07838, USA"},{"location":{"latitude":406523420,"longitude":-742135517},"name":"652 Garden Street, Elizabeth, NJ 07202, USA"},{"location":{"latitude":401827388,"longitude":-740294537},"name":"349 Sea Spray Court, Neptune City, NJ 07753, USA"},{"location":{"latitude":410564152,"longitude":-743685054},"name":"13-17 Stanley Street, West Milford, NJ 07480, USA"},{"location":{"latitude":408472324,"longitude":-740726046},"name":"47 Industrial Avenue, Teterboro, NJ 07608, USA"},{"location":{"latitude":412452168,"longitude":-740214052},"name":"5 White Oak Lane, Stony Point, NY 10980, USA"},{"location":{"latitude":409146138,"longitude":-746188906},"name":"Berkshire Valley Management Area Trail, Jefferson, NJ, USA"},{"location":{"latitude":404701380,"longitude":-744781745},"name":"1007 Jersey Avenue, New Brunswick, NJ 08901, USA"},{"location":{"latitude":409642566,"longitude":-746017679},"name":"6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA"},{"location":{"latitude":408031728,"longitude":-748645385},"name":"1358-1474 New Jersey 57, Port Murray, NJ 07865, USA"},{"location":{"latitude":413700272,"longitude":-742135189},"name":"367 Prospect Road, Chester, NY 10918, USA"},{"location":{"latitude":404310607,"longitude":-740282632},"name":"10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA"},{"location":{"latitude":409319800,"longitude":-746201391},"name":"11 Ward Street, Mount Arlington, NJ 07856, USA"},{"location":{"latitude":406685311,"longitude":-742108603},"name":"300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA"},{"location":{"latitude":419018117,"longitude":-749142781},"name":"43 Dreher Road, Roscoe, NY 12776, USA"},{"location":{"latitude":412856162,"longitude":-745148837},"name":"Swan Street, Pine Island, NY 10969, USA"},{"location":{"latitude":416560744,"longitude":-746721964},"name":"66 Pleasantview Avenue, Monticello, NY 12701, USA"},{"location":{"latitude":405314270,"longitude":-749836354},"name":""},{"location":{"latitude":414219548,"longitude":-743327440},"name":""},{"location":{"latitude":415534177,"longitude":-742900616},"name":"565 Winding Hills Road, Montgomery, NY 12549, USA"},{"location":{"latitude":406898530,"longitude":-749127080},"name":"231 Rocky Run Road, Glen Gardner, NJ 08826, USA"},{"location":{"latitude":407586880,"longitude":-741670168},"name":"100 Mount Pleasant Avenue, Newark, NJ 07104, USA"},{"location":{"latitude":400106455,"longitude":-742870190},"name":"517-521 Huntington Drive, Manchester Township, NJ 08759, USA"},{"location":{"latitude":400066188,"longitude":-746793294},"name":""},{"location":{"latitude":418803880,"longitude":-744102673},"name":"40 Mountain Road, Napanoch, NY 12458, USA"},{"location":{"latitude":414204288,"longitude":-747895140},"name":""},{"location":{"latitude":414777405,"longitude":-740615601},"name":""},{"location":{"latitude":415464475,"longitude":-747175374},"name":"48 North Road, Forestburgh, NY 12777, USA"},{"location":{"latitude":404062378,"longitude":-746376177},"name":""},{"location":{"latitude":405688272,"longitude":-749285130},"name":""},{"location":{"latitude":400342070,"longitude":-748788996},"name":""},{"location":{"latitude":401809022,"longitude":-744157964},"name":""},{"location":{"latitude":404226644,"longitude":-740517141},"name":"9 Thompson Avenue, Leonardo, NJ 07737, USA"},{"location":{"latitude":410322033,"longitude":-747871659},"name":""},{"location":{"latitude":407100674,"longitude":-747742727},"name":""},{"location":{"latitude":418811433,"longitude":-741718005},"name":"213 Bush Road, Stone Ridge, NY 12484, USA"},{"location":{"latitude":415034302,"longitude":-743850945},"name":""},{"location":{"latitude":411349992,"longitude":-743694161},"name":""},{"location":{"latitude":404839914,"longitude":-744759616},"name":"1-17 Bergen Court, New Brunswick, NJ 08901, USA"},{"location":{"latitude":414638017,"longitude":-745957854},"name":"35 Oakland Valley Road, Cuddebackville, NY 12729, USA"},{"location":{"latitude":412127800,"longitude":-740173578},"name":""},{"location":{"latitude":401263460,"longitude":-747964303},"name":""},{"location":{"latitude":412843391,"longitude":-749086026},"name":""},{"location":{"latitude":418512773,"longitude":-743067823},"name":""},{"location":{"latitude":404318328,"longitude":-740835638},"name":"42-102 Main Street, Belford, NJ 07718, USA"},{"location":{"latitude":419020746,"longitude":-741172328},"name":""},{"location":{"latitude":404080723,"longitude":-746119569},"name":""},{"location":{"latitude":401012643,"longitude":-744035134},"name":""},{"location":{"latitude":404306372,"longitude":-741079661},"name":""},{"location":{"latitude":403966326,"longitude":-748519297},"name":""},{"location":{"latitude":405002031,"longitude":-748407866},"name":""},{"location":{"latitude":409532885,"longitude":-742200683},"name":""},{"location":{"latitude":416851321,"longitude":-742674555},"name":""},{"location":{"latitude":406411633,"longitude":-741722051},"name":"3387 Richmond Terrace, Staten Island, NY 10303, USA"},{"location":{"latitude":413069058,"longitude":-744597778},"name":"261 Van Sickle Road, Goshen, NY 10924, USA"},{"location":{"latitude":418465462,"longitude":-746859398},"name":""},{"location":{"latitude":411733222,"longitude":-744228360},"name":""},{"location":{"latitude":410248224,"longitude":-747127767},"name":"3 Hasta Way, Newton, NJ 07860, USA"}] +[{ + "location": { + "latitude": 407838351, + "longitude": -746143763 + }, + "name": "Patriots Path, Mendham, NJ 07945, USA" +}, { + "location": { + "latitude": 408122808, + "longitude": -743999179 + }, + "name": "101 New Jersey 10, Whippany, NJ 07981, USA" +}, { + "location": { + "latitude": 413628156, + "longitude": -749015468 + }, + "name": "U.S. 6, Shohola, PA 18458, USA" +}, { + "location": { + "latitude": 419999544, + "longitude": -740371136 + }, + "name": "5 Conners Road, Kingston, NY 12401, USA" +}, { + "location": { + "latitude": 414008389, + "longitude": -743951297 + }, + "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" +}, { + "location": { + "latitude": 419611318, + "longitude": -746524769 + }, + "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" +}, { + "location": { + "latitude": 406109563, + "longitude": -742186778 + }, + "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" +}, { + "location": { + "latitude": 416802456, + "longitude": -742370183 + }, + "name": "352 South Mountain Road, Wallkill, NY 12589, USA" +}, { + "location": { + "latitude": 412950425, + "longitude": -741077389 + }, + "name": "Bailey Turn Road, Harriman, NY 10926, USA" +}, { + "location": { + "latitude": 412144655, + "longitude": -743949739 + }, + "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" +}, { + "location": { + "latitude": 415736605, + "longitude": -742847522 + }, + "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" +}, { + "location": { + "latitude": 413843930, + "longitude": -740501726 + }, + "name": "162 Merrill Road, Highland Mills, NY 10930, USA" +}, { + "location": { + "latitude": 410873075, + "longitude": -744459023 + }, + "name": "Clinton Road, West Milford, NJ 07480, USA" +}, { + "location": { + "latitude": 412346009, + "longitude": -744026814 + }, + "name": "16 Old Brook Lane, Warwick, NY 10990, USA" +}, { + "location": { + "latitude": 402948455, + "longitude": -747903913 + }, + "name": "3 Drake Lane, Pennington, NJ 08534, USA" +}, { + "location": { + "latitude": 406337092, + "longitude": -740122226 + }, + "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" +}, { + "location": { + "latitude": 406421967, + "longitude": -747727624 + }, + "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" +}, { + "location": { + "latitude": 416318082, + "longitude": -749677716 + }, + "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" +}, { + "location": { + "latitude": 415301720, + "longitude": -748416257 + }, + "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" +}, { + "location": { + "latitude": 402647019, + "longitude": -747071791 + }, + "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" +}, { + "location": { + "latitude": 412567807, + "longitude": -741058078 + }, + "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" +}, { + "location": { + "latitude": 416855156, + "longitude": -744420597 + }, + "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" +}, { + "location": { + "latitude": 404663628, + "longitude": -744820157 + }, + "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" +}, { + "location": { + "latitude": 407113723, + "longitude": -749746483 + }, + "name": "" +}, { + "location": { + "latitude": 402133926, + "longitude": -743613249 + }, + "name": "" +}, { + "location": { + "latitude": 400273442, + "longitude": -741220915 + }, + "name": "" +}, { + "location": { + "latitude": 411236786, + "longitude": -744070769 + }, + "name": "" +}, { + "location": { + "latitude": 411633782, + "longitude": -746784970 + }, + "name": "211-225 Plains Road, Augusta, NJ 07822, USA" +}, { + "location": { + "latitude": 415830701, + "longitude": -742952812 + }, + "name": "" +}, { + "location": { + "latitude": 413447164, + "longitude": -748712898 + }, + "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" +}, { + "location": { + "latitude": 405047245, + "longitude": -749800722 + }, + "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" +}, { + "location": { + "latitude": 418858923, + "longitude": -746156790 + }, + "name": "" +}, { + "location": { + "latitude": 417951888, + "longitude": -748484944 + }, + "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" +}, { + "location": { + "latitude": 407033786, + "longitude": -743977337 + }, + "name": "26 East 3rd Street, New Providence, NJ 07974, USA" +}, { + "location": { + "latitude": 417548014, + "longitude": -740075041 + }, + "name": "" +}, { + "location": { + "latitude": 410395868, + "longitude": -744972325 + }, + "name": "" +}, { + "location": { + "latitude": 404615353, + "longitude": -745129803 + }, + "name": "" +}, { + "location": { + "latitude": 406589790, + "longitude": -743560121 + }, + "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" +}, { + "location": { + "latitude": 414653148, + "longitude": -740477477 + }, + "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" +}, { + "location": { + "latitude": 405957808, + "longitude": -743255336 + }, + "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" +}, { + "location": { + "latitude": 411733589, + "longitude": -741648093 + }, + "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" +}, { + "location": { + "latitude": 412676291, + "longitude": -742606606 + }, + "name": "1270 Lakes Road, Monroe, NY 10950, USA" +}, { + "location": { + "latitude": 409224445, + "longitude": -748286738 + }, + "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" +}, { + "location": { + "latitude": 406523420, + "longitude": -742135517 + }, + "name": "652 Garden Street, Elizabeth, NJ 07202, USA" +}, { + "location": { + "latitude": 401827388, + "longitude": -740294537 + }, + "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" +}, { + "location": { + "latitude": 410564152, + "longitude": -743685054 + }, + "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" +}, { + "location": { + "latitude": 408472324, + "longitude": -740726046 + }, + "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" +}, { + "location": { + "latitude": 412452168, + "longitude": -740214052 + }, + "name": "5 White Oak Lane, Stony Point, NY 10980, USA" +}, { + "location": { + "latitude": 409146138, + "longitude": -746188906 + }, + "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" +}, { + "location": { + "latitude": 404701380, + "longitude": -744781745 + }, + "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" +}, { + "location": { + "latitude": 409642566, + "longitude": -746017679 + }, + "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" +}, { + "location": { + "latitude": 408031728, + "longitude": -748645385 + }, + "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" +}, { + "location": { + "latitude": 413700272, + "longitude": -742135189 + }, + "name": "367 Prospect Road, Chester, NY 10918, USA" +}, { + "location": { + "latitude": 404310607, + "longitude": -740282632 + }, + "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" +}, { + "location": { + "latitude": 409319800, + "longitude": -746201391 + }, + "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" +}, { + "location": { + "latitude": 406685311, + "longitude": -742108603 + }, + "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" +}, { + "location": { + "latitude": 419018117, + "longitude": -749142781 + }, + "name": "43 Dreher Road, Roscoe, NY 12776, USA" +}, { + "location": { + "latitude": 412856162, + "longitude": -745148837 + }, + "name": "Swan Street, Pine Island, NY 10969, USA" +}, { + "location": { + "latitude": 416560744, + "longitude": -746721964 + }, + "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" +}, { + "location": { + "latitude": 405314270, + "longitude": -749836354 + }, + "name": "" +}, { + "location": { + "latitude": 414219548, + "longitude": -743327440 + }, + "name": "" +}, { + "location": { + "latitude": 415534177, + "longitude": -742900616 + }, + "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" +}, { + "location": { + "latitude": 406898530, + "longitude": -749127080 + }, + "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" +}, { + "location": { + "latitude": 407586880, + "longitude": -741670168 + }, + "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" +}, { + "location": { + "latitude": 400106455, + "longitude": -742870190 + }, + "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" +}, { + "location": { + "latitude": 400066188, + "longitude": -746793294 + }, + "name": "" +}, { + "location": { + "latitude": 418803880, + "longitude": -744102673 + }, + "name": "40 Mountain Road, Napanoch, NY 12458, USA" +}, { + "location": { + "latitude": 414204288, + "longitude": -747895140 + }, + "name": "" +}, { + "location": { + "latitude": 414777405, + "longitude": -740615601 + }, + "name": "" +}, { + "location": { + "latitude": 415464475, + "longitude": -747175374 + }, + "name": "48 North Road, Forestburgh, NY 12777, USA" +}, { + "location": { + "latitude": 404062378, + "longitude": -746376177 + }, + "name": "" +}, { + "location": { + "latitude": 405688272, + "longitude": -749285130 + }, + "name": "" +}, { + "location": { + "latitude": 400342070, + "longitude": -748788996 + }, + "name": "" +}, { + "location": { + "latitude": 401809022, + "longitude": -744157964 + }, + "name": "" +}, { + "location": { + "latitude": 404226644, + "longitude": -740517141 + }, + "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" +}, { + "location": { + "latitude": 410322033, + "longitude": -747871659 + }, + "name": "" +}, { + "location": { + "latitude": 407100674, + "longitude": -747742727 + }, + "name": "" +}, { + "location": { + "latitude": 418811433, + "longitude": -741718005 + }, + "name": "213 Bush Road, Stone Ridge, NY 12484, USA" +}, { + "location": { + "latitude": 415034302, + "longitude": -743850945 + }, + "name": "" +}, { + "location": { + "latitude": 411349992, + "longitude": -743694161 + }, + "name": "" +}, { + "location": { + "latitude": 404839914, + "longitude": -744759616 + }, + "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" +}, { + "location": { + "latitude": 414638017, + "longitude": -745957854 + }, + "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" +}, { + "location": { + "latitude": 412127800, + "longitude": -740173578 + }, + "name": "" +}, { + "location": { + "latitude": 401263460, + "longitude": -747964303 + }, + "name": "" +}, { + "location": { + "latitude": 412843391, + "longitude": -749086026 + }, + "name": "" +}, { + "location": { + "latitude": 418512773, + "longitude": -743067823 + }, + "name": "" +}, { + "location": { + "latitude": 404318328, + "longitude": -740835638 + }, + "name": "42-102 Main Street, Belford, NJ 07718, USA" +}, { + "location": { + "latitude": 419020746, + "longitude": -741172328 + }, + "name": "" +}, { + "location": { + "latitude": 404080723, + "longitude": -746119569 + }, + "name": "" +}, { + "location": { + "latitude": 401012643, + "longitude": -744035134 + }, + "name": "" +}, { + "location": { + "latitude": 404306372, + "longitude": -741079661 + }, + "name": "" +}, { + "location": { + "latitude": 403966326, + "longitude": -748519297 + }, + "name": "" +}, { + "location": { + "latitude": 405002031, + "longitude": -748407866 + }, + "name": "" +}, { + "location": { + "latitude": 409532885, + "longitude": -742200683 + }, + "name": "" +}, { + "location": { + "latitude": 416851321, + "longitude": -742674555 + }, + "name": "" +}, { + "location": { + "latitude": 406411633, + "longitude": -741722051 + }, + "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" +}, { + "location": { + "latitude": 413069058, + "longitude": -744597778 + }, + "name": "261 Van Sickle Road, Goshen, NY 10924, USA" +}, { + "location": { + "latitude": 418465462, + "longitude": -746859398 + }, + "name": "" +}, { + "location": { + "latitude": 411733222, + "longitude": -744228360 + }, + "name": "" +}, { + "location": { + "latitude": 410248224, + "longitude": -747127767 + }, + "name": "3 Hasta Way, Newton, NJ 07860, USA" +}] From ce02e0dbe5e78c4de266f20c3e7a71530c4d015c Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 20 Feb 2015 11:34:47 -0800 Subject: [PATCH 7/8] Added comments to route_guide_client.js --- src/node/examples/route_guide_client.js | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/node/examples/route_guide_client.js b/src/node/examples/route_guide_client.js index 549c9b78069..10da6d3a37b 100644 --- a/src/node/examples/route_guide_client.js +++ b/src/node/examples/route_guide_client.js @@ -36,6 +36,11 @@ var client = new examples.RouteGuide('localhost:50051'); var COORD_FACTOR = 1e7; +/** + * Run the getFeature demo. Calls getFeature with a point known to have a + * feature and a point known not to have a feature. + * @param {function} callback Called when this demo is complete + */ function runGetFeature(callback) { var next = _.after(2, callback); function featureCallback(error, feature) { @@ -65,6 +70,12 @@ function runGetFeature(callback) { client.getFeature(point2, featureCallback); } +/** + * Run the listFeatures demo. Calls listFeatures with a rectangle containing all + * of the features in the pre-generated database. Prints each response as it + * comes in. + * @param {function} callback Called when this demo is complete + */ function runListFeatures(callback) { var rectangle = { lo: { @@ -86,6 +97,12 @@ function runListFeatures(callback) { call.on('end', callback); } +/** + * Run the recordRoute demo. Sends several randomly chosen points from the + * pre-generated feature database with a variable delay in between. Prints the + * statistics when they are sent from the server. + * @param {function} callback Called when this demo is complete + */ function runRecordRoute(callback) { fs.readFile(__dirname + '/route_guide_db.json', function(err, data) { if (err) callback(err); @@ -102,7 +119,18 @@ function runRecordRoute(callback) { console.log('It took', stats.elapsed_time, 'seconds'); callback(); }); + /** + * Constructs a function that asynchronously sends the given point and then + * delays sending its callback + * @param {number} lat The latitude to send + * @param {number} lng The longitude to send + * @return {function(function)} The function that sends the point + */ function pointSender(lat, lng) { + /** + * Sends the point, then calls the callback after a delay + * @param {function} callback Called when complete + */ return function(callback) { console.log('Visiting point ' + lat/COORD_FACTOR + ', ' + lng/COORD_FACTOR); @@ -125,6 +153,11 @@ function runRecordRoute(callback) { }); } +/** + * Run the routeChat demo. Send some chat messages, and print any chat messages + * that are sent from the server. + * @param {function} callback Called when the demo is complete + */ function runRouteChat(callback) { var call = client.routeChat(); call.on('data', function(note) { @@ -168,6 +201,9 @@ function runRouteChat(callback) { call.end(); } +/** + * Run all of the demos in order + */ function main() { async.series([ runGetFeature, From 05c148093192d0a200ae7da6f568f0bf110afc19 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 20 Feb 2015 15:06:22 -0800 Subject: [PATCH 8/8] Updated client and server to use db from a variable path --- src/node/examples/route_guide_client.js | 7 ++++++- src/node/examples/route_guide_server.js | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/node/examples/route_guide_client.js b/src/node/examples/route_guide_client.js index 10da6d3a37b..d4c083a6c5c 100644 --- a/src/node/examples/route_guide_client.js +++ b/src/node/examples/route_guide_client.js @@ -29,6 +29,8 @@ var async = require('async'); var fs = require('fs'); +var parseArgs = require('minimist'); +var path = require('path'); var _ = require('underscore'); var grpc = require('..'); var examples = grpc.load(__dirname + '/route_guide.proto').examples; @@ -104,7 +106,10 @@ function runListFeatures(callback) { * @param {function} callback Called when this demo is complete */ function runRecordRoute(callback) { - fs.readFile(__dirname + '/route_guide_db.json', function(err, data) { + var argv = parseArgs(process.argv, { + string: 'db_path' + }); + fs.readFile(path.resolve(argv.db_path), function(err, data) { if (err) callback(err); var feature_list = JSON.parse(data); diff --git a/src/node/examples/route_guide_server.js b/src/node/examples/route_guide_server.js index 89d8d27cfba..bc9ed251019 100644 --- a/src/node/examples/route_guide_server.js +++ b/src/node/examples/route_guide_server.js @@ -28,6 +28,8 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. var fs = require('fs'); +var parseArgs = require('minimist'); +var path = require('path'); var _ = require('underscore'); var grpc = require('..'); var examples = grpc.load(__dirname + '/route_guide.proto').examples; @@ -234,7 +236,10 @@ if (require.main === module) { // If this is run as a script, start a server on an unused port var routeServer = getServer(); routeServer.bind('0.0.0.0:50051'); - fs.readFile(__dirname + '/route_guide_db.json', function(err, data) { + var argv = parseArgs(process.argv, { + string: 'db_path' + }); + fs.readFile(path.resolve(argv.db_path), function(err, data) { if (err) throw err; feature_list = JSON.parse(data); routeServer.listen();