1313- [x] ` client ` unary calls
1414- [x] multiplex calls
1515- [x] ` server ` server streams
16- - [ ] ` client ` server streams
16+ - [x ] ` client ` server streams
1717- [ ] context deadlines
1818- [ ] logging interface
1919
@@ -36,6 +36,7 @@ package prohazko;
3636
3737service Greeter {
3838 rpc SayHello (HelloRequest) returns (HelloReply) {}
39+ rpc ShoutHello (HelloRequest) returns (stream HelloReply) {}
3940}
4041
4142message HelloRequest {
@@ -52,12 +53,13 @@ message HelloReply {
5253Service typings are not essential, but it's nice to have them
5354
5455``` sh
55- $ deno run --allow-read https://deno.land/x/grpc_basic@0.3.3 /gen/dts.ts ./greeter.proto > ./greeter.d.ts
56+ $ deno run --allow-read https://deno.land/x/grpc_basic@0.4.1 /gen/dts.ts ./greeter.proto > ./greeter.d.ts
5657```
5758
5859``` ts
5960export interface Greeter {
6061 SayHello(request : HelloRequest ): Promise <HelloReply >;
62+ ShoutHello(request : HelloRequest ): AsyncGenerator <HelloReply >;
6163}
6264
6365export interface HelloRequest {
@@ -72,38 +74,60 @@ export interface HelloReply {
7274### ` server.ts `
7375
7476``` ts
75- import { GrpcServer } from " https://deno.land/x/grpc_basic@0.3.3 /server.ts" ;
77+ import { GrpcServer } from " https://deno.land/x/grpc_basic@0.4.1 /server.ts" ;
7678import { Greeter } from " ./greeter.d.ts" ;
7779
7880const port = 15070 ;
79- const root = await Deno .readTextFile (" ./greeter.proto" );
80-
8181const server = new GrpcServer ();
8282
83- server .addService <Greeter >(root , {
83+ const protoPath = new URL (" ./greeter.proto" , import .meta .url );
84+ const protoFile = await Deno .readTextFile (protoPath );
85+
86+ server .addService <Greeter >(protoFile , {
87+
8488 async SayHello({ name }) {
8589 const message = ` hello ${name || " stranger" } ` ;
8690 return { message };
91+ },
92+
93+ async * ShoutHello({ name }) {
94+ for (const n of [0 , 1 , 2 ]) {
95+ const message = ` hello ${name || " stranger" } #${n } ` ;
96+ yield { message };
97+ }
8798 }
8899});
89100
90101console .log (` gonna listen on ${port } port ` );
91102for await (const conn of Deno .listen ({ port })) {
92103 server .handle (conn );
93104}
105+
94106```
95107
96108### ` client.ts `
97109
98110``` ts
99- import { getClient } from " https://deno.land/x/grpc_basic@0.3.3 /client.ts" ;
111+ import { getClient } from " https://deno.land/x/grpc_basic@0.4.1 /client.ts" ;
100112import { Greeter } from " ./greeter.d.ts" ;
101113
102- const port = 15070 ;
103- const root = await Deno .readTextFile (" ./greeter.proto " );
114+ const protoPath = new URL ( " ./greeter.proto " , import . meta . url ) ;
115+ const protoFile = await Deno .readTextFile (protoPath );
104116
105- const client = getClient <Greeter >({ port , root , serviceName: " Greeter" });
117+ const client = getClient <Greeter >({
118+ port: 15070 ,
119+ root: protoFile ,
120+ serviceName: " Greeter" ,
121+ });
122+
123+ /* unary calls */
124+ console .log (await client .SayHello ({ name: " unary #1" }));
125+ console .log (await client .SayHello ({ name: " unary #2" }));
126+
127+ /* server stream */
128+ for await (const reply of client .ShoutHello ({ name: " streamed" })) {
129+ console .log (reply );
130+ }
106131
107- const resp = await client .SayHello ({ name: " oleg" });
108- console .log (resp );
132+ client .close ();
109133```
0 commit comments