11import * as grpc from 'grpc' ;
2+ import { Logger } from './logger' ;
3+ import { Browser } from './browser' ;
24
35const SERVER_ADDRESS = '127.0.0.1:50051' ;
46const RENDERER_PROTO_PATH = __dirname + '/../proto/renderer.proto' ;
@@ -7,30 +9,52 @@ const GRPC_HEALTH_PROTO_PATH = __dirname + '/../proto/health.proto';
79export const RENDERER_PROTO = grpc . load ( RENDERER_PROTO_PATH ) . models ;
810export const GRPC_HEALTH_PROTO = grpc . load ( GRPC_HEALTH_PROTO_PATH ) . grpc . health . v1 ;
911
10- /**
11- * Implements the Health Check RPC method.
12- */
13- function check ( call , callback ) {
14- callback ( null , { status : 'SERVING' } ) ;
15- }
1612
17- function render ( call , callback ) {
18- console . log ( 'render' , call . request ) ;
19- callback ( null , { filePath : call . request . url + 'resp' } ) ;
20- }
13+ export class GrpcPlugin {
2114
22- /**
23- * Starts an RPC server that receives requests for the Greeter service at the
24- * sample server port
25- */
26- export function startGrpcPlugin ( ) {
27- var server = new grpc . Server ( ) ;
28- server . addService ( GRPC_HEALTH_PROTO . Health . service , { check : check } ) ;
29- server . addService ( RENDERER_PROTO . Renderer . service , { render : render } ) ;
30- server . bind ( SERVER_ADDRESS , grpc . ServerCredentials . createInsecure ( ) ) ;
31- server . start ( ) ;
32- console . log ( `1|1|tcp|${ SERVER_ADDRESS } |grpc` ) ;
33- console . error ( 'Renderer plugin started' ) ;
34- }
15+ constructor ( private log : Logger , private browser : Browser ) {
16+ }
17+
18+ start ( ) {
19+ var server = new grpc . Server ( ) ;
20+
21+ server . addService ( GRPC_HEALTH_PROTO . Health . service , {
22+ check : this . check . bind ( this ) ,
23+ } ) ;
24+ server . addService ( RENDERER_PROTO . Renderer . service , {
25+ render : this . render . bind ( this ) ,
26+ } ) ;
27+
28+ server . bind ( SERVER_ADDRESS , grpc . ServerCredentials . createInsecure ( ) ) ;
29+ server . start ( ) ;
3530
31+ console . log ( `1|1|tcp|${ SERVER_ADDRESS } |grpc` ) ;
32+ this . log . info ( 'Renderer plugin started' ) ;
33+ }
34+
35+ check ( call , callback ) {
36+ callback ( null , { status : 'SERVING' } ) ;
37+ }
38+
39+ async render ( call , callback ) {
40+ let req = call . request ;
41+
42+ this . log . info ( 'render req' , req ) ;
43+
44+ let options = {
45+ url : req . url ,
46+ width : req . width ,
47+ height : req . height ,
48+ filePath : req . filePath ,
49+ } ;
50+
51+ try {
52+ let result = await this . browser . render ( options ) ;
53+ callback ( null , { error : '' } ) ;
54+ } catch ( err ) {
55+ this . log . info ( "Error" , err ) ;
56+ callback ( null , { error : err . toString ( ) } ) ;
57+ }
58+ }
59+ }
3660
0 commit comments