import * as grpc from '@grpc/grpc-js'; import * as flatbuffers from 'flatbuffers'; import {GreeterService, IGreeterServer} from './greeter_grpc'; import {HelloReply} from './models/hello-reply'; import {HelloRequest} from './models/hello-request'; const greeter: IGreeterServer = { SayHello( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData, ): void { console.log(`SayHello ${call.request.name()}`); const builder = new flatbuffers.Builder(); const offset = builder.createString(`welcome ${call.request.name()}`); const root = HelloReply.createHelloReply(builder, offset); builder.finish(root); callback( null, HelloReply.getRootAsHelloReply( new flatbuffers.ByteBuffer(builder.asUint8Array()), ), ); }, async SayManyHellos( call: grpc.ServerWritableStream, ): Promise { const name = call.request.name(); console.log(`${call.request.name()} saying hi in different langagues`); ['Hi', 'Hallo', 'Ciao'].forEach((element) => { const builder = new flatbuffers.Builder(); const offset = builder.createString(`${element} ${name}`); const root = HelloReply.createHelloReply(builder, offset); builder.finish(root); call.write( HelloReply.getRootAsHelloReply( new flatbuffers.ByteBuffer(builder.asUint8Array()), ), ); }); call.end(); }, }; function serve(): void { const PORT = 3000; const server = new grpc.Server(); server.addService(GreeterService, greeter); console.log(`Listening on ${PORT}`); server.bindAsync( `localhost:${PORT}`, grpc.ServerCredentials.createInsecure(), (err: Error | null, port: number) => { if (err) { console.error(`Server error: ${err.message}`); } else { console.log(`Server bound on port: ${port}`); server.start(); } }, ); } serve();