-
Notifications
You must be signed in to change notification settings - Fork 7
/
main.go
76 lines (64 loc) · 1.95 KB
/
main.go
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
package main
import (
"context"
"log"
"net"
"net/http"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/infobloxopen/atlas-app-toolkit/gateway"
demo "github.com/infobloxopen/protoc-gen-preprocess/example/proto"
grpc_preprocessor "github.com/infobloxopen/protoc-gen-preprocess/middleware"
"google.golang.org/grpc"
)
const (
demoAddress = "localhost:8081"
serverAddress = "localhost:8080"
)
type demoServer struct {
// embedding UnimplementedDemoServiceServer for forward compatibility
demo.UnimplementedDemoServiceServer
}
//Echo implementation of demo service
func (s demoServer) Echo(ctx context.Context, d *demo.Demo) (*demo.Demo, error) {
return d, nil
}
func runService() {
// Middleware chain.
interceptors := []grpc.UnaryServerInterceptor{
grpc_preprocessor.UnaryServerInterceptor(), // preprocessing middleware
}
server := grpc.NewServer(grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(interceptors...)))
demo.RegisterDemoServiceServer(server, &demoServer{})
ln, err := net.Listen("tcp", demoAddress)
if err != nil {
log.Fatal(err)
}
if err = server.Serve(ln); err != nil {
log.Fatal(err)
}
}
func newDemoHandler(ctx context.Context, addr string, opts ...runtime.ServeMuxOption) (http.Handler, error) {
mux := runtime.NewServeMux(opts...)
dialOpts := []grpc.DialOption{grpc.WithInsecure()}
err := demo.RegisterDemoServiceHandlerFromEndpoint(ctx, mux, addr, dialOpts)
if err != nil {
return nil, err
}
return mux, nil
}
func runServer() {
mux := http.NewServeMux()
errHandler := runtime.WithErrorHandler(gateway.ProtoMessageErrorHandler)
opHandler := runtime.WithMetadata(gateway.MetadataAnnotator)
demoHandler, err := newDemoHandler(context.Background(), demoAddress, errHandler, opHandler)
if err != nil {
log.Fatalln(err)
}
mux.Handle("/", demoHandler)
http.ListenAndServe(serverAddress, mux)
}
func main() {
go runService()
runServer()
}