1import * as grpc from '@grpc/grpc-js'; 2import * as flatbuffers from 'flatbuffers'; 3import { HelloReply } from './models/hello-reply'; 4import { HelloRequest } from './models/hello-request'; 5import { IGreeterServer, GreeterService } from './greeter_grpc'; 6 7const greeter: IGreeterServer = { 8 SayHello(call: grpc.ServerUnaryCall<HelloRequest, HelloReply>, callback: grpc.sendUnaryData<HelloReply>): void { 9 console.log(`SayHello ${call.request.name()}`); 10 const builder = new flatbuffers.Builder(); 11 const offset = builder.createString(`welcome ${call.request.name()}`); 12 const root = HelloReply.createHelloReply(builder, offset); 13 builder.finish(root); 14 callback(null, HelloReply.getRootAsHelloReply(new flatbuffers.ByteBuffer(builder.asUint8Array()))); 15 }, 16 async SayManyHellos(call: grpc.ServerWritableStream<HelloRequest, HelloReply>): Promise<void> { 17 const name = call.request.name(); 18 console.log(`${call.request.name()} saying hi in different langagues`); 19 ['Hi', 'Hallo', 'Ciao'].forEach(element => { 20 const builder = new flatbuffers.Builder(); 21 const offset = builder.createString(`${element} ${name}`); 22 const root = HelloReply.createHelloReply(builder, offset); 23 builder.finish(root); 24 call.write(HelloReply.getRootAsHelloReply(new flatbuffers.ByteBuffer(builder.asUint8Array()))) 25 }); 26 call.end(); 27 } 28} 29 30function serve(): void { 31 const PORT = 3000; 32 const server = new grpc.Server(); 33 server.addService(GreeterService, greeter); 34 console.log(`Listening on ${PORT}`); 35 server.bindAsync( 36 `localhost:${PORT}`, 37 grpc.ServerCredentials.createInsecure(), 38 (err: Error | null, port: number) => { 39 if (err) { 40 console.error(`Server error: ${err.message}`); 41 } else { 42 console.log(`Server bound on port: ${port}`); 43 server.start(); 44 } 45 } 46 ); 47} 48 49serve();