123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <?php
- /*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- // php:generate protoc --proto_path=./../../protos --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=./../../../bins/opt/grpc_php_plugin ./../../protos/route_guide.proto
- require dirname(__FILE__).'/../vendor/autoload.php';
- define('COORD_FACTOR', 1e7);
- $client = new Routeguide\RouteGuideClient('localhost:50051', [
- 'credentials' => Grpc\ChannelCredentials::createInsecure(),
- ]);
- function printFeature($feature)
- {
- $name = $feature->getName();
- if (!$name) {
- $name_str = 'no feature';
- } else {
- $name_str = "feature called $name";
- }
- echo sprintf(
- "Found %s \n at %f, %f\n",
- $name_str,
- $feature->getLocation()->getLatitude() / COORD_FACTOR,
- $feature->getLocation()->getLongitude() / COORD_FACTOR
- );
- }
- /**
- * Run the getFeature demo. Calls getFeature with a point known to have a
- * feature and a point known not to have a feature.
- */
- function runGetFeature()
- {
- echo "Running GetFeature...\n";
- global $client;
- $point = new Routeguide\Point();
- $points = array(
- array(409146138, -746188906),
- array(0, 0),
- );
- foreach ($points as $p) {
- $point->setLatitude($p[0]);
- $point->setLongitude($p[1]);
- // make a unary grpc call
- list($feature, $status) = $client->GetFeature($point)->wait();
- printFeature($feature);
- }
- }
- /**
- * 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.
- */
- function runListFeatures()
- {
- echo "Running ListFeatures...\n";
- global $client;
- $lo_point = new Routeguide\Point();
- $hi_point = new Routeguide\Point();
- $lo_point->setLatitude(400000000);
- $lo_point->setLongitude(-750000000);
- $hi_point->setLatitude(420000000);
- $hi_point->setLongitude(-730000000);
- $rectangle = new Routeguide\Rectangle();
- $rectangle->setLo($lo_point);
- $rectangle->setHi($hi_point);
- // start the server streaming call
- $call = $client->ListFeatures($rectangle);
- // an iterator over the server streaming responses
- $features = $call->responses();
- foreach ($features as $feature) {
- printFeature($feature);
- }
- }
- /**
- * 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.
- */
- function runRecordRoute()
- {
- echo "Running RecordRoute...\n";
- global $client, $argv;
- // start the client streaming call
- $call = $client->RecordRoute();
- $db = json_decode(file_get_contents($argv[1]), true);
- $num_points_in_db = count($db);
- $num_points = 10;
- for ($i = 0; $i < $num_points; ++$i) {
- $point = new Routeguide\Point();
- $index = rand(0, $num_points_in_db - 1);
- $lat = $db[$index]['location']['latitude'];
- $long = $db[$index]['location']['longitude'];
- $feature_name = $db[$index]['name'];
- $point->setLatitude($lat);
- $point->setLongitude($long);
- echo sprintf(
- "Visiting point %f, %f,\n with feature name: %s\n",
- $lat / COORD_FACTOR,
- $long / COORD_FACTOR,
- $feature_name ? $feature_name : '<empty>'
- );
- usleep(rand(300000, 800000));
- $call->write($point);
- }
- list($route_summary, $status) = $call->wait();
- echo sprintf(
- "Finished trip with %d points\nPassed %d features\n".
- "Travelled %d meters\nIt took %d seconds\n",
- $route_summary->getPointCount(),
- $route_summary->getFeatureCount(),
- $route_summary->getDistance(),
- $route_summary->getElapsedTime()
- );
- }
- /**
- * Run the routeChat demo. Send some chat messages, and print any chat
- * messages that are sent from the server.
- */
- function runRouteChat()
- {
- echo "Running RouteChat...\n";
- global $client;
- // start the bidirectional streaming call
- $call = $client->RouteChat();
- $notes = array(
- array(1, 1, 'first message'),
- array(1, 2, 'second message'),
- array(2, 1, 'third message'),
- array(1, 1, 'fourth message'),
- array(1, 1, 'fifth message'),
- );
- foreach ($notes as $n) {
- $point = new Routeguide\Point();
- $point->setLatitude($lat = $n[0]);
- $point->setLongitude($long = $n[1]);
- $route_note = new Routeguide\RouteNote();
- $route_note->setLocation($point);
- $route_note->setMessage($message = $n[2]);
- echo sprintf(
- "Sending message: '%s' at (%d, %d)\n",
- $message,
- $lat,
- $long
- );
- // send a bunch of messages to the server
- $call->write($route_note);
- }
- $call->writesDone();
- // read from the server until there's no more
- while ($route_note_reply = $call->read()) {
- echo sprintf(
- "Previous left message at (%d, %d): '%s'\n",
- $route_note_reply->getLocation()->getLatitude(),
- $route_note_reply->getLocation()->getLongitude(),
- $route_note_reply->getMessage()
- );
- }
- }
- /**
- * Run all of the demos in order.
- */
- function main()
- {
- runGetFeature();
- runListFeatures();
- runRecordRoute();
- runRouteChat();
- }
- if (empty($argv[1])) {
- echo 'Usage: php -d extension=grpc.so route_guide_client.php '.
- "<path to route_guide_db.json>\n";
- exit(1);
- }
- main();
|