-
Notifications
You must be signed in to change notification settings - Fork 0
/
greeter.ts
81 lines (76 loc) · 2.83 KB
/
greeter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { ServerContext } from '@tempojs/server';
import {
BaseGreeterService,
IHelloRequest,
IHelloResponse,
TempoServiceRegistry,
} from './services.gen';
/**
* GreeterService class extends BaseGreeterService to provide various greeting services.
* It is registered to the TempoServiceRegistry with the service name of BaseGreeterService.
*/
@TempoServiceRegistry.register(BaseGreeterService.serviceName)
export class GreeterService extends BaseGreeterService {
/**
* The sayHello method takes a record and context as input, and returns a greeting message.
*
* @param record - The input request containing the name.
* @param context - The server context.
* @returns - A promise that resolves to a greeting message.
*/
public override async sayHello(
record: IHelloRequest,
context: ServerContext
): Promise<IHelloResponse> {
return Promise.resolve({ serviceMessage: `Hello ${record.name}` });
}
/**
* The sayHelloClient method takes a function generating multiple records and context as input,
* counts the number of messages sent, and returns that count in the response.
*
* @param records - An async generator function that yields multiple records.
* @param context - The server context.
* @returns - A promise that resolves to the number of messages sent.
*/
public override async sayHelloClient(
records: () => AsyncGenerator<IHelloRequest, void, undefined>,
context: ServerContext
): Promise<IHelloResponse> {
let count = 0;
for await (const _ of records()) {
count++;
}
return { serviceMessage: `You sent ${count} messages` };
}
/**
* The sayHelloServer method sends back a series of 10 greeting messages to the client.
*
* @param record - The input request containing the name.
* @param context - The server context.
* @returns - An async generator that yields a series of greeting messages.
*/
public override async *sayHelloServer(
record: IHelloRequest,
context: ServerContext
): AsyncGenerator<IHelloResponse, void, undefined> {
for (let i = 0; i < 10; i++) {
yield { serviceMessage: `Hello ${record.name} / ${i}` };
}
}
/**
* The sayHelloDuplex method takes a function generating multiple records and context as input,
* and for each record, it sends back a greeting message to the client.
*
* @param records - An async generator function that yields multiple records.
* @param context - The server context.
* @returns - An async generator that yields a greeting message for each request record.
*/
public override async *sayHelloDuplex(
records: () => AsyncGenerator<IHelloRequest, void, undefined>,
context: ServerContext
): AsyncGenerator<IHelloResponse, void, undefined> {
for await (const value of records()) {
yield { serviceMessage: `Hello ${value.name}` };
}
}
}