mirror of https://github.com/grpc/grpc-node.git
				
				
				
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
|  *
 | |
|  * Copyright 2023 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.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| const grpc = require('@grpc/grpc-js');
 | |
| const protoLoader = require('@grpc/proto-loader');
 | |
| const parseArgs = require('minimist');
 | |
| 
 | |
| const PROTO_PATH = __dirname + '/../protos/echo.proto';
 | |
| 
 | |
| const packageDefinition = protoLoader.loadSync(
 | |
|   PROTO_PATH,
 | |
|   {keepCase: true,
 | |
|    longs: String,
 | |
|    enums: String,
 | |
|    defaults: true,
 | |
|    oneofs: true
 | |
|   });
 | |
| const echoProto = grpc.loadPackageDefinition(packageDefinition).grpc.examples.echo;
 | |
| 
 | |
| function main() {
 | |
|   let argv = parseArgs(process.argv.slice(2), {
 | |
|     string: 'target',
 | |
|     default: {target: 'localhost:50052'}
 | |
|   });
 | |
|   const client = new echoProto.Echo(argv.target, grpc.credentials.createInsecure());
 | |
|   const call = client.bidirectionalStreamingEcho();
 | |
|   const EXPECTED_MESSAGES = 2;
 | |
|   let receivedMessages = 0;
 | |
|   call.on('data', value => {
 | |
|     console.log(`received message "${value.message}"`)
 | |
|     receivedMessages += 1;
 | |
|     if (receivedMessages >= EXPECTED_MESSAGES) {
 | |
|       console.log('cancelling call');
 | |
|       call.cancel();
 | |
|     }
 | |
|   });
 | |
|   call.on('status', statusObject => {
 | |
|     console.log(`received call status with code ${grpc.status[statusObject.code]}`);
 | |
|   });
 | |
|   call.on('error', error => {
 | |
|     console.log(`received error ${error}`);
 | |
|   })
 | |
|   console.log('sending message "hello"');
 | |
|   call.write({message: 'hello'});
 | |
|   console.log('sending message "world"')
 | |
|   call.write({message: 'world'});
 | |
| }
 | |
| 
 | |
| main();
 |