1 module grpc.server.builder; 2 import interop.headers; 3 import grpc.server; 4 import core.lifetime; 5 6 class ServerBuilder { 7 private { 8 ushort _port; 9 int _maxInboundMeta; 10 int _maxInboundMessage; 11 long _timeout; 12 bool _useTLS; 13 string _tlsChain; 14 string _tlsKey; 15 Server _server; 16 } 17 18 @property ushort port(ushort _new) { 19 _port = _new; 20 return _port; 21 } 22 23 @property ushort port() { 24 return _port; 25 } 26 27 void register(T)() { 28 _server.registerService!T(); 29 } 30 31 Server build() { 32 auto mem = gpr_zalloc(__traits(classInstanceSize, Server)); 33 Server srv = cast(Server)mem; 34 if (mem != null) { 35 grpc_channel_args args; 36 args.num_args = 1; 37 38 grpc_arg[] _a; 39 grpc_arg arg; 40 import std.string; 41 arg.type = GRPC_ARG_INTEGER; 42 arg.key = cast(char*)("grpc.server_handshake_timeout_ms".toStringz); 43 arg.value.integer = 1000; 44 _a ~= arg; 45 46 args.args = _a.ptr; 47 emplace!Server(srv, args); 48 49 srv.bind("0.0.0.0", 50051); 50 } 51 else { 52 assert(0, "Allocation failed"); 53 } 54 55 return srv; 56 } 57 58 59 this() { 60 } 61 62 ~this() { 63 64 } 65 66 }