xref: /aosp_15_r20/external/flatbuffers/grpc/examples/ts/greeter/src/server.ts (revision 890232f25432b36107d06881e0a25aaa6b473652)
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();