blob: b3553ee536614a1d13ff5208dba6cede26e272fe [file] [log] [blame]
Eric Anderson04c97a12016-02-03 14:38:39 -08001// Copyright 2015-2016, Google Inc.
Tim Emiola23307f22015-02-18 04:12:18 -08002// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following disclaimer
12// in the documentation and/or other materials provided with the
13// distribution.
14// * Neither the name of Google Inc. nor the names of its
15// contributors may be used to endorse or promote products derived from
16// this software without specific prior written permission.
17//
18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30syntax = "proto3";
31
Eric Anderson8d3ae462016-02-03 10:07:44 -080032option java_multiple_files = true;
33option java_package = "io.grpc.examples.routeguide";
34option java_outer_classname = "RouteGuideProto";
Jorge Canizalese3534c32015-06-02 02:02:28 -070035option objc_class_prefix = "RTG";
Tim Emiola23307f22015-02-18 04:12:18 -080036
yang-g9a720212015-08-31 13:14:13 -070037package routeguide;
Tim Emiola23307f22015-02-18 04:12:18 -080038
Tim Emiolac1ee3822015-02-18 14:15:05 -080039// Interface exported by the server.
40service RouteGuide {
41 // A simple RPC.
42 //
43 // Obtains the feature at a given position.
Daniel Wangb224d6a2015-02-25 16:03:09 -080044 //
45 // A feature with an empty name is returned if there's no feature at the given
46 // position.
Tim Emiolac1ee3822015-02-18 14:15:05 -080047 rpc GetFeature(Point) returns (Feature) {}
48
49 // A server-to-client streaming RPC.
50 //
51 // Obtains the Features available within the given Rectangle. Results are
52 // streamed rather than returned at once (e.g. in a response message with a
53 // repeated field), as the rectangle may cover a large area and contain a
54 // huge number of features.
55 rpc ListFeatures(Rectangle) returns (stream Feature) {}
56
57 // A client-to-server streaming RPC.
58 //
59 // Accepts a stream of Points on a route being traversed, returning a
60 // RouteSummary when traversal is completed.
61 rpc RecordRoute(stream Point) returns (RouteSummary) {}
62
63 // A Bidirectional streaming RPC.
64 //
65 // Accepts a stream of RouteNotes sent while a route is being traversed,
66 // while receiving other RouteNotes (e.g. from other users).
67 rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
68}
69
Tim Emiola23307f22015-02-18 04:12:18 -080070// Points are represented as latitude-longitude pairs in the E7 representation
71// (degrees multiplied by 10**7 and rounded to the nearest integer).
72// Latitudes should be in the range +/- 90 degrees and longitude should be in
73// the range +/- 180 degrees (inclusive).
74message Point {
Tim Emiolac1ee3822015-02-18 14:15:05 -080075 int32 latitude = 1;
76 int32 longitude = 2;
Tim Emiola23307f22015-02-18 04:12:18 -080077}
78
79// A latitude-longitude rectangle, represented as two diagonally opposite
80// points "lo" and "hi".
81message Rectangle {
82 // One corner of the rectangle.
Tim Emiolac1ee3822015-02-18 14:15:05 -080083 Point lo = 1;
Tim Emiola23307f22015-02-18 04:12:18 -080084
85 // The other corner of the rectangle.
Tim Emiolac1ee3822015-02-18 14:15:05 -080086 Point hi = 2;
Tim Emiola23307f22015-02-18 04:12:18 -080087}
88
89// A feature names something at a given point.
90//
Tim Emiola9ab2c8b2015-02-18 08:08:15 -080091// If a feature could not be named, the name is empty.
Tim Emiola23307f22015-02-18 04:12:18 -080092message Feature {
93 // The name of the feature.
Tim Emiolac1ee3822015-02-18 14:15:05 -080094 string name = 1;
Tim Emiola23307f22015-02-18 04:12:18 -080095
96 // The point where the feature is detected.
Tim Emiolac1ee3822015-02-18 14:15:05 -080097 Point location = 2;
Tim Emiola23307f22015-02-18 04:12:18 -080098}
99
100// A RouteNote is a message sent while at a given point.
101message RouteNote {
Tim Emiola9ab2c8b2015-02-18 08:08:15 -0800102 // The location from which the message is sent.
Tim Emiolac1ee3822015-02-18 14:15:05 -0800103 Point location = 1;
Tim Emiola23307f22015-02-18 04:12:18 -0800104
Tim Emiola9ab2c8b2015-02-18 08:08:15 -0800105 // The message to be sent.
Tim Emiolac1ee3822015-02-18 14:15:05 -0800106 string message = 2;
Tim Emiola23307f22015-02-18 04:12:18 -0800107}
108
Tim Emiola9ab2c8b2015-02-18 08:08:15 -0800109// A RouteSummary is received in response to a RecordRoute rpc.
Tim Emiola23307f22015-02-18 04:12:18 -0800110//
Tim Emiola9ab2c8b2015-02-18 08:08:15 -0800111// It contains the number of individual points received, the number of
112// detected features, and the total distance covered as the cumulative sum of
113// the distance between each point.
Tim Emiola23307f22015-02-18 04:12:18 -0800114message RouteSummary {
115 // The number of points received.
Tim Emiolac1ee3822015-02-18 14:15:05 -0800116 int32 point_count = 1;
Tim Emiola23307f22015-02-18 04:12:18 -0800117
118 // The number of known features passed while traversing the route.
Tim Emiolac1ee3822015-02-18 14:15:05 -0800119 int32 feature_count = 2;
Tim Emiola23307f22015-02-18 04:12:18 -0800120
121 // The distance covered in metres.
Tim Emiolac1ee3822015-02-18 14:15:05 -0800122 int32 distance = 3;
Tim Emiola23307f22015-02-18 04:12:18 -0800123
124 // The duration of the traversal in seconds.
Tim Emiolac1ee3822015-02-18 14:15:05 -0800125 int32 elapsed_time = 4;
Tim Emiola23307f22015-02-18 04:12:18 -0800126}