blob: a3f2eeec2ec5a2ce38b92ab054117be9fa1b318e [file] [log] [blame]
James Kuszmaul8e62b022022-03-22 09:33:25 -07001import * 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();